diff --git a/.changeset/drain-final-storyboard-drift.md b/.changeset/drain-final-storyboard-drift.md new file mode 100644 index 0000000000..863b04e43e --- /dev/null +++ b/.changeset/drain-final-storyboard-drift.md @@ -0,0 +1,16 @@ +--- +--- + +Drain the final 7 storyboard sample_request drift entries (adcp#2763). Allowlist goes to **zero** — ratchet is now fully strict. + +Closes out the cluster arc kicked off by #2768 (lint) and worked through #2781 (auth), #2788 (format_id/signal_ids), #2798 (bundled drift), #2795 (asset_type discriminator + governance docs), #2799 (refine[] naming), #2801 (url-asset uri-template). After this merges, any new sample_request drift fails CI immediately. + +Specific fixes: + +- **3× `check_governance` fixtures dropped `account` additionalProperty.** `governance-delivery-monitor#initial_approval/check_governance_approved`, `#drift_recheck/check_governance_drift`, `governance-spend-authority#governance_check_conditions/check_governance_conditions`. The #2776 docs landed earlier made account rejection explicit; fixtures now match. `drift_recheck` also dropped stray `media_buy_id` at root (not a top-level property of `check-governance-request`). +- **`report_plan_outcome` fixture** restructured `outcome: {type: "media_buy_created", media_buy_id, total_budget, packages}` (object) to the canonical `outcome: "completed"` (enum string) + `seller_response: {seller_reference, committed_budget, packages}`. +- **`si_get_offering`** added the required `offering_id`. +- **`si_initiate_session`** added the required `identity` block with `consent_granted: true` + `anonymous_session_id`. +- **`deterministic-testing#deterministic_session/initiate_session`** added `consent_granted: true` to identity. + +All 7 allowlist entries removed deterministically via shrink-only regeneration. diff --git a/static/compliance/source/protocols/governance/index.yaml b/static/compliance/source/protocols/governance/index.yaml index a35987290d..8839db4847 100644 --- a/static/compliance/source/protocols/governance/index.yaml +++ b/static/compliance/source/protocols/governance/index.yaml @@ -604,15 +604,15 @@ phases: sample_request: plan_id: "$context.plan_id" governance_context: "gov_ctx_acme_q2_approved" - outcome: - type: "media_buy_created" - media_buy_id: "$context.media_buy_id" - total_budget: 50000 + outcome: "completed" + seller_response: + seller_reference: "$context.media_buy_id" + committed_budget: 50000 packages: - - product_id: "sports_ctv_q2" - budget: 30000 - - product_id: "outdoor_video_q2" - budget: 20000 + - package_id: "pkg_sports_ctv_q2" + committed_budget: 30000 + - package_id: "pkg_outdoor_video_q2" + committed_budget: 20000 idempotency_key: "$generate:uuid_v4#media_buy_governance_escalation_report_outcome_report_plan_outcome" context: diff --git a/static/compliance/source/protocols/sponsored-intelligence/index.yaml b/static/compliance/source/protocols/sponsored-intelligence/index.yaml index 9874f31e65..9846ad7bcc 100644 --- a/static/compliance/source/protocols/sponsored-intelligence/index.yaml +++ b/static/compliance/source/protocols/sponsored-intelligence/index.yaml @@ -108,6 +108,7 @@ phases: - Format specifications for sponsored content sample_request: + offering_id: "novamotors_conversational_v1" context: correlation_id: "si_session--si_get_offering" @@ -155,6 +156,11 @@ phases: sample_request: intent: "User is researching electric vehicles for long road trips and wants to talk to Nova Motors" + identity: + consent_granted: true + consent_timestamp: "2026-04-22T14:00:00Z" + user: + locale: "en-US" idempotency_key: "$generate:uuid_v4#si_baseline_session_lifecycle_si_initiate_session" context: diff --git a/static/compliance/source/specialisms/governance-delivery-monitor/index.yaml b/static/compliance/source/specialisms/governance-delivery-monitor/index.yaml index 29195d4fd0..5240dd7a0c 100644 --- a/static/compliance/source/specialisms/governance-delivery-monitor/index.yaml +++ b/static/compliance/source/specialisms/governance-delivery-monitor/index.yaml @@ -201,10 +201,6 @@ phases: - monitoring: delivery phase governance is active sample_request: - account: - brand: - domain: "acmeoutdoor.example" - operator: "pinnacle-agency.example" plan_id: "$context.plan_id" caller: "https://pinnacle-agency.example" tool: "create_media_buy" @@ -318,15 +314,10 @@ phases: - conditions: if approved, conditions for rebalancing (e.g., "Reallocate $5K from CTV to video") sample_request: - account: - brand: - domain: "acmeoutdoor.example" - operator: "pinnacle-agency.example" plan_id: "$context.plan_id" caller: "https://pinnacle-agency.example" phase: "delivery" governance_context: "gov_ctx_acme_delivery_approved" - media_buy_id: "mb_acme_q2_2026" delivery_metrics: reporting_period: start: "2026-05-01T00:00:00Z" diff --git a/static/compliance/source/specialisms/governance-spend-authority/index.yaml b/static/compliance/source/specialisms/governance-spend-authority/index.yaml index 1d81940d92..b5e59c6190 100644 --- a/static/compliance/source/specialisms/governance-spend-authority/index.yaml +++ b/static/compliance/source/specialisms/governance-spend-authority/index.yaml @@ -228,10 +228,6 @@ phases: - findings: may include warning-severity findings noting the conditions sample_request: - account: - brand: - domain: "acmeoutdoor.example" - operator: "pinnacle-agency.example" plan_id: "$context.plan_id" caller: "https://pinnacle-agency.example" tool: "create_media_buy" diff --git a/static/compliance/source/universal/deterministic-testing.yaml b/static/compliance/source/universal/deterministic-testing.yaml index 38f567e25f..7d31fdd48e 100644 --- a/static/compliance/source/universal/deterministic-testing.yaml +++ b/static/compliance/source/universal/deterministic-testing.yaml @@ -923,6 +923,7 @@ phases: sample_request: intent: "comply test — initiate deterministic SI session" identity: + consent_granted: true user_type: 'consumer' supported_capabilities: response_formats: diff --git a/tests/storyboard-sample-request-schema-allowlist.json b/tests/storyboard-sample-request-schema-allowlist.json index fbea072aa3..0fb4bc44fe 100644 --- a/tests/storyboard-sample-request-schema-allowlist.json +++ b/tests/storyboard-sample-request-schema-allowlist.json @@ -1,49 +1,4 @@ { "$comment": "Known storyboard sample_request schema drift, grandfathered before the lint was turned on. Each entry fingerprints the violation; new drift in a listed step fails the lint, and fixed drift that leaves an entry stale also fails (so follow-up PRs must remove entries as they fix fixtures). Regenerate with `node scripts/lint-storyboard-sample-request-schema.cjs --write-allowlist` after a real fix — defaults to shrink-only. Pass `--allow-grow` only when adding a deliberate, newly-identified drift is the explicit intent; never hand-edit to silence a new violation.", - "entries": { - "protocols/governance/index.yaml#report_outcome/report_plan_outcome": { - "schema": "governance/report-plan-outcome-request.json", - "errors": [ - "type@/outcome:string", - "enum@/outcome" - ] - }, - "protocols/sponsored-intelligence/index.yaml#offering_discovery/si_get_offering": { - "schema": "sponsored-intelligence/si-get-offering-request.json", - "errors": [ - "required@/:offering_id" - ] - }, - "protocols/sponsored-intelligence/index.yaml#session_lifecycle/si_initiate_session": { - "schema": "sponsored-intelligence/si-initiate-session-request.json", - "errors": [ - "required@/:identity" - ] - }, - "specialisms/governance-delivery-monitor/index.yaml#drift_recheck/check_governance_drift": { - "schema": "governance/check-governance-request.json", - "errors": [ - "additionalProperties@/:account", - "additionalProperties@/:media_buy_id" - ] - }, - "specialisms/governance-delivery-monitor/index.yaml#initial_approval/check_governance_approved": { - "schema": "governance/check-governance-request.json", - "errors": [ - "additionalProperties@/:account" - ] - }, - "specialisms/governance-spend-authority/index.yaml#governance_check_conditions/check_governance_conditions": { - "schema": "governance/check-governance-request.json", - "errors": [ - "additionalProperties@/:account" - ] - }, - "universal/deterministic-testing.yaml#deterministic_session/initiate_session": { - "schema": "sponsored-intelligence/si-initiate-session-request.json", - "errors": [ - "required@/identity:consent_granted" - ] - } - } + "entries": {} }