Skip to content

feat(reporting): promote cadence optimization-eligibility gate to normative MUST - #6860

Merged
bokelley merged 1 commit into
mainfrom
reporting-cadence-normative
Aug 25, 2026
Merged

feat(reporting): promote cadence optimization-eligibility gate to normative MUST#6860
bokelley merged 1 commit into
mainfrom
reporting-cadence-normative

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

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):

Buy-side agents MUST treat a product's declared available_reporting_frequencies as an optimization-eligibility gate: a buyer MUST NOT make mid-flight optimization decisions against metrics whose declared cadence is quarterly or post_campaign.

The four pieces

  1. Normative language on enums/reporting-frequency.json and in optimization-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.
  2. Enforcement routing: the obligation is the buyer's — sellers have nothing to attest beyond their existing optional declaration, so no seller-side conformance scenario is added. The deterministic cadence-gate check (artifact optimization-actions ⨝ product declared cadences; fail on quarterly/post_campaign, advisory on sub-weekly grain against weekly) is specified in specs/buyer-artifact-testing.md.
  3. Anti-drift pin test (tests/reporting-cadence-gate.test.ts, vitest-discovered by test: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.
  4. Changeset (minor).

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

…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>

@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: 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 (matches static/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.

@aao-secretariat aao-secretariat Bot added the ladon/needs-human-review Ladon has escalated this PR for human review. label Aug 25, 2026
@bokelley
bokelley merged commit 8c0c982 into main Aug 25, 2026
59 checks passed
@bokelley
bokelley deleted the reporting-cadence-normative branch August 25, 2026 09:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ladon/needs-human-review Ladon has escalated this PR for human review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant