Skip to content

docs(specs): static OOH draft proposal - #6146

Merged
bokelley merged 2 commits into
mainfrom
static-ooh-standards-research
Aug 7, 2026
Merged

docs(specs): static OOH draft proposal#6146
bokelley merged 2 commits into
mainfrom
static-ooh-standards-research

Conversation

@bokelley

@bokelley bokelley commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Summary

Draft design doc for adding static (printed) out-of-home to the Media Buy protocol — the channel gap raised by AdQuick, who transact static OOH daily and want to help define it in the spec. ooh exists in channels.json and the media channel taxonomy today, but nothing downstream implements it: the DOOH guide requires an impression tracker on every format, and a printed bulletin has no play event to fire.

The draft is grounded in existing standards rather than invented conventions:

  • OAAA model contracts (Bulletin/Poster Net Contracts) for proof-of-performance photos, posting leeway, material deadlines, and makegoods — conventions the whole US industry mirrors but nobody has made machine-readable
  • OAAA Standard OOH Media Formats + Print Production Specs for format definitions and asset requirements
  • IAB Tech Lab OpenDirect 2.1 (Oct 2024, with OAAA/OMA/Outsmart) as prior art that classic OOH belongs in guaranteed order-based trading — vocabulary borrowed, transport not
  • Geopath/Route/MOVE/COMMB for delivery as vendor-attested weekly modeled impressions, kept pluggable given the announced Geopath→Ipsos transition

Core architectural claim: static OOH is broadcast-shaped, not DOOH-shaped — no tracker slot + billing_measurement naming the audience currency, reusing the print creative machinery, the installment/material-deadline model for posting periods, and existing billing-authority modes. The genuinely new pieces are posting-period semantics, a structured measurement-methodology reference, a posting_evidence proof-of-performance artifact, and an ooh property type.

Status

Discussion draft — this is the GitHub-first strawman ahead of Media Buy WG review. The Open Questions section lists the decisions that need real transaction data (unit identity across operators, markets without a measurement currency, rotary bulletins, makegood states, materials responsibility, the dooh/ooh boundary). Comments welcome, especially from folks who transact static today.

No schema or docs changes in this PR — design doc only.

🤖 Generated with Claude Code

…t prior art

Codifies the standards research for adding static (printed) OOH to the
Media Buy protocol: broadcast-style tracker-less measurement via
billing_measurement, OAAA format/contract conventions (posting periods,
material deadlines, proof-of-performance photos), posting periods on the
installment model, and an ooh property type. Prepared ahead of the
AdQuick discussion.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
aao-secretariat[bot]
aao-secretariat Bot previously approved these changes Aug 2, 2026

@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: Approve

Approve — clean first review, no blocking findings.

Checked: single new file specs/static-ooh.md (125 lines), a discussion-draft design memo explicitly marked "Draft — for discussion." It touches no published protocol surface (no static/schemas/source/**, no docs/reference/** normative docs, no dist/**, no release scripts), so no changeset is required and the wire-shape/immutability/oneOf/patch-eligibility gates do not apply. Constitutionally it is Normative-input (a memo), not the change itself — not a Breaking-class change requiring ratification.

Reviewer verified all six load-bearing factual claims about the existing spec as accurate against base (ooh in channels.json but absent from property-type.json, taxonomy exclusion quoted verbatim, reporting-frequency.json lacking weekly, venue_breakdown nesting, impression-multiplier prose with no backing field, Static Billboard Manifest impression_tracker requirement).

No Critical/High/Medium findings. high_risk: false, gated_paths: false (so the REVIEW_REQUIRED status does not trigger row 2), no no-auto-approve team match, no prior decision. Rows 1–8 do not fire; falls through to row 9 → approve.

Adopts the option-(c) vocabulary from #6140 review (panels[].id_type,
estimation_basis), the #6138 reporting-cadence finding, and maps the
adjacent issue set (#5684 evidence artifact, #5537 multiplier, #5538
geo, #5880 by_property, #6139 basis placement) with a PR sequence.

Co-Authored-By: Claude Fable 5 <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: Approve

Approve — clean prose-only spec draft, no blocking findings.

This PR adds a single new file, specs/static-ooh.md, a Draft design narrative for the Working Group proposing static-OOH support (channel guide, ooh_metrics, posting evidence, installment-based posting periods, property-type/identifier additions). It is prose only — no published protocol surface is touched: no JSON Schema under static/schemas/source/**, no docs/reference/** normative docs, no dist/** artifacts, no wire shape, and no server code. Consequently the changeset, oneOf-discriminator, artifact-immutability, and 3.1.x patch-eligibility gates do not apply.

Gate checks:

  • No no-auto-approve team match.
  • gated_paths: false, so the deterministic path gate does not fire even though review_decision is REVIEW_REQUIRED (row 2 requires gated_paths: true).
  • high_risk: false; no deleted/modified high-risk files.
  • No breaking-class protocol change (a draft narrative adds no normative wire requirement).

Reviewer verified every load-bearing factual claim against the repo; all hold. Zero findings at any severity. Prior decision was also approve on an earlier head with no findings. Rows 1–8 do not fire; falls through to row 9.

@bokelley
bokelley merged commit e79ffbb into main Aug 7, 2026
14 checks passed
@bokelley
bokelley deleted the static-ooh-standards-research branch August 7, 2026 06:55
bokelley added a commit that referenced this pull request Aug 24, 2026
…ecords, channel guide

Static OOH has no play event: the channel's delivery number is a
period-level modeled audience estimate and its settlement artifact is
the posting record, not an airing log. Adds the option-(c) shape
converged on in #6140:

- ooh_metrics delivery block: panels[] with typed identifiers
  (geopath | route_frame | plant_face | other), posting period,
  contracted share of voice, illuminated hours, estimated_impressions
  with declared estimation_basis (geopath_dec | route_frame_data |
  seller_modeled), and postings[] — per-unit posting dates and photo
  evidence per OAAA proof-of-performance conventions
- ooh_metrics in available-metric; delivery doc tables updated
- docs/creative/channels/ooh.mdx: canonical custom-format contract for
  printed units (physical live-copy dimensions at effective print
  resolution), posting-period flighting, billing_measurement-based
  reconciliation

Design narrative in specs/static-ooh.md (#6146). Closes the schema
half of #6140; grounded in OAAA model-contract conventions.

Refs #6140, #6138

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Aug 25, 2026
…ecords, channel guide (#6241)

* feat(media-buy): static OOH channel contract — ooh_metrics, posting records, channel guide

Static OOH has no play event: the channel's delivery number is a
period-level modeled audience estimate and its settlement artifact is
the posting record, not an airing log. Adds the option-(c) shape
converged on in #6140:

- ooh_metrics delivery block: panels[] with typed identifiers
  (geopath | route_frame | plant_face | other), posting period,
  contracted share of voice, illuminated hours, estimated_impressions
  with declared estimation_basis (geopath_dec | route_frame_data |
  seller_modeled), and postings[] — per-unit posting dates and photo
  evidence per OAAA proof-of-performance conventions
- ooh_metrics in available-metric; delivery doc tables updated
- docs/creative/channels/ooh.mdx: canonical custom-format contract for
  printed units (physical live-copy dimensions at effective print
  resolution), posting-period flighting, billing_measurement-based
  reconciliation

Design narrative in specs/static-ooh.md (#6146). Closes the schema
half of #6140; grounded in OAAA model-contract conventions.

Refs #6140, #6138

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(schema): enforce estimation_basis when estimated_impressions is present

The ooh_metrics description asserts provenance MUST be declared, but
nothing enforced it — a seller could emit the settlement number with
no basis and stay schema-valid. Adds the draft-07 property dependency
(same pattern as the existing reach → reach_unit rule) so the MUST is
schema-enforced rather than description prose.

Addresses PR #6241 review (DR-0001).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(media-buy): WG amendments — experimental ooh_metrics, shared evidence artifact, measurement_source mirror

Applies the amendments from the WG approval (experimental in 3.2):

- estimation_basis collapses to a methodology tier (currency_measured |
  seller_modeled); provider identity moves to the ratified row-level
  measurement_source (#6139 decision 1), mirrored here from
  delivery-forecast.json so measured-channel rows self-describe
- panels[] carry multiple identifiers simultaneously (measurement
  currency + operator panel number, the pair OOH contracts key on)
- postings[] events carry occurred_at (posted_at fit only the posted
  event); evidence artifacts move to the new channel-neutral
  placement-evidence core schema, shared with print tearsheets (#5684)
- B-1 flight-end encoding from PR review: average_posted_date +
  materials_timely (seller's assertion about the buyer's delivery,
  not derivable from postings[] evidence)
- OAAA clause labeling from PR review: §3.5 evidence SLA is five
  calendar days (distinct from §2.2 five-business-day posting
  completion); poster showings get "close-up" wording
- top-level impressions SHOULD mirror the block estimate (normative)
- ooh_metrics and placement-evidence marked x-status: experimental

Refs #6140, #6139, #5684

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant