feat(conformance): strengthen 3.2 reference agent coverage - #6883
feat(conformance): strengthen 3.2 reference agent coverage#6883bokelley wants to merge 12 commits into
Conversation
| import { | ||
| buildCatalog, | ||
| buildShowsForProducts, | ||
| buildProposals, | ||
| TRAINING_AUDIENCE_ACTIVATION_METHODS, | ||
| } from './product-factory.js'; |
| "$schema": "http://json-schema.org/draft-07/schema#", | ||
| "$id": "/schemas/core/assets/asset-union.json", | ||
| "title": "AssetVariant", | ||
| "x-adcp-hoist": true, |
There was a problem hiding this comment.
Medium: Duplicate x-adcp-hoist key. This object already declares "x-adcp-hoist": true two lines down (after description), so this added line makes it appear twice in the same JSON object. JSON.parse collapses to the last value (both true, so the build behaves), but a duplicate key in published schema source is unintended and trips strict JSON linters. Drop this line and keep the existing one.
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated paths touched without required review approval.
This PR strengthens the 3.2 reference sales agent, adds two capability-gated compliance scenarios, ratchets sales CI floors, and refreshes boundaries/limitations docs. Changeset is present (patch), and schema↔docs coherence was verified (pharmaceutical_advertising enforcement in sync-plans-request.json matches the four-category doc claim).
Why escalate (decision table row 2): gated_paths: true — the diff modifies .github/workflows/training-agent-storyboards.yml and static/schemas/source/core/assets/asset-union.json, both under hard, deterministic approval gates. review_decision is REVIEW_REQUIRED (not APPROVED), so the gate is NOT satisfied. Human/CODEOWNERS review is required before merge.
Medium findings (non-blocking):
- static/schemas/source/core/assets/asset-union.json:5 — Duplicate
x-adcp-hoistkey introduced. Worth cleaning up before merge, but not itself a blocker.
No critical/high findings surfaced; the single medium is not in a data-loss/schema/infra category that would independently escalate, but the gated-paths gate stands on its own.
Escalation reasons:
.github/workflows/training-agent-storyboards.yml(gated path,.github/workflows/**) modified — requires human/CODEOWNERS review.static/schemas/source/core/assets/asset-union.json(gated path,static/schemas/source/**) modified — requires human/CODEOWNERS review.
Medium findings
- static/schemas/source/core/assets/asset-union.json:5 — Duplicate x-adcp-hoist key in asset-union.json
Why human review
- Modifies
.github/workflows/training-agent-storyboards.yml— gated path (.github/workflows/**) with review_decision=REVIEW_REQUIRED; human/CODEOWNERS approval required. - Modifies
static/schemas/source/core/assets/asset-union.json— gated path (static/schemas/source/**) with review_decision=REVIEW_REQUIRED; human/CODEOWNERS approval required. - Medium: duplicate
x-adcp-hoistkey in asset-union.json:5 should be resolved before merge. - This PR touches a path under a hard, non-overridable approval gate (.github/workflows/training-agent-storyboards.yml (modified) matches
.github/workflows/**; static/schemas/source/core/assets/asset-union.json (modified) matchesstatic/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.
| domain: "acmeoutdoor.example" | ||
| account: | ||
| brand: | ||
| domain: "acmeoutdoor.example" |
There was a problem hiding this comment.
Medium: Broken indentation in the create_media_buy sample_request. domain sits at 12 spaces — the same level as brand: on the prior line — so account.brand resolves to null and domain/operator become direct keys of account. Every other account block in this file nests as account.brand.domain (14 spaces); this one alone diverges, sending a null-brand account on the wire. The domain-rename edit dropped two spaces here.
| domain: "acmeoutdoor.example" | |
| domain: "acmeoutdoor.example" |
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated path awaiting human/CODEOWNERS approval (review_decision ≠ APPROVED).
Gated paths (hard approval gate, row 2):
.github/workflows/training-agent-storyboards.yml(modified) — matches.github/workflows/**static/schemas/source/core/assets/asset-union.json(modified) — matchesstatic/schemas/source/**
gated_paths: true and review_decision is unknown/none (not APPROVED). This is a hard, deterministic gate — Ladon cannot auto-approve until a human/CODEOWNERS approval is recorded, regardless of how clean the diff is.
Medium findings (informational, not blocking on their own):
static/compliance/source/protocols/media-buy/scenarios/advanced_delivery_reporting.yaml:150— Broken YAML nesting: the domain rename dropped two spaces, collapsingaccount.brand.domaininto a nullaccount.brandplus a strayaccount.domainin the create_media_buy sample_request. Should be fixed before merge.
Iteration note: The prior asset-union.json duplicate x-adcp-hoist key finding is no longer present in this delta — acknowledged as addressed. The SDK bump (14.0.0-beta.8→beta.11) is propagated coherently across changesets, docs, package.json, and the certification module; wire pin stays 3.2-beta.6 with no schema/docs drift. This is a net improvement over the prior pass. The remaining escalation is purely the unsatisfied gated-path approval gate plus one new medium YAML defect worth a human eye.
Medium findings
- static/compliance/source/protocols/media-buy/scenarios/advanced_delivery_reporting.yaml:150 — Broken YAML nesting: account.brand null in create_media_buy sample_request
Why human review
- Modifies
.github/workflows/training-agent-storyboards.yml— gated path (.github/workflows/**) with review_decision not APPROVED; human/CODEOWNERS approval required. - Modifies
static/schemas/source/core/assets/asset-union.json— gated path (static/schemas/source/**) with review_decision not APPROVED; human/CODEOWNERS approval required. - New medium finding: broken YAML nesting in advanced_delivery_reporting.yaml:150 (null account.brand) — worth resolving before merge.
- This PR touches a path under a hard, non-overridable approval gate (.github/workflows/training-agent-storyboards.yml (modified) matches
.github/workflows/**; static/schemas/source/core/assets/asset-union.json (modified) matchesstatic/schemas/source/**) and the current GitHub review decision is 'unknown', 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.
# Conflicts: # package-lock.json # package.json # scripts/run-storyboards-matrix.sh # server/src/training-agent/task-handlers.ts
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated paths touched without an APPROVED review.
This PR modifies files under hard, deterministic approval gates and the current GitHub review decision is not APPROVED, so Ladon cannot auto-approve regardless of how clean the diff is (decision table row 2).
Escalation reasons
- Modifies
.github/workflows/training-agent-storyboards.yml— gated path (.github/workflows/**); requires human/CODEOWNERS approval. - Modifies
static/schemas/source/core/assets/asset-union.json— gated path (static/schemas/source/**); requires human/CODEOWNERS approval.
Medium findings (carried forward)
- static/compliance/source/protocols/media-buy/scenarios/advanced_delivery_reporting.yaml:150 — Broken YAML nesting:
account.brandnull in create_media_buy sample_request. Not in this delta (a merge of main), so not re-raised by the reviewer, but still unresolved and worth fixing before merge.
Notes for reviewers
- The current delta (e5f47cf → e19f481) is a merge of
main, not net-new work. The reviewer confirmed the code that appears to be introduced (read-only tool loop, Google tool-calling adapter, viewed-seconds schema + semantic validator, functional signing contract) is already-merged main code, reviewed for safety and found solid and well-tested. - No new PR-authored defects surface from the delta; no critical/high findings.
Once a human/CODEOWNERS approval is recorded (review_decision = APPROVED), the gate lifts and this can fall through to a normal approve on a clean diff — pending the advanced_delivery_reporting.yaml:150 fix.
Why human review
- Modifies
.github/workflows/training-agent-storyboards.yml— gated path (.github/workflows/**) with review_decision not APPROVED; human/CODEOWNERS approval required. - Modifies
static/schemas/source/core/assets/asset-union.json— gated path (static/schemas/source/**) with review_decision not APPROVED; human/CODEOWNERS approval required. - Carried-forward medium: broken YAML nesting in advanced_delivery_reporting.yaml:150 (null account.brand) — worth resolving before merge.
- This PR touches a path under a hard, non-overridable approval gate (.github/workflows/training-agent-storyboards.yml (modified) matches
.github/workflows/**; static/schemas/source/core/assets/asset-union.json (modified) matchesstatic/schemas/source/**) and the current GitHub review decision is 'unknown', 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
@adcp/sdk@14.0.0-beta.12, regression-gate its account-scoping fixes, and enable functional storyboard request signingWhy
The reference agent should execute every capability it claims and pass every in-scope storyboard that is not explicitly quarantined. The public limitations page should also describe current 3.2 behavior rather than preserving resolved 3.0 gaps as if they were still missing.
SDK beta 12 restores authored account scope for wholesale product feeds, so that regression is now required-clean. It also makes functional request signing available to the reference runner, addressing the previously documented signing limitation. Wholesale signal-feed scope and end-to-end webhook emission remain narrowly documented and quarantined because beta 12 does not resolve them.
Validation
npm run precommit: 1,056 repository tests passedTwo post-merge pre-push matrix attempts passed all non-sales tenant floors. Sales was blocked once by an RSS-limit kill and once by a local
fetch failed; both affected storyboards passed immediately in isolation (9/9 and 39/39), and neither run exposed a deterministic assertion regression.