Skip to content

training-agent /signals: implement sync_governance + activate_signal governance check (signal_marketplace/governance_denied) #4094

@bokelley

Description

@bokelley

Summary

Storyboard signal_marketplace/governance_denied shows 1P / 4S on /signals — only the discovery phase passes; the four real coverage phases skip because /signals doesn't currently implement governance integration.

The spec-correct flow:

  1. Buyer calls sync_plans on a governance agent (e.g. /governance) to register a strict $100 plan
  2. Buyer calls sync_governance on /signals to register that governance agent as the authority for the buyer's account
  3. Buyer calls get_signals on /signals to find a signal
  4. Buyer calls activate_signal on /signals
  5. /signals must consult the registered governance agent (HTTP check_governance call) and emit GOVERNANCE_DENIED when the plan denies

Scope

  • Implement sync_governance tool on /signals (currently not registered)
  • Wire activate_signal to look up the registered governance agent for the caller's account and call check_governance over HTTP
  • Surface GOVERNANCE_DENIED with findings propagated from the governance agent's response
  • Storyboard fixture: governance plan named comply-signal-gov-denied with $100 budget — anything above ~$0.01/segment denies

Out of scope

  • Cross-agent test-controller orchestration (governance plan must be seeded on /governance separately; the storyboard runner does this)
  • New governance specialism on /signals (we just need governance-aware-seller behavior — calling out to an external governance, not hosting plans locally)

References

  • Storyboard: static/compliance/source/specialisms/signal-marketplace/scenarios/governance_denied.yaml
  • Required tools per spec: sync_governance, get_signals, activate_signal
  • Default governance_agent_url in storyboard context: https://test-agent.adcontextprotocol.org (same training agent, /governance tenant)
  • Similar governance integration already exists on /sales (search governanceContext in task-handlers.ts:handleCreateMediaBuy)

Coverage lift

Tenant Today After fix Δ
/signals 67 / 58 67 / 62 +0 / +4

Metadata

Metadata

Assignees

No one assigned

    Labels

    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.compliance-suitegovernanceIssue concerns the governance protocol domainsignalsIssue concerns the signals protocol domain

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions