Skip to content

feat(governance): add seller policy and change-right contracts - #6794

Merged
bokelley merged 34 commits into
mainfrom
seller-governance-policies
Aug 28, 2026
Merged

feat(governance): add seller policy and change-right contracts#6794
bokelley merged 34 commits into
mainfrom
seller-governance-policies

Conversation

@bokelley

@bokelley bokelley commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add structured seller acceptance-policy discovery backed by immutable, digest-pinned registry profiles and platform political-advertising policies
  • bind buyer change rights to accepted proposal terms, with fail-closed constraint enforcement and an explicit AdCP 3.1 projection
  • retain bounded seller disposition evidence in governance audit logs without granting sellers authority over buyer governance
  • advertise and enforce seller governance-agent acceptance with safe opaque rejection

Security and compatibility

  • accepted proposal terms are the authorization ceiling; product declarations may only narrow them
  • policy and profile versions are immutable; canonical digests and guarded migrations prevent same-version mutation
  • rejected governance-agent endpoints and credentials are never echoed, contacted, or persisted
  • audit error evidence is JSON-only and bounded by bytes, depth, and container size
  • wire versions use release precision (3.1); the released 3.1.19 artifact remains the compatibility validator

Validation

  • repository build, schema/compliance generation, and package build
  • 908 focused runtime and unit assertions
  • seller-governance contract suite
  • schema, JSON Schema, migration, registry-completeness, OpenAPI, and one-of audits
  • TypeScript typecheck and compliance storyboard linting
  • code, protocol, and security expert reviews

SDK follow-ups

Closes #6749
Closes #6750
Closes #6757
Closes #6758

Closes #6823

@lukasz-pubx

Copy link
Copy Markdown

Reviewed at da00e20 as author of #6757/#6758: both are implemented faithfully to their amended, triage-resolved states — vocabulary mapping, optional origin, bounded buyer-attributed audit copy, adcp.governance_enforcement placement, any_of matchers, GOVERNANCE_UNAVAILABLE for unresolvable verification, hygiene and non-discrimination MUSTs — and several hardenings go beyond what the RFCs asked (origin-only safe reflection, binding-pinned verification evidence, seller_policy_ref kept out of the registry entity space).

Two small items:

  1. Per rfc-process.mdx, the decision records for RFC: structured seller acceptance-policy discovery backed by the policy registry #6749 / RFC: bind buyer change rights into accepted proposal terms #6750 / RFC: typed seller dispositions in the campaign-governance audit record #6757 / RFC: seller acceptance criteria for campaign governance-agent bindings #6758 should be posted (the drafted memos look ready to ratify) before merge, and the final PR should carry Closes rather than Refs.
  2. A one-liner in sync_governance.mdx noting that disclosed rejections reflect origins while matchers may carry paths — so buyers should compare full matcher entries, not origins — would prevent a minor false-match misread.

Supportive of landing this.

…matchers may carry paths

Buyers reconciling a disclosed rejection against their any_of[] matcher
list should compare full matcher entries, not origins — an agent_url
matcher may include a path and therefore be narrower than the disclosed
origin, causing a false match on origin-only comparison.

Suggested by @lukasz-pubx in review of #6794.
@bokelley

Copy link
Copy Markdown
Contributor Author

Thanks for the thorough review, @lukasz-pubx.

Item 2 — sync_governance.mdx clarifier: applied in bf70312. Added the following sentence after the attempted_agent_origin stripping note:

Buyers reconciling a disclosed rejection against their any_of[] matcher list should compare full matcher entries, not origins — an agent_url matcher may include a path and therefore be narrower than the disclosed origin.

Item 1 — decision records + Closes: both are author actions for @bokelley before merge. The decision memos for #6749 / #6750 / #6757 / #6758 need to be ratified and committed to governance/decisions/ per rfc-process.mdx (ratification is a human act on the WG memo). RefsCloses is likewise a call the author makes once they confirm each issue is fully resolved by this PR's scope.


Generated by Claude Code

@bokelley
bokelley marked this pull request as ready for review August 24, 2026 03:48
Comment thread static/schemas/source/governance/report-plan-outcome-request.json

@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 paths touched without required approval.

This PR modifies protocol source under static/schemas/source/** (and .agents/**), which are under a hard, deterministic approval gate (gated_paths: true). The current review_decision is REVIEW_REQUIRED, not APPROVED, so the gate is NOT satisfied and the PR cannot be auto-approved (decision table row 2).

The reviewer findings are clean: the change relaxes error.code from required to optional on the newly-added, unreleased reported-outcome-error.json schema — a non-breaking loosening on an unreleased surface — and it is propagated coherently across schema, docs (report_plan_outcome.mdx), the governance handler, and both server and .cjs tests, with a minor changeset covering the additive surface. No critical/high/medium findings were reported.

Escalation reasons:

  • Touches gated protocol-source files (e.g. static/schemas/source/governance/reported-outcome-error.json, static/schemas/source/enums/error-code.json, and many others under static/schemas/source/**, plus .agents/sdk-shim-ledger.json) that require human/CODEOWNERS approval; review_decision is REVIEW_REQUIRED.

Once a human/CODEOWNERS approval sets review_decision to APPROVED, this PR falls through to a normal clean approve on the current findings.

Why human review

  • Gated paths touched (static/schemas/source/** and .agents/**) — hard approval gate not satisfied: review_decision is REVIEW_REQUIRED, not APPROVED. Human/CODEOWNERS review required.
  • This PR touches a path under a hard, non-overridable approval gate (.agents/sdk-shim-ledger.json (modified) matches .agents/**; static/schemas/source/account/sync-governance-response.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-media-buy-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-product-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-product.json (modified) matches static/schemas/source/**; static/schemas/source/core/media-buy-available-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/product-allowed-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/product.json (modified) matches static/schemas/source/**; static/schemas/source/core/sla-window.json (modified) matches static/schemas/source/**; static/schemas/source/core/x-entity-types.json (modified) matches static/schemas/source/**; static/schemas/source/enums/canonical-media-buy-action-mode.json (modified) matches static/schemas/source/**; static/schemas/source/enums/error-code.json (modified) matches static/schemas/source/**; static/schemas/source/enums/media-buy-action-mode.json (modified) matches static/schemas/source/**; static/schemas/source/error-details/governance-agent-not-accepted.json (added) matches static/schemas/source/**; static/schemas/source/error-details/policy-violation.json (modified) matches static/schemas/source/**; static/schemas/source/governance/accepted-governance-agents.json (added) matches static/schemas/source/**; static/schemas/source/governance/get-plan-audit-logs-response.json (modified) matches static/schemas/source/**; static/schemas/source/governance/policy-category-definition.json (modified) matches static/schemas/source/**; static/schemas/source/governance/policy-entry.json (modified) matches static/schemas/source/**; static/schemas/source/governance/report-plan-outcome-request.json (modified) matches static/schemas/source/**; static/schemas/source/governance/reported-outcome-error.json (added) matches static/schemas/source/**; static/schemas/source/index.json (modified) matches static/schemas/source/**; static/schemas/source/media-buy/acceptance-context.json (added) matches static/schemas/source/**; static/schemas/source/media-

…(truncated)…

@bokelley

Copy link
Copy Markdown
Contributor Author

Issue #6823 proposes a new docs/governance/sell-side-governance.mdx section covering spend-approval framing and asymmetric authority (the split-authority model, typed seller dispositions in audit trails, HITL as an implementation detail). Same governance surface as this PR — consider folding the doc section in before merge or confirm as a follow-up.


Generated by Claude Code

@bokelley

Copy link
Copy Markdown
Contributor Author

WG ratification is now recorded for all four RFCs:

The decision records are committed in 6060673, formal decision comments are posted on each RFC, the needs-wg-review labels are removed, and the final PR references now use Closes as requested. The sync_governance matcher/origin clarification remains in place from bf70312.

@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 paths touched without required review approval.

This PR modifies files under hard approval gates (static/schemas/source/** and .agents/**) — the protocol wire-shape source of truth. gated_paths is true and review_decision is REVIEW_REQUIRED (not APPROVED), so decision-table row 2 forces escalation regardless of how clean the diff is.

The reviewer found no critical/high/medium findings this pass. The delta since the prior escalate adds only four well-formed governance decision records (DR-0015–DR-0018), whose factual claims check out against the schema/docs/SDK changes. This is a net-clean iteration, but the hard gate cannot be auto-satisfied by Ladon.

Additionally, this PR introduces new protocol schema fields, new error codes (GOVERNANCE_AGENT_NOT_ACCEPTED, GOVERNANCE_UNAVAILABLE), new media-buy acceptance-policy schemas, and new enum values — breaking/normative-class protocol surface changes whose ratification is an explicit human act per the constitution's breaking-class hard gate. Human/CODEOWNERS review is required before merge.

Escalation reasons

  • Gated paths touched (static/schemas/source/**, .agents/sdk-shim-ledger.json) — hard approval gate not satisfied: review_decision is REVIEW_REQUIRED, not APPROVED.
  • Protocol wire-shape changes (new schemas, fields, error codes, enum values) require human ratification per the breaking-class governance gate.

Why human review

  • Gated paths touched (static/schemas/source/** and .agents/sdk-shim-ledger.json) — hard approval gate not satisfied: review_decision is REVIEW_REQUIRED, not APPROVED. Human/CODEOWNERS approval required.
  • Protocol wire-shape surface changed (new acceptance-policy schemas, new error codes, new enum values, new required/optional fields) — breaking-class ratification is a human act per constitution; never auto-approved absent APPROVED review.
  • This PR touches a path under a hard, non-overridable approval gate (.agents/sdk-shim-ledger.json (modified) matches .agents/**; static/schemas/source/account/sync-governance-response.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-media-buy-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-product-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-product.json (modified) matches static/schemas/source/**; static/schemas/source/core/media-buy-available-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/product-allowed-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/product.json (modified) matches static/schemas/source/**; static/schemas/source/core/sla-window.json (modified) matches static/schemas/source/**; static/schemas/source/core/x-entity-types.json (modified) matches static/schemas/source/**; static/schemas/source/enums/canonical-media-buy-action-mode.json (modified) matches static/schemas/source/**; static/schemas/source/enums/error-code.json (modified) matches static/schemas/source/**; static/schemas/source/enums/media-buy-action-mode.json (modified) matches static/schemas/source/**; static/schemas/source/error-details/governance-agent-not-accepted.json (added) matches static/schemas/source/**; static/schemas/source/error-details/policy-violation.json (modified) matches static/schemas/source/**; static/schemas/source/governance/accepted-governance-agents.json (added) matches static/schemas/source/**; static/schemas/source/governance/get-plan-audit-logs-response.json (modified) matches static/schemas/source/**; static/schemas/source/governance/policy-category-definition.json (modified) matches static/schemas/source/**; static/schemas/source/governance/policy-entry.json (modified) matches static/schemas/source/**; static/schemas/source/governance/report-plan-outcome-request

…(truncated)…

@bokelley

Copy link
Copy Markdown
Contributor Author

Addressed the #6823 documentation note in 27ff9e1. The new sell-side governance boundaries page makes the spend-approval asymmetry explicit and separates buyer authority, seller acceptance, negotiated change rights, and seller-internal review. It also documents the seller-disposition/audit and governance-agent dependency boundaries introduced by this PR. The PR now carries Closes #6823.

…icies

# Conflicts:
#	docs.json
#	server/src/training-agent/task-handlers.ts
#	server/src/training-agent/tenants/router.ts
#	server/src/training-agent/tenants/tenant-smoke.test.ts
#	tests/docs-nav-validation.test.cjs
@bokelley

Copy link
Copy Markdown
Contributor Author

Final merge/CI follow-up at 76f5901:

  • Merged the latest origin/main (through 38c1719) with no conflicts.
  • Fixed the controller storyboard request to include the required sandbox assertion.
  • Aligned the GitHub /sales exact-count ratchet with the now-executable governance-agent binding scenario (5P / 0S).
  • All implementation checks are green: 57 passed, including build/static, typecheck, CodeQL, migrations/Postgres, Docker, docs smoke, canonical and server shards, and all current + 3.0 storyboard surfaces. Current /sales is 130/130 clean with 572 passing steps.
  • The code, protocol, and security expert reviews are merge-ready, and there are zero unresolved review threads.

The only remaining failed check is external reviewer infrastructure: Ladon completed with no buffered inline comments, then failed because it did not create its findings JSON. This reproduced on two reruns and has no repository finding to address. GitHub also still reports REVIEW_REQUIRED, so a human/CODEOWNERS approval is needed to record the WG approval and clear the hard gate.

@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 — hard approval gate not satisfied and Breaking-class governance change requires human ratification.

No blocking findings — the reviewer's subsequent-pass review of the delta since f58408d surfaced no critical/high/medium findings. The protocol-surface changes were verified as coherent: the new condition_unresolved reason value aligns across action-not-allowed-reason.json, error-code.json, control-media-buy-request.json, and the corresponding docs/compliance scenario (no schema↔docs drift); the minor changeset is correct for additive enum/fields retaining 3.1 compatibility; policies-db.ts async conversions and fail-closed resolvePolicy are correct; the acceptance_profile requirements oneOf is discriminated by a kind const. This is a clean diff.

Why escalate, not approve:

  • Gated paths (row 2): gated_paths: true (touches static/schemas/source/**, .agents/**, .github/workflows/**) and review_decision: REVIEW_REQUIRED — NOT APPROVED. The hard, non-overridable approval gate is not satisfied. Ladon cannot auto-approve until a human/CODEOWNERS approval is recorded.
  • Breaking-class governance surface: New acceptance-policy schemas, new GOVERNANCE_AGENT_NOT_ACCEPTED error code, new enum values, new discriminated oneOf arms, and new decision records DR-0015..0018. Per the constitution's Breaking-class hard gate, ratification is a human act and is never auto-approved absent an APPROVED review.
  • Prior decision was also escalate for the same gate reasons; the gate condition persists unchanged.

Escalation reasons:

  • Gated files under static/schemas/source/**, .agents/sdk-shim-ledger.json, and .github/workflows/training-agent-storyboards.yml require human/CODEOWNERS approval; review_decision is REVIEW_REQUIRED.
  • Breaking-class / Normative governance protocol change (new schemas, error code, enum values, DR-0015..0018) — ratification is a human act.

Why human review

  • Gated paths touched (static/schemas/source/**, .agents/sdk-shim-ledger.json, .github/workflows/training-agent-storyboards.yml) — hard approval gate not satisfied: review_decision is REVIEW_REQUIRED, not APPROVED. Human/CODEOWNERS approval required.
  • Breaking-class governance protocol surface change (new acceptance-policy schemas, new GOVERNANCE_AGENT_NOT_ACCEPTED error code, new enum values, new discriminated oneOf arms, DR-0015..0018) — ratification is a human act per the constitution; never auto-approved absent an APPROVED review.
  • This PR touches a path under a hard, non-overridable approval gate (.agents/sdk-shim-ledger.json (modified) matches .agents/**; .github/workflows/training-agent-storyboards.yml (modified) matches .github/workflows/**; static/schemas/source/account/sync-governance-response.json (modified) matches static/schemas/source/**; static/schemas/source/core/acceptance-policy-profile-ids.json (added) matches static/schemas/source/**; static/schemas/source/core/canonical-media-buy-action-fields.json (added) matches static/schemas/source/**; static/schemas/source/core/canonical-media-buy-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-product-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-product.json (modified) matches static/schemas/source/**; static/schemas/source/core/media-buy-available-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/media-buy-change-term-id.json (added) matches static/schemas/source/**; static/schemas/source/core/media-buy-legacy-terms-ref.json (added) matches static/schemas/source/**; static/schemas/source/core/product-allowed-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/product.json (modified) matches static/schemas/source/**; static/schemas/source/core/sla-window.json (modified) matches `static/schemas/so

…(truncated)…

…icies

# Conflicts:
#	.github/workflows/training-agent-storyboards.yml
#	scripts/run-storyboards-matrix.sh
#	server/src/training-agent/account-handlers.ts
#	server/src/training-agent/task-handlers.ts
#	server/src/training-agent/tenants/tenant-smoke.test.ts
#	tests/mcp-schema-analysis.test.cjs
#	tests/run-storyboards-sharding.test.cjs
@aao-secretariat

Copy link
Copy Markdown
Contributor

Ladon cannot review this PR until merge conflicts are resolved.

…icies

# Conflicts:
#	server/src/training-agent/tenants/registry.ts
#	server/src/training-agent/v6-sales-platform.ts
#	server/tests/manual/run-storyboards.ts
@bokelley
bokelley enabled auto-merge (squash) August 28, 2026 07:07
Comment thread server/src/training-agent/v6-sales-platform.ts Fixed

@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 — hard approval gate not satisfied, plus breaking-class governance protocol surface change.

This PR touches gated paths under a hard, non-overridable approval gate and the current GitHub review decision is REVIEW_REQUIRED, not APPROVED. Per decision-table row 2, the outcome must be escalate until human/CODEOWNERS approval is recorded.

Escalation reasons

  • Gated paths touched (static/schemas/source/**, .agents/sdk-shim-ledger.json, .github/workflows/training-agent-storyboards.yml) — hard approval gate; review_decision is REVIEW_REQUIRED, not APPROVED. Human/CODEOWNERS approval required.
  • Breaking-class governance protocol surface change (new acceptance-policy schemas, new GOVERNANCE_AGENT_NOT_ACCEPTED error code, new enum values, new discriminated oneOf arms, DR-0015..0018). Ratification is a human act per the constitution and is never auto-approved absent an APPROVED review.

The reviewer reported a clean delta pass with no Critical/High/Medium findings, so the escalation rests entirely on the unsatisfied gate, not on code defects. The gate lifts automatically once an APPROVED review is recorded.

Why human review

  • Gated paths touched (static/schemas/source/**, .agents/sdk-shim-ledger.json, .github/workflows/training-agent-storyboards.yml) — hard approval gate not satisfied: review_decision is REVIEW_REQUIRED, not APPROVED. Human/CODEOWNERS approval required.
  • Breaking-class governance protocol surface change (new acceptance-policy schemas, new GOVERNANCE_AGENT_NOT_ACCEPTED error code, new enum values, new discriminated oneOf arms, DR-0015..0018) — ratification is a human act per the constitution; never auto-approved absent an APPROVED review.
  • This PR touches a path under a hard, non-overridable approval gate (.agents/sdk-shim-ledger.json (modified) matches .agents/**; .github/workflows/training-agent-storyboards.yml (modified) matches .github/workflows/**; static/schemas/source/account/sync-governance-response.json (modified) matches static/schemas/source/**; static/schemas/source/core/acceptance-policy-profile-ids.json (added) matches static/schemas/source/**; static/schemas/source/core/canonical-media-buy-action-fields.json (added) matches static/schemas/source/**; static/schemas/source/core/canonical-media-buy-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-product-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-product.json (modified) matches static/schemas/source/**; static/schemas/source/core/media-buy-available-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/media-buy-change-term-id.json (added) matches static/schemas/source/**; static/schemas/source/core/media-buy-legacy-terms-ref.json (added) matches static/schemas/source/**; static/schemas/source/core/product-allowed-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/product.json (modified) matches static/schemas/source/**; static/schemas/source/core/sla-window.json (modified) matches static/schemas/source/**; static/schemas/source/core/x-entity-types.json (modified) matches static/schemas/source/**; static/schemas/source/enums/action-not-allowed-reason.json (modified) matches static/schemas/source/**; static/schemas/source/enums/canonical-media-buy-action-mode.json (modified) matches static/schemas/source/**; static/schemas/source/enums/error-code.json (modified) matches static/schemas/source/**; static/schemas/source/enums/media-buy-action-mode.json (modified) matches static/schemas/source/**; static/schemas/source/error-details/governance-agent-not-accepted.json (added) matches static/schemas/source/**; static/schemas/source/error-details/policy-violation.json (modified) matches static/schemas/source/**; static/schemas/source/governance/accepted-governance

…(truncated)…

@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 — hard approval gate not satisfied on a breaking-class governance protocol change.

This PR touches gated paths (static/schemas/source/**, .agents/sdk-shim-ledger.json, .github/workflows/training-agent-storyboards.yml) which are under a hard, non-overridable approval gate. gated_paths: true and review_decision is REVIEW_REQUIRED (not APPROVED) — decision-table row 2 fires, forcing escalate.

The change is also a Breaking-class governance protocol surface change (new acceptance-policy schemas, new GOVERNANCE_AGENT_NOT_ACCEPTED error code, new enum values, new discriminated oneOf arms, and decision records DR-0015..0018). Per the constitution, ratification of a Breaking-class change is a human act and is never auto-approved absent an APPROVED review — this reinforces the same escalate outcome (prose hard gate).

The reviewer's delta pass is clean: no critical/high/medium findings this run (unused-import cleanup in v6-sales-platform.ts and a mechanical schema-graph count bump in mcp-schema-analysis.test.cjs, both consistent with the single added schema definition). The prior escalate carries no fresh blocking findings, so it does not stick on its own — but the deterministic gated-paths gate and the breaking-class governance gate independently require a human/CODEOWNERS approval before this can merge.

Escalation reasons

  • Gated paths touched (static/schemas/source/**, .agents/**, .github/workflows/**) — hard approval gate not satisfied: review_decision is REVIEW_REQUIRED, not APPROVED. Human/CODEOWNERS approval required.
  • Breaking-class governance protocol change (new schemas, new error code, new enums, new oneOf arms, DR-0015..0018) — ratification is a human act per the constitution; never auto-approved absent an APPROVED review.

Why human review

  • Gated paths touched (static/schemas/source/**, .agents/sdk-shim-ledger.json, .github/workflows/training-agent-storyboards.yml) — hard approval gate not satisfied: review_decision is REVIEW_REQUIRED, not APPROVED. Human/CODEOWNERS approval required.
  • Breaking-class governance protocol surface change (new acceptance-policy schemas, new GOVERNANCE_AGENT_NOT_ACCEPTED error code, new enum values, new discriminated oneOf arms, DR-0015..0018) — ratification is a human act per the constitution; never auto-approved absent an APPROVED review.
  • This PR touches a path under a hard, non-overridable approval gate (.agents/sdk-shim-ledger.json (modified) matches .agents/**; .github/workflows/training-agent-storyboards.yml (modified) matches .github/workflows/**; static/schemas/source/account/sync-governance-response.json (modified) matches static/schemas/source/**; static/schemas/source/core/acceptance-policy-profile-ids.json (added) matches static/schemas/source/**; static/schemas/source/core/canonical-media-buy-action-fields.json (added) matches static/schemas/source/**; static/schemas/source/core/canonical-media-buy-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-product-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-product.json (modified) matches static/schemas/source/**; static/schemas/source/core/media-buy-available-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/media-buy-change-term-id.json (added) matches static/schemas/source/**; static/schemas/source/core/media-buy-legacy-terms-ref.json (added) matches static/schemas/source/**; static/schemas/source/core/product-allowed-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/product.json (modified) matches static/schemas/source/**; static/schemas/source/core/sla-window.json (modified) matches static/schemas/source/**; static/schemas/source/core/x-entity-types.json (modified) matches static/schemas/source/**; static/schemas/source/enums/act

…(truncated)…

@bokelley

Copy link
Copy Markdown
Contributor Author

@patmmccann All CI checks are green on f3e7c3095b, including the full current/3.0 storyboard matrices, 7,254 server tests, security scans, migrations, and Ladon. All review threads are resolved and WG approval is recorded above. Squash auto-merge is armed; the remaining gate is the requested CODEOWNERS approval.

@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 — hard approval gate not satisfied.

This PR touches paths under a deterministic hard approval gate (gated_paths: true) while the GitHub review decision is REVIEW_REQUIRED, not APPROVED. Per decision table row 2, the outcome must be escalate until a human/CODEOWNERS approval is recorded.

Additionally, this is a breaking-class governance protocol surface change (new acceptance-policy schemas, new GOVERNANCE_AGENT_NOT_ACCEPTED error code, new enum values, new discriminated oneOf arms, DR-0015..0018). Per the repo's constitution, ratification of a Breaking-class change is a human act and is never auto-approved absent an APPROVED review — even with a clean diff and correct changeset.

The reviewer found no Critical/High/Medium findings this pass (net improvement; prior run also had none). The delta is clean and well-tested. But a clean diff does not lift the gate — only an APPROVED review does.

Escalation reasons

  • Gated paths touched (static/schemas/source/**, .agents/sdk-shim-ledger.json, .github/workflows/training-agent-storyboards.yml) — hard approval gate; review_decision is REVIEW_REQUIRED, not APPROVED. Human/CODEOWNERS approval required.
  • Breaking-class governance protocol surface change — ratification is a human act per the constitution; never auto-approved absent an APPROVED review.

Once a human/CODEOWNERS approval is recorded (review_decision: APPROVED), this PR — being finding-free — can fall through to approve.

Why human review

  • Gated paths touched (static/schemas/source/**, .agents/sdk-shim-ledger.json, .github/workflows/training-agent-storyboards.yml) — hard approval gate not satisfied: review_decision is REVIEW_REQUIRED, not APPROVED. Human/CODEOWNERS approval required.
  • Breaking-class governance protocol surface change (new acceptance-policy schemas, new GOVERNANCE_AGENT_NOT_ACCEPTED error code, new enum values, new discriminated oneOf arms, DR-0015..0018) — ratification is a human act per the constitution; never auto-approved absent an APPROVED review.
  • This PR touches a path under a hard, non-overridable approval gate (.agents/sdk-shim-ledger.json (modified) matches .agents/**; .github/workflows/training-agent-storyboards.yml (modified) matches .github/workflows/**; static/schemas/source/account/sync-governance-response.json (modified) matches static/schemas/source/**; static/schemas/source/core/acceptance-policy-profile-ids.json (added) matches static/schemas/source/**; static/schemas/source/core/canonical-media-buy-action-fields.json (added) matches static/schemas/source/**; static/schemas/source/core/canonical-media-buy-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-product-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-product.json (modified) matches static/schemas/source/**; static/schemas/source/core/media-buy-available-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/media-buy-change-term-id.json (added) matches static/schemas/source/**; static/schemas/source/core/media-buy-legacy-terms-ref.json (added) matches static/schemas/source/**; static/schemas/source/core/product-allowed-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/product.json (modified) matches static/schemas/source/**; static/schemas/source/core/sla-window.json (modified) matches static/schemas/source/**; static/schemas/source/core/x-entity-types.json (modified) matches static/schemas/source/**; static/schemas/source/enums/action-not-allowed-reason.json (modified) matches static/schemas/source/**; static/schemas/source/enums/canonical-media-buy-action-mode.json (modified) matches static/schemas/source/**; static/schemas/source/enums/error-code.json (modified) matches static/schemas/source/**; static/schemas/source/enums/media-buy-act

…(truncated)…

…icies

# Conflicts:
#	server/src/training-agent/account-handlers.ts
#	server/src/training-agent/comply-test-controller.ts
#	server/src/training-agent/tenants/router.ts
#	tests/mcp-schema-analysis.test.cjs
#	tests/mcp-schema-projection.test.cjs

@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 — hard approval gate not satisfied.

This PR touches gated paths (static/schemas/source/**, .agents/sdk-shim-ledger.json, .github/workflows/training-agent-storyboards.yml) which are under a hard, non-overridable approval gate. gated_paths is true and review_decision is REVIEW_REQUIRED (not APPROVED), so decision-table row 2 fires: outcome must be escalate.

Independently, this is a breaking-class governance protocol surface change (new acceptance-policy schemas, new GOVERNANCE_AGENT_NOT_ACCEPTED error code, new enum values, new discriminated oneOf arms, DR-0015..0018). Per the constitution and repo hard gate, ratification is a human act and is never auto-approved absent an APPROVED review.

The reviewer reported no Critical/High/Medium findings on this delta pass — additive AdCP 3.2 draft surfaces with correct minor changesets, verified schema↔docs coherence, discriminated oneOfs, dist immutability, and backward-compatible wire shapes. There are no blocking code findings. The escalation is driven entirely by the unsatisfied approval gate and the breaking-class/normative-ratification requirement, consistent with the prior escalate decision.

Escalation reasons

  • Gated paths touched under a hard approval gate; review_decision is REVIEW_REQUIRED, not APPROVED. Human/CODEOWNERS approval required to lift the gate.
  • Breaking-class / normative governance protocol surface change (new schemas, new error code, new enum values, new oneOf arms, DR-0015..0018) — ratification is a human act; never auto-approved without an APPROVED review.

Why human review

  • Gated paths touched (static/schemas/source/**, .agents/sdk-shim-ledger.json, .github/workflows/training-agent-storyboards.yml) — hard approval gate not satisfied: review_decision is REVIEW_REQUIRED, not APPROVED. Human/CODEOWNERS approval required.
  • Breaking-class governance protocol surface change (new acceptance-policy schemas, new GOVERNANCE_AGENT_NOT_ACCEPTED error code, new enum values, new discriminated oneOf arms, DR-0015..0018) — ratification is a human act per the constitution; never auto-approved absent an APPROVED review.
  • This PR touches a path under a hard, non-overridable approval gate (.agents/sdk-shim-ledger.json (modified) matches .agents/**; .github/workflows/training-agent-storyboards.yml (modified) matches .github/workflows/**; static/schemas/source/account/sync-governance-response.json (modified) matches static/schemas/source/**; static/schemas/source/core/acceptance-policy-profile-ids.json (added) matches static/schemas/source/**; static/schemas/source/core/canonical-media-buy-action-fields.json (added) matches static/schemas/source/**; static/schemas/source/core/canonical-media-buy-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-product-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/canonical-product.json (modified) matches static/schemas/source/**; static/schemas/source/core/media-buy-available-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/media-buy-change-term-id.json (added) matches static/schemas/source/**; static/schemas/source/core/media-buy-legacy-terms-ref.json (added) matches static/schemas/source/**; static/schemas/source/core/product-allowed-action.json (modified) matches static/schemas/source/**; static/schemas/source/core/product.json (modified) matches static/schemas/source/**; static/schemas/source/core/sla-window.json (modified) matches static/schemas/source/**; static/schemas/source/core/x-entity-types.json (modified) matches static/schemas/source/**; static/schemas/source/enums/action-not-allowed-reason.json (modified) matches static/schemas/source/**; static/schemas/source/enums/canonical-media-buy-action-mode.json (modified) matches static/schemas/source/**; static/schemas/source/

…(truncated)…

@bokelley
bokelley disabled auto-merge August 28, 2026 09:39
@bokelley
bokelley merged commit a1672f9 into main Aug 28, 2026
59 checks passed
@bokelley
bokelley deleted the seller-governance-policies branch August 28, 2026 09:39
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

3 participants