Skip to content

feat(canonical-formats): 3.1 GA follow-ups — Taboola fixture, Pinterest example, IAB Native vocab, slot-enum fix#4770

Merged
bokelley merged 2 commits into
mainfrom
bokelley/canonical-formats-3.1-followups
May 19, 2026
Merged

feat(canonical-formats): 3.1 GA follow-ups — Taboola fixture, Pinterest example, IAB Native vocab, slot-enum fix#4770
bokelley merged 2 commits into
mainfrom
bokelley/canonical-formats-3.1-followups

Conversation

@bokelley
Copy link
Copy Markdown
Contributor

Closes three of the GA-blocking follow-ups identified in PR #3307 expert review, plus a latent slot-enum bug surfaced by the new fixture.

What landed

Slot asset_type enum gap fixed in _base.json. The canonical-formats slot enum was missing pixel_tracker, vast_tracker, and daast_tracker. Any product carrying explicit tracker slots (including the native_in_feed default slot set, which lists impression/viewability/click pixel_tracker entries) would fail validation. Added all three to the enum and to the size-mutex "no size semantics" branch. Discovered by the new Taboola fixture; would have hit any 3.1 adopter shipping explicit tracker slots.

native_in_feed reference Product fixture at static/examples/products/canonical/taboola_content_recommendation.json. Realistic Taboola US Content Recommendation product exercising all 12 default slots — title, body_text, main_image (1200×627 / 1080×1080), cta with closed enum, advertiser_name, sponsored_label, landing_page_url, display_url, rating, plus impression / viewability / click pixel_tracker. CPC pricing, hourly+daily reporting, v1_format_ref points at the AAO catalog's native_content. Canonical fixture suite goes from 14 to 15.

Pinterest disambiguation worked example in docs/creative/canonical-formats.mdx. Closes the routing ambiguity Pia + Nastassia flagged at GA review:

Pinterest product Canonical Why
Promoted Pin native_in_feed Asset-bundle composition; no catalog feed
Pinterest Collection sponsored_placement Catalog-keyed; fanout_mode: multi_item_in_creative
Idea Pin image_carousel Multi-card swipe
Shopping Pin sponsored_placement Catalog-keyed; fanout_mode: single_item

Same cleave (asset-bundle vs catalog-row) applies to Snap, TikTok, etc.

Five IAB OpenRTB Native 1.2 Data Asset vocab additions in asset-group-vocabulary.json:

  • likes — Data Asset type 4 (social-proof engagement)
  • downloads — type 5 (app-install)
  • saleprice — type 7 (e-commerce discount; pairs with price)
  • address — type 9 (local-business native)
  • secondary_body_text aliased to desc2 — type 10 (long-form content-recommendation)

phone_number annotated with its IAB type 8 mapping. Promoting these from slots_override extensions to canonical vocab tightens validation for app-install and e-commerce native.

Migration doc updated: fixture count 12 → 13.

Validation

  • npm run build:schemas — clean
  • npm run test:canonical-fixtures — 15/15 pass (was 14 + new Taboola)
  • npm run test:canonical-negative — 38/38 pass
  • npm run test:canonical-conventions — 50-entry catalog lint clean

Remaining 3.1 GA follow-ups (tracked separately)

  • SDK codegen (TypeScript + Python) — multi-week build, the gating dependency for adopter consumption.
  • native_in_feed conformance storyboard — multi-phase YAML to extend static/compliance/source/protocols/creative/index.yaml with native sync_creatives + preview coverage.
  • Round-1 adopter cohort heads-up — Slack-back to Pia, Nastassia, and the ~3 others confirming nobody has a catalog-less sponsored_placement mid-pilot before GA.

🤖 Generated with Claude Code

…worked example, IAB Native vocab, slot-enum fix

Closes three GA-blocking items from PR #3307 expert review, plus a latent
slot-enum bug surfaced by the new fixture:

- Latent slot asset_type enum gap: _base.json was missing pixel_tracker /
  vast_tracker / daast_tracker. Any product with explicit tracker slots
  (including native_in_feed's default slot set) failed validation. Added all
  three to the enum and to the size-mutex no-size-semantics branch.

- Taboola Content Recommendation reference fixture exercising all 12
  native_in_feed default slots including pixel_tracker triple. Brings the
  canonical fixture suite to 15 fixtures across the 12 canonicals.

- Pinterest disambiguation worked example in canonical-formats.mdx covering
  Promoted Pin (native_in_feed), Collection (sponsored_placement),
  Idea Pin (image_carousel), Shopping Pin (sponsored_placement single_item).
  Closes the routing ambiguity Pia / Nastassia flagged.

- Five IAB OpenRTB Native 1.2 Data Asset vocab additions: likes (type 4),
  downloads (type 5), saleprice (type 7), address (type 9),
  secondary_body_text aliased to desc2 (type 10). phone_number annotated
  with its IAB type 8 mapping.

Migration doc updated: fixture count 12 → 13.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bokelley bokelley assigned bokelley and unassigned nastassiafulconis and pkras May 19, 2026
@bokelley bokelley added this to the 3.1.0 milestone May 19, 2026
Product expert + code reviewer converged on a real gap: the native_in_feed
canonical's default slots referenced asset_group_ids (title, main_image,
icon, advertiser_name, sponsored_label) that weren't in
asset-group-vocabulary.json. The flagship Taboola reference fixture
inherited those IDs and validated only via the soft-warning policy — wrong
precedent for adopters copying the pattern.

- Added five core IAB OpenRTB Native 1.2 vocab entries: title (Title Asset
  type 1), main_image (Image Asset type 3 main), icon (Image Asset type 1),
  advertiser_name (sponsoredBy field), sponsored_label (renderer disclosure
  string). Each carries IAB type annotation and adopter-friendly aliases
  (e.g., title aliases headline; main_image aliases image_main / hero_image).

- price ↔ saleprice cross-reference added to the price description so buyer
  agents reading `price` alone discover the discount-rendering pattern.

- Pinterest Idea Pin row updated to call out video-per-page (carousel
  canonical's polymorphic image/video per-card slot handles it).

- Changeset bumped patch → minor (additive canonical vocab is minor, not
  patch).

- Migration doc fixture count fixed: 14 reference Product fixtures (was
  miscounted 13).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bokelley bokelley merged commit ee1a0b3 into main May 19, 2026
18 checks passed
@bokelley bokelley deleted the bokelley/canonical-formats-3.1-followups branch May 19, 2026 12:39
bokelley added a commit that referenced this pull request May 20, 2026
Adds static/compliance/source/protocols/creative/scenarios/native_in_feed.yaml
covering the full native_in_feed canonical end-to-end: format discovery via
list_creative_formats (asset_types filter), happy-path sync_creatives with all
12 slots + three pixel_tracker entries, four isolated validation-rejection steps
(title_max_chars, main_image_sizes, cta_values closed-set → CREATIVE_VALUE_NOT_ALLOWED,
pixel_tracker custom without custom_event_name), and preview_creative.

Closes #4774. Parent work: #4770 (Taboola fixture + slot-enum fixes), #3307 (native_in_feed GA).

https://claude.ai/code/session_01SHXC5MNy7UQCsnvJoUFeXp

Co-authored-by: Claude <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.

3 participants