feat(protocol): add agent configuration sync - #6966
Conversation
️✅ There are no secrets present in this pull request anymore.If these secrets were true positive and are still valid, we highly recommend you to revoke them. 🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request. |
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated-path change requires human/CODEOWNERS review.
This PR touches static/schemas/source/** (16 files: 8 added, 8 modified), which sits under a hard, deterministic approval gate (gated_paths: true). Because review_decision is REVIEW_REQUIRED (not APPROVED), decision-table row 2 fires and the outcome must be escalate regardless of how clean the diff is.
The reviewer found no blocking or Medium findings — the change is a well-formed, additive experimental surface: the sync_agent_configuration task, request/response schemas, five new core schemas, a capability block, compliance storyboard, docs, and a projection-script change. Changeset is a correct minor for a non-breaking additive surface. oneOf discrimination, schema↔docs coherence, changeset scope, and credential-leak posture were all checked and are safe. This escalation is purely the mechanical gated-path gate, not a quality concern.
Escalation reasons
- Modifies protocol source schemas under
static/schemas/source/**(e.g.agent-notification-config.json,index.json,get-adcp-capabilities-response.json, plus new core/protocol schemas) — a gated path;review_decisionisREVIEW_REQUIRED, so human/CODEOWNERS approval is required before merge.
Why human review
- Touches gated path static/schemas/source/** (16 files) while review_decision is REVIEW_REQUIRED — human/CODEOWNERS approval required (decision rule row 2).
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/core/agent-configuration-state.json (added) matches
static/schemas/source/**; static/schemas/source/core/agent-notification-config-state.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/agent-notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/agent-reporting-destination-state.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/agent-reporting-destination.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/agent-webhook-challenge.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/capabilities-changed-webhook.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/delivery-provider.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/delivery-recipient.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/reporting-verification-profile-set.json (added) matchesstatic/schemas/source/**; static/schemas/source/enums/notification-type.json (modified) matchesstatic/schemas/source/**; static/schemas/source/enums/task-type.json (modified) matchesstatic/schemas/source/**; static/schemas/source/index.json (modified) matchesstatic/schemas/source/**; static/schemas/source/protocol/get-adcp-capabilities-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/protocol/sync-agent-configuration-request.json (added) matchesstatic/schemas/source/**; static/schemas/source/protocol/sync-agent-configuration-response.json (added) 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.
14ae164 to
b3bf4cb
Compare
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated schema paths require human/CODEOWNERS approval.
This PR touches 16 files under static/schemas/source/**, a hard, non-overridable approval gate (gated_paths: true). The current review_decision is REVIEW_REQUIRED, not APPROVED, so decision-rule row 2 fires: Ladon cannot auto-approve regardless of how clean the diff is.
The reviewer's delta pass is clean — no critical/high/medium findings. Two files changed since the prior review: idempotency.ts correctly adds sync_agent_configuration to MUTATING_TOOLS (matching the new request schema's required idempotency_key derivation), and the contract test strengthens its secret-rejection assertion to credentials:{} (valid against additionalProperties:false). Prior pass was also clean. This is a net-positive iteration; the escalation is purely a governance gate, not a reflection of code quality.
Escalation reasons
- Touches gated path
static/schemas/source/**(16 files: agent-configuration-state.json, agent-notification-config-state.json, agent-notification-config.json, agent-reporting-destination-state.json, agent-reporting-destination.json, agent-webhook-challenge.json, capabilities-changed-webhook.json, delivery-provider.json, delivery-recipient.json, reporting-verification-profile-set.json, notification-type.json, task-type.json, index.json, get-adcp-capabilities-response.json, sync-agent-configuration-request.json, sync-agent-configuration-response.json) whilereview_decisionisREVIEW_REQUIRED. Human/CODEOWNERS approval required before merge (decision rule row 2). The gate lifts once a real approval is recorded.
Why human review
- Touches gated path static/schemas/source/** (16 files) while review_decision is REVIEW_REQUIRED — human/CODEOWNERS approval required before merge (decision rule row 2). The gate lifts once a real GitHub/CODEOWNERS approval is recorded.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/core/agent-configuration-state.json (added) matches
static/schemas/source/**; static/schemas/source/core/agent-notification-config-state.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/agent-notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/agent-reporting-destination-state.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/agent-reporting-destination.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/agent-webhook-challenge.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/capabilities-changed-webhook.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/delivery-provider.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/delivery-recipient.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/reporting-verification-profile-set.json (added) matchesstatic/schemas/source/**; static/schemas/source/enums/notification-type.json (modified) matchesstatic/schemas/source/**; static/schemas/source/enums/task-type.json (modified) matchesstatic/schemas/source/**; static/schemas/source/index.json (modified) matchesstatic/schemas/source/**; static/schemas/source/protocol/get-adcp-capabilities-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/protocol/sync-agent-configuration-request.json (added) matchesstatic/schemas/source/**; static/schemas/source/protocol/sync-agent-configuration-response.json (added) 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.
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated-path approval gate not yet satisfied.
This PR touches files under the hard, deterministic approval gate static/schemas/source/** (16 files: new sync_agent_configuration schemas, agent-configuration/notification/reporting-destination schemas, capabilities-changed-webhook, enums, index, and get-adcp-capabilities/sync-agent-configuration request+response). Per decision rule row 2, gated_paths: true AND review_decision: REVIEW_REQUIRED (not APPROVED) forces escalation regardless of how clean the diff is. Ladon cannot auto-approve until a human/CODEOWNERS approval is recorded.
The reviewer found no Critical/High/Medium findings: changeset scope/type verified (minor, correct for an additive experimental Normative change; registration_task const→enum widening is non-breaking), schema↔docs coherence checked both directions, discriminated oneOfs on new destination/result schemas confirmed, dist immutability preserved (source-only edits), and the contract test's security coverage validated. Classification is Normative/experimental, not Breaking. Absent the gate, this diff would approve — the escalation is purely the pending human review on the protocol-source surface.
Escalation reasons
- Touches gated path
static/schemas/source/**(16 files) whilereview_decisionisREVIEW_REQUIRED— human/CODEOWNERS approval required (decision rule row 2).
Why human review
- Touches gated path static/schemas/source/** (16 files) while review_decision is REVIEW_REQUIRED, not APPROVED — human/CODEOWNERS approval required before merge (decision rule row 2).
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/core/agent-configuration-state.json (added) matches
static/schemas/source/**; static/schemas/source/core/agent-notification-config-state.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/agent-notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/agent-reporting-destination-state.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/agent-reporting-destination.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/agent-webhook-challenge.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/capabilities-changed-webhook.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/delivery-provider.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/delivery-recipient.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/reporting-verification-profile-set.json (added) matchesstatic/schemas/source/**; static/schemas/source/enums/notification-type.json (modified) matchesstatic/schemas/source/**; static/schemas/source/enums/task-type.json (modified) matchesstatic/schemas/source/**; static/schemas/source/index.json (modified) matchesstatic/schemas/source/**; static/schemas/source/protocol/get-adcp-capabilities-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/protocol/sync-agent-configuration-request.json (added) matchesstatic/schemas/source/**; static/schemas/source/protocol/sync-agent-configuration-response.json (added) 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.
|
Ladon cannot review this PR until merge conflicts are resolved. |
# Conflicts: # scripts/mcp-schema-projection.cjs # static/schemas/source/enums/notification-type.json # tests/mcp-schema-analysis.test.cjs
|
The reusable destination boundary is now exercised by the seller reporting vertical slice in scope3data/embedded-sales-agent#456. The implementation keeps destination references principal-owned and reusable, while the reporting obligation/account configuration remains the disclosure authorization. It intentionally does not advertise managed reporting until proof-bound destination generations and persisted account configuration are connected. |
…eat/agent-configuration # Conflicts: # .changeset/add-agent-configuration-sync.md # docs/protocol/sync_agent_configuration.mdx # scripts/mcp-schema-projection.cjs # static/compliance/source/universal/agent-configuration.yaml # static/schemas/source/enums/notification-type.json # static/schemas/source/protocol/sync-agent-configuration-request.json # tests/agent-configuration-contract.test.cjs
…eview Add the get_agent_configuration read task so callers can bootstrap the version fence, recover from local-state loss, and poll destination setup without blind writes. Make destination suspension and revocation delivery-halting controls with an advertised interval, retain superseded and revoked generations in readback, and require per-pattern proof before ready (file write-probe, warehouse commit verification, dataset-share recipient acceptance with observed readability). Advertise the seller's per-pattern delivery offering in capabilities so buyers negotiate instead of probing by rejection. Replace lookahead location/setup_url patterns with RE2-safe positive classes that admit ABFSS authority locators and move credential screening to normative canonicalization rules. Restructure the destination union into self-contained discriminated branches, scope idempotency records to the principal, define cross-task version coherence, and extend the conformance storyboard with graded apply, readback, idempotent replay, and section-clear phases. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Red-team review applied — commit 5d9622fFour adversarial reviews (protocol semantics, security/identity, implementor DX, product/ops) ran against this PR. They converged on the same diagnosis: the write path was well hardened, but the lifecycle around it was incomplete. This commit closes the blockers: New read task — Suspension and revocation are now delivery controls. Per-pattern proof and readiness are normative. Two-sided negotiation. Capabilities now advertise Portable, correct locator patterns. The lookahead regexes rejected Azure's canonical Hardening sweep. Idempotency records are normatively principal-scoped (the replay payload discloses full connection state); Conformance now exercises the heart. The storyboard previously graded only capability discovery, NO_AUTH, and dry-run — a dry-run-only stub could pass. Added graded phases: non-dry-run apply → Merge precondition vs #6953: the two PRs currently duplicate vocabulary by hand (this PR's All gates green locally: 14/14 contract tests, 28/28 MCP projection/analysis, full server suite 7334 passed, schema build, storyboard lints, compliance symbol check, typecheck. Deferred (fixture-dependent conformance: version-fence conflict, ref-generation rotation, cross-principal isolation; and agent-level delivery-ready webhooks, which need #6953's event types) — will be tracked in follow-up issues. 🤖 Generated with Claude Code |
|
Issue #7010 proposes controller-backed conformance coverage for the agent configuration lifecycle (optimistic-concurrency conflict, destination generation rotation, cross-principal isolation, suspension halt timing, per-pattern proof completion, out-of-offering rejection) — same surface ( Triaged by Claude Code. Session: https://claude.ai/code/session_013DBtVqNEgTqMBiLBTbBYcj Generated by Claude Code |
The configuration owner is a party — a buyer agent or an operator-side identity — and principal is the term the normative text already uses throughout. Rename sync_agent_configuration/get_agent_configuration to sync_principal/get_principal, the adcp.agent_configuration capability block to adcp.principal, the protocol.agent_configuration experimental feature to protocol.principal, connection_id to principal_id, and the storyboard to universal/principal. Rewrite the identity documentation in party vocabulary: two principal kinds, agent-scoped operator labels with a normative cross-principal non-alignment rule, shared-credential refusal, and per-hop principal composition for chained buyer-agent/intermediary/seller deployments. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Renamed the surface to the principal layer in commit 🤖 Generated with Claude Code |
Summary
sync_agent_configurationfor authenticated caller-to-agent relationship configurationdestination_refvaluessync_agent_notification_configsas a compatibility path over the same subscriber setWhy
get_adcp_capabilitiestells callers what a seller supports, but AdCP did not have a durable authenticated surface for a caller to declare connection-level resources it wants to reuse. This fills that relationship layer without self-asserted identities or per-account destination duplication.For example, a user coming through Claude can register an S3 reporting destination under their delegated user principal. They do not register Claude or themselves as a buyer agent. If the client exposes only a shared service identity, it must first complete delegated authorization or account linking because the seller otherwise cannot isolate user-owned configuration.
It is intentionally separate from #6953. Reporting delivery consumes the seller-issued
destination_refonly after a separate account/feed configuration authorizes disclosure.Identity, safety, and lifecycle
connection_idare not owner identitiesValidation
npm run test:mcp-schema-projectionnpm run test:oneof-discriminators