Skip to content

fix(compliance): measurement_terms_rejected — shared idempotency alias + Q3 2026 dates#4220

Draft
bokelley wants to merge 2 commits intomainfrom
claude/issue-4219-idempotency-key-fix
Draft

fix(compliance): measurement_terms_rejected — shared idempotency alias + Q3 2026 dates#4220
bokelley wants to merge 2 commits intomainfrom
claude/issue-4219-idempotency-key-fix

Conversation

@bokelley
Copy link
Copy Markdown
Contributor

@bokelley bokelley commented May 8, 2026

Refs #4219

Summary

measurement_terms_rejected.yaml had hardcoded idempotency_key literals (measurement-terms-probe-aggressive-v1 / measurement-terms-probe-relaxed-v1) combined with a now-stale May 2026 flight window. A spec-compliant runner substitutes fresh dates when start_time is past — so each re-run sent the same key with a different body, tripping the seller's mandatory IDEMPOTENCY_CONFLICT check.

Changes:

  • Both create_media_buy steps now use $generate:uuid_v4#media_buy_seller_measurement_terms_rejected_reject_terms_create_media_buy_aggressive_terms (the established alias pattern). Both steps intentionally share the same alias so the runner resolves them to the same UUID within a run — correctly testing that TERMS_REJECTED does not cache the idempotency key (spec rule 3: only successful responses cache).
  • Flight dates advanced to Q3 2026 (2026-07-012026-09-30).
  • measurement_window: "c30""c28" (clearly non-standard probe value; c30 is not a Nielsen/IAB standard window and could be confused with downloads_30d).
  • reviewer_checks entry added to create_media_buy_relaxed_terms surfacing the TERMS_REJECTED non-caching dependency (mirrors pattern from idempotency.yaml key_reuse_conflict step).
  • Brief text updated from "Q2" to "Q3" for internal consistency.

Non-breaking justification

Storyboard fixture change only — no JSON schema, task definition, or API reference is modified. Conformance harness changes are always non-breaking per playbook (existing consumers unaffected).

Pre-PR review

  • code-reviewer: approved — all blockers cleared after fixup commit; alias naming and reviewer_check correct.
  • ad-tech-protocol-expert: two unresolved style-level questions (see below).

⚠️ Needs reviewer decision on two style points

Two expert instances disagreed on style; I've hit the review-iteration cap and am flagging rather than resolving:

Q1 — Shared-alias naming when two steps share the same UUID:

  • Code-reviewer says: encoding the first step's phase/step coordinates (reject_terms_create_media_buy_aggressive_terms) for the shared alias is correct and consistent with the codebase grep pattern.
  • Protocol expert says: the accept_terms step carrying an alias that names the reject_terms step could cause log misattribution; use a neutral name (e.g. media_buy_seller_measurement_terms_rejected_probe) instead, or the relaxed step's own coordinates (accept_terms_create_media_buy_relaxed_terms).
  • Decision needed: keep the first-step-coordinate encoding, switch to a neutral probe name, or use each step's own coordinates (distinct aliases, which changes the test semantics).

Q2 — measurement_window: "c28" probe value:

  • First expert consultation recommended c28 or vendor_custom_window as a clearly non-standard replacement for c30.
  • Pre-PR protocol expert says c28 is not grounded in the narrative context and the change "breaks the rejection rationale."
  • Decision needed: keep c28, revert to c30, or use a clearly annotated non-standard label like vendor_custom_window.

Triage-managed PR. This bot does not currently iterate on review comments or PR conversation threads (only on the source issue). To unblock:

  • Push fixup commits directly: gh pr checkout <num> → fix → push.
  • Or re-trigger: comment /triage execute on the source issue.

See #3121 for context.

Session: https://claude.ai/code/session_018doLSLKHN2Aer5yHSCpeW3


Generated by Claude Code

bokelley added 2 commits May 8, 2026 07:34
…s + Q3 2026 dates

Hardcoded idempotency_key literals combined with runner-substituted
dates (stale May 2026 window) caused IDEMPOTENCY_CONFLICT on every
re-run. Both create_media_buy steps now share a single
$generate:uuid_v4# alias so the scenario correctly tests that
TERMS_REJECTED responses do not cache the idempotency key. Flight
dates advanced to Q3 2026 to prevent stale-date runner substitution.

Refs #4219
- Both steps share $generate:uuid_v4#media_buy_seller_measurement_terms_rejected_reject_terms_create_media_buy_aggressive_terms
  following the established {scenario}_{phase}_{step} convention (same alias on
  both = same UUID within a run, testing TERMS_REJECTED non-caching per spec)
- Add reviewer_check on accept_terms step surfacing the errored-request-releases-key
  dependency (mirrors pattern from idempotency.yaml key_reuse_conflict)
- measurement_window: c30 → c28 (clearly non-standard probe value; c30 is not a
  Nielsen or IAB standard window and could be confused with downloads_30d)
@bokelley bokelley added the claude-triaged Issue has been triaged by the Claude Code triage routine. Remove to re-triage. label May 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

claude-triaged Issue has been triaged by the Claude Code triage routine. Remove to re-triage.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant