feat(reporting): promote cadence optimization-eligibility gate to normative MUST - #6860
Conversation
…mative MUST Buy-side agents MUST treat declared available_reporting_frequencies as an optimization-eligibility gate and MUST NOT make mid-flight optimization decisions against metrics whose declared cadence is quarterly or post_campaign. Ratified with the radio and OOH WG packets. - MUST language on reporting-frequency.json and in optimization-reporting.mdx (against the real wire field name) - enforcement routed to buyer-artifact grading; deterministic cadence-gate check specified in specs/buyer-artifact-testing.md - anti-drift pin test (tests/reporting-cadence-gate.test.cjs) locks the normative language to both surfaces, wired into test:schemas Refs #6138, #6139, #6140 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated path requires human/CODEOWNERS review.
This PR modifies static/schemas/source/enums/reporting-frequency.json, which matches the deterministic hard approval gate glob static/schemas/source/** (gated_paths: true). The current review_decision is REVIEW_REQUIRED, not APPROVED, so decision-table row 2 fires and the outcome must be escalate.
The change itself is clean per the reviewer: it promotes the reporting-cadence optimization-eligibility rule from SHOULD to a buyer-side MUST across the enum description, the governing doc (optimization-reporting.mdx:278), and a new buyer-artifact grading hook, carried by a correct minor changeset and pinned by a wired anti-drift test. Schema/docs/changeset/test are mutually coherent, no enum values changed, and the field name matches the wire. No blocking or Medium findings were reported.
However, this normative change (SHOULD→MUST is a new normative requirement) touches the protocol source of truth under a hard approval gate, and it will not auto-approve until a human/CODEOWNERS review lands as APPROVED.
Escalation reasons:
- Modifies gated path
static/schemas/source/enums/reporting-frequency.json(matchesstatic/schemas/source/**) while review_decision is REVIEW_REQUIRED — human/CODEOWNERS approval required before merge.
Why human review
- Modifies gated path static/schemas/source/enums/reporting-frequency.json (matches static/schemas/source/**) while review_decision is REVIEW_REQUIRED — human/CODEOWNERS approval required before merge.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/enums/reporting-frequency.json (modified) matches
static/schemas/source/**) and the current GitHub review decision is 'REVIEW_REQUIRED', not APPROVED. This is a hard gate enforced in code — Ladon cannot auto-approve until a human/CODEOWNERS approval is recorded, regardless of how clean the diff is.
Summary
Promotes the reporting-cadence rule from guidance prose (shipped in #6240) to a normative MUST, per the recommendation carried in — and ratified with — both WG packets (radio #6139, static OOH #6140, umbrella #6138):
The four pieces
enums/reporting-frequency.jsonand inoptimization-reporting.mdx(stated against the real wire field,available_reporting_frequencies), with the rationale: data on those cadences describes a closed period, so optimizing on it means acting on a model of the channel that is false at decision time.specs/buyer-artifact-testing.md.tests/reporting-cadence-gate.test.ts, vitest-discovered bytest:unit— no packaging changes): locks the enum values, the MUST language on both surfaces, the enforcement-routing sentence, and rejects the field-name drift class that docs(radio): correct capability field name to available_reporting_frequencies #6856 just fixed.Governance
New MUST on buyer conduct → ballot-class. Both approved packets explicitly carried this promotion as a recommendation, so this PR treats the packet ballots as the ratification and cites them; if the WG prefers an explicit standalone vote, hold merge until then.
Refs #6138, #6139, #6140; follows #6240.
🤖 Generated with Claude Code