Skip to content

fix: improve comply runner signal-to-noise against real agents#483

Merged
bokelley merged 2 commits into
mainfrom
bokelley/check-issue-432
Apr 10, 2026
Merged

fix: improve comply runner signal-to-noise against real agents#483
bokelley merged 2 commits into
mainfrom
bokelley/check-issue-432

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

Summary

  • Skip storyboard steps when agent doesn't implement the tool (missing_tool skip reason) instead of counting as failures
  • Detect unresolved $context placeholders and skip with dependency_failed instead of sending garbage to agents
  • Catch "Unknown tool" errors from agents as a fallback and convert to skips
  • Add rate limit retry with exponential backoff + jitter (3 retries, 2s/4s/8s base)
  • Fix sync_creatives request builder to send creatives for all discovered formats, not just the first (Storyboard runner: sync_creatives request builder only sends 1 creative #482)
  • Fix mapStepToTestStep to preserve runner's skip semantics (skips no longer incorrectly counted as failures)
  • Fix extractErrorData to handle nested JSON in error messages
  • Truncate agent error messages to 2000 chars to prevent report bloat

Real-agent validation results (before → after)

Agent Failures Before Failures After Notes
creative 11 0 Fully passing (2 tracks pass, 8 correctly skipped)
moloco 48 23 All 26 "unknown tool" now skipped; remaining are agent compliance issues
openads timeout/unclear 4 real failures Clean signal: publisher_domains, status enum, brief validation
test-mcp 83 74 Remaining are agent-side (task polling, rate limits)

Closes #482

Test plan

  • npm test passes (2558 tests, 0 failures)
  • Code review: 2 Must Fix addressed, 4 Should Fix addressed
  • Security review: 2 Should Fix addressed, 0 Must Fix
  • Validated against 4 real agents (test-mcp, creative, openads, moloco)

🤖 Generated with Claude Code

bokelley and others added 2 commits April 10, 2026 13:20
Skip steps for missing tools, detect unresolved context vars, retry on
rate limits, and send multi-format creatives in sync_creatives builder.

Closes #482

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@bokelley bokelley merged commit 51068e1 into main Apr 10, 2026
11 checks passed
bokelley added a commit that referenced this pull request May 3, 2026
…only upstream URL differs (#1491)

The lifecycle-state-and-sandbox-authority proposal previously framed
mock mode as "adopter's DecisioningPlatform methods do not run; SDK
forwards tool calls out-of-process to bin/adcp.js mock-server over
HTTP." That was wrong on two fronts:

1. The current bin/adcp.js mock-server is per-specialism upstream-API
   REST fixtures (Celtra/GAM/TikTok shapes), not an AdCP MCP surface.
   It models the upstream APIs, not the AdCP wire.
2. The whole point of the adapter layer is to bridge AdCP <-> upstream
   API. "Adopter methods don't run" misses what the adapter does. In
   mock mode the adapter IS what runs — it just talks to a fixture
   instead of a real upstream.

Corrected framing: for mock-mode accounts, the framework swaps the
adapter's upstream URL to point at bin/adcp.js mock-server
<specialism>; adapter code is identical across live/sandbox/mock.

Caught while implementing Phase 2 in Python (PR #487 in adcp-client-
python). Sections amended:

- Thesis (arrow + table row)
- "Mock (compliance / agent dev)"
- "How the SDK reaches the mock"
- "Why 'mock' is its own mode"
- "Phase 2 — mock-mode upstream URL routing" (renamed)
- "Resolved decisions" — mock-mode routing contract
- New "Implementation status" section linking Python PRs #483 and #487

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Storyboard runner: sync_creatives request builder only sends 1 creative

1 participant