Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
456 commits
Select commit Hold shift + click to select a range
ba0fc50
ci(release): auto-upload protocol tarball to GitHub Release (#3786)
bokelley May 1, 2026
bf36e02
docs(security): cosign verify-blob trust model + cert-subject lookup …
bokelley May 1, 2026
114f244
spec(conventions): reserve ctx_metadata as adapter-internal round-tri…
bokelley May 1, 2026
8a864b3
ci(release): un-exclude dist/compliance + forward-merge auto-resoluti…
bokelley May 2, 2026
e7ffef0
fix(addie): use organization_memberships in prospect-claim admin look…
bokelley May 2, 2026
8b2caaa
feat(registry): remove discovered agents from public surface (#3772) …
EmmaLouise2018 May 2, 2026
d32bc37
fix(addie): make agent registration self-explanatory (#3781)
EmmaLouise2018 May 2, 2026
0ee42c6
fix(registry): label measurement and governance type filters (#3805)
EmmaLouise2018 May 2, 2026
7bd8588
ci(release): forward-merge package.json --ours, not --theirs (#3807)
bokelley May 2, 2026
5e9d269
Forward-merge 3.0.x → main (manual cherry-pick divergence resolution)…
bokelley May 2, 2026
4a211dd
ci(release): bridge cherry-pick divergence in forward-merge (#3811)
bokelley May 2, 2026
2419699
fix(billing): catch partial-truth subscription rows that misrender as…
bokelley May 2, 2026
eebc48b
ci(release): push forward-merge branch before peter-evans runs (#3818)
bokelley May 2, 2026
5e7bfc2
Forward-merge 3.0.x → main (3.0.4 release artifacts) (#3819)
bokelley May 2, 2026
4afd3eb
docs(release-notes): add v3.0.2, v3.0.3, v3.0.4 entries (#3824)
bokelley May 2, 2026
81ef7c9
feat(training-agent): implement provenance enforcement (#3792)
bokelley May 2, 2026
7525019
spec: brand_url on get_adcp_capabilities for keys-from-agent-URL disc…
bokelley May 2, 2026
4a3f322
feat(compliance): unified anti-façade + cascade-attribution contract …
bokelley May 2, 2026
d024eb8
spec(accounts): buyer-agent identity model + billing error-code cover…
bokelley May 2, 2026
e9a79a0
feat(schema): migrate prose required-when rules to x-adcp-validation …
bokelley May 2, 2026
2cebd6e
chore(testing): phantom-enum cleanup, required-clean allowlist, verif…
bokelley May 2, 2026
1652b93
feat(schemas): unify metric accountability — timestamped contract + s…
bokelley May 2, 2026
aec0162
test(addie): RFC-drafting grader + Jeffrey-Mayer replay scenarios (#3…
bokelley May 2, 2026
609e27e
feat(addie): lead with coverage before drafting RFC issues (#3815)
bokelley May 2, 2026
44d3c2b
feat(training-agent)!: migrate to @adcp/sdk@6.0.0 + split into per-sp…
bokelley May 2, 2026
7709a85
fix(billing): canonical /sync write + recognize founding-era subs by …
bokelley May 2, 2026
3a33e82
spec(specialisms): deprecate sales-proposal-mode (#3840)
bokelley May 2, 2026
ef96a85
docs(training-agent): point examples at per-specialism tenant URLs (#…
bokelley May 2, 2026
13ea974
feat(compliance): anti-façade follow-ups — check-enum lint, advisory …
bokelley May 2, 2026
762ff95
feat(compliance): payload_attestation digest mode for query_upstream_…
bokelley May 2, 2026
2c13563
fix(billing): /sync Stripe expansion depth + observable error logging…
bokelley May 2, 2026
ff4fd0c
feat(training-agent): truth-of-claim verifier — closes #3802 (#3849)
bokelley May 2, 2026
629b0b0
fix(billing): drop over-deep Stripe expand in /sync, fetch product pe…
bokelley May 2, 2026
56b04c6
docs(measurement): add three-layer taxonomy doc (#3843)
bokelley May 2, 2026
9c8cba9
fix(training-agent): wire Postgres task registry — production hotfix …
bokelley May 2, 2026
bc1e8c7
feat(compliance): expires_after_version for advisory drift + attestat…
bokelley May 2, 2026
cf889f2
feat(media-buy): supports_proposals capability flag — closes #3844 (#…
bokelley May 2, 2026
9ebcb56
feat(registry): health_check_url fallback + classified probe errors (…
bokelley May 2, 2026
c690747
feat(training-agent): implement BILLING_NOT_SUPPORTED + BILLING_NOT_P…
bokelley May 2, 2026
21fd8f3
spec(accounts): billing-gate conformance storyboard + BrandAuthorizat…
bokelley May 2, 2026
f6f90d8
feat(schemas): vendor: BrandRef on viewability + performance-feedback…
bokelley May 2, 2026
129d058
fix(billing): cap Stripe coupon names + filter retired tiers and show…
bokelley May 2, 2026
753d41f
fix(addie): ban fabricated ticket numbers / "team has been notified" …
bokelley May 2, 2026
eb9c435
fix(addie): empty-turn safeguard — log + flag when model returns noth…
bokelley May 2, 2026
2268acf
fix(training-agent): drop noopJwksValidator production guard (#3869)
bokelley May 2, 2026
763f39f
chore(hooks): storyboard matrix in pre-push — closes #3803 item 3 (#3…
bokelley May 2, 2026
d41a3e5
fix(billing): drop over-deep Stripe expand at three sister sites of /…
bokelley May 2, 2026
0171f16
fix(addie): emit tool_error person events on billing-tool refusals (c…
bokelley May 2, 2026
549540a
chore(admin): remove dead invoice modal + pass Stripe key to docker c…
bokelley May 2, 2026
0b2cf2b
feat(schemas): metric_aggregates partition — row-symmetric delivery a…
bokelley May 2, 2026
15cbd99
feat(schemas): completion_source qualifier — seller_attested vs vendo…
bokelley May 2, 2026
6da3000
spec(error): schema_id + discriminator on issues[]; preserve sub-sche…
bokelley May 2, 2026
53e7920
feat(schemas): metric vocabulary reconciliation — performance-feedbac…
bokelley May 2, 2026
7aa320d
ci(deploy): smoke training-agent tenants after rolling restart (#3879)
bokelley May 2, 2026
6776ce4
feat(schemas): unify outcome measurement into the row-shape vocabular…
bokelley May 2, 2026
68b86a5
feat(schemas): delivery_measurement.vendors as BrandRef[] (closes #38…
bokelley May 2, 2026
f44fba3
fix(schemas): three measurement audit cleanups (§3.8, §3.10, #3863 pr…
bokelley May 2, 2026
e49d82b
spec(errors): register agent-permission-denied details + shared error…
bokelley May 2, 2026
1a33291
docs(measurement): add seller-as-measurement-agent topology + convers…
bokelley May 2, 2026
372a23e
fix(addie): include content column when queueing community articles (…
bokelley May 2, 2026
3302c8c
docs(release-notes): add 3.0.5 entry (#3901)
bokelley May 2, 2026
bc00453
ci(deploy): smoke accepts 403 (SDK v6 invalid-bearer status) (#3882)
bokelley May 2, 2026
5c3e3e6
spec: /.well-known/adcp-agents.json for multi-agent topology discover…
bokelley May 2, 2026
c9711a0
Forward-merge 3.0.x → main (3.0.5 release artifacts) (#3902)
bokelley May 2, 2026
ecb082f
docs(schemas): codegen note on agent-permission-denied oneOf exclusiv…
bokelley May 3, 2026
4134bc3
ci(triage): move jq payload filter to heredoc-fed temp file (#3907)
bokelley May 3, 2026
26e03c2
ci(release): extend forward-merge auto-resolution for known 3.1-track…
bokelley May 3, 2026
0a10e73
ci(triage): convert webhook-miss sweep filter to heredoc-fed temp fil…
bokelley May 3, 2026
16147ac
feat(brand-protocol): redirect_reason + redirect_effective_at on bran…
bokelley May 3, 2026
d55a406
ci(schemas): add oneOf discriminator audit + baseline (adcp#3917) (#3…
bokelley May 3, 2026
2a2e5c4
spec(errors): register AGENT_SUSPENDED / AGENT_BLOCKED + consolidate …
bokelley May 3, 2026
1e76c74
spec(brand): account on acquire_rights/update_rights + bound CPM proj…
bokelley May 3, 2026
4a98e74
docs(skill): document the four implementation-dependent issues[] fiel…
bokelley May 3, 2026
469b6d3
spec(schemas): add discriminator hints to const-property oneOf unions…
bokelley May 3, 2026
d9ac5f4
docs(skill): correct issues[] field names + split spec-optional from …
bokelley May 3, 2026
b62c407
spec(errors): wire-placement guidance for GOVERNANCE_DENIED / GOVERNA…
bokelley May 3, 2026
c09f2e0
spec(schemas): hoist deferred discriminators on pricing-option and fo…
bokelley May 3, 2026
e335644
ci(storyboards): lint context_outputs.path against the response schem…
bokelley May 3, 2026
28345bd
docs(trust): add Identity surface to trust.mdx (7th trust surface) (#…
bokelley May 3, 2026
ab1f38d
triage: silent on already-final-state comments (#3938)
bokelley May 3, 2026
fc591c1
feat(cert): pin certification modules to training-agent tenants (#3930)
bokelley May 3, 2026
a3e2def
ci(storyboards): clean up two pre-existing lint failures (#3941)
bokelley May 3, 2026
ff27268
ci(storyboards): lint validations[].path against the response schema …
bokelley May 3, 2026
2d3952c
ci(storyboards): adopt isPureExtensionPoint in context-output-paths l…
bokelley May 3, 2026
013ff96
spec(envelope): add adcp_error + envelope-aware lint resolution (#3945)
bokelley May 3, 2026
972476d
feat(addie-video): fullscreen + presenter + Daily SDK lab + CSRF cros…
bokelley May 3, 2026
b9d0750
ci(storyboards): expected_arm annotation for oneOf disambiguation (#3…
bokelley May 3, 2026
9c8aa76
docs(storyboard-schema): document task_completion. prefix for context…
bokelley May 3, 2026
0f83e96
feat(admin): add brand-claim verify endpoint for missed-webhook recov…
bokelley May 3, 2026
9ee075d
fix(webhooks): mirror brand domains for personal orgs (#3954 follow-u…
bokelley May 3, 2026
ec05dbf
feat(compliance): bump @adcp/sdk to 6.7.0 + adopt upstream_traffic on…
bokelley May 3, 2026
2c6ba1b
fix(addie-events): resolve events by any user-facing identifier (#3973)
bokelley May 3, 2026
e97f1b8
fix(compliance): close 3965 Class B + D — deterministic_testing error…
bokelley May 3, 2026
f034794
fix(training-agent): wire listCreativeFormats on /creative and /creat…
bokelley May 3, 2026
08635ff
ci(storyboards): ratchet floors up to capture #3976's lift on /creati…
bokelley May 3, 2026
427d664
docs(building): SDK stack reference + decision page + version-adaptat…
bokelley May 3, 2026
695d61e
feat(training-agent): wire accounts.upsert on all v6 tenants — billin…
bokelley May 3, 2026
d597efe
spec(compliance): pin endpoint_pattern wildcard grammar + downgrade n…
bokelley May 3, 2026
d5f43b1
docs(building): replace ASCII layer diagram on /building/sdk-stack wi…
bokelley May 3, 2026
eaada09
fix(webhooks): backfill org domains for personal-tier orgs (#3966 fol…
bokelley May 3, 2026
c763226
docs(spec): comply_test_controller is deployment-scoped, not request-…
bokelley May 3, 2026
063e317
cleanup(changesets): drop 2 stale forward-merge leftovers + apply AUT…
bokelley May 3, 2026
f74aa81
spec(conformance): rejection-arm vs errors[] mutual-exclusion test + …
bokelley May 3, 2026
c6fb0dd
spec(errors): add CONFIGURATION_ERROR to canonical error catalog (clo…
bokelley May 3, 2026
1ef49af
fix(compliance): inventory_list_targeting — add sandbox:true to accou…
bokelley May 3, 2026
31a3440
fix(compliance): sales_guaranteed/create_media_buy — use task_complet…
bokelley May 3, 2026
e2a8c78
docs(governance): five → six domains in overview (closes #3985) (#4012)
bokelley May 3, 2026
4e20236
forward-merge 3.0.x → main: 3.0.6 release artifacts + spec/source res…
bokelley May 3, 2026
6f65b64
docs(building): fix AAO hallucination, reframe sdk-stack, add IA spec…
bokelley May 3, 2026
70116a0
docs(building): rewrite /building overview as single decision page (I…
bokelley May 3, 2026
7abeadb
feat(member-profiles): audit trail for founding member grants (closes…
bokelley May 3, 2026
e598d4f
docs(building): IA Phase 2 — relocate pages by layer (#41 moves, 43 r…
bokelley May 3, 2026
0651046
feat(training-agent): wire BuyerAgentRegistry on all v6 tenants (#4026)
bokelley May 3, 2026
71022b9
feat(training-agent): implement BILLING_NOT_SUPPORTED scope: "account…
bokelley May 3, 2026
64d2bb4
docs(building): IA Phase 3 — split schemas-and-sdks, add build-a-call…
bokelley May 3, 2026
acbb957
fix(fixture): correct creative-ad-server pricing_options field names …
bokelley May 3, 2026
b9d6f76
fix(compliance): correct brand-rights storyboard acquire_rights field…
bokelley May 3, 2026
88a40b1
fix(compliance): seed governance_agent_url default via storyboard-roo…
bokelley May 3, 2026
b7a6f8a
fix(compliance): make idempotency capability gate advisory for suppor…
bokelley May 3, 2026
96b8005
docs(compliance): document task_completion.<inner> prefix for context…
bokelley May 3, 2026
699c621
fix(compliance): remove payload_must_contain over-fit; extend identif…
bokelley May 3, 2026
6b47ccd
fix(compliance): clarify MCP envelope binding in v3_envelope_integrit…
bokelley May 3, 2026
d1dbc5e
feat(compliance): add optional audio build phase to creative_template…
bokelley May 3, 2026
25e3b1a
docs(conformance): add mock-server authority and failure triage (#402…
bokelley May 3, 2026
2e6f896
docs(security): fix three stale /docs/reference/security URLs that 40…
bokelley May 3, 2026
f064c18
docs(building): persona-walk Tier 1 fixes — six day-1 friction points…
bokelley May 3, 2026
b4471ce
feat(schema): add vast_tracker + daast_tracker asset types (#2915) (#…
bokelley May 3, 2026
6695e46
fix(brand-claim): recreate org-domain when existing entry has null ve…
bokelley May 3, 2026
f0ecd7e
chore(http): drop boot-time WorkOS listOrganizations sync (#3954) (#3…
bokelley May 3, 2026
6d8648b
feat(webhooks): enforce seat cap on upsertMembership for un-staged ad…
bokelley May 3, 2026
bf8710b
docs(building): persona-walk Tier 2 — single-source 3.0 changelog + p…
bokelley May 3, 2026
05ef789
fix(server): canonicalize Addie's building/* URLs to post-IA-reorg pa…
bokelley May 3, 2026
a7961d0
fix(thread-service): serialize sequence-number assignment per thread …
bokelley May 4, 2026
eb4108b
docs(building): rename @adcp/client → @adcp/sdk, fix API surface, ref…
bokelley May 4, 2026
b756b6a
fix(dashboard-agents): unblock Test OAuth loop and stop lying about s…
EmmaLouise2018 May 4, 2026
c30cd7b
fix(merge): repoint addie_threads/person_events before deleting secon…
bokelley May 4, 2026
1323f39
spec(specialisms): add sponsored-intelligence to AdCPSpecialism (prev…
bokelley May 4, 2026
c2c8c79
fix(billing): resolve tier from product metadata.tier when lookup_key…
bokelley May 4, 2026
6ee37c8
fix(training-agent): bump @adcp/sdk to 6.9.0, close #3965 Class E (#4…
bokelley May 4, 2026
d1b6d9a
feat(identity): admin "promote credential to primary" (#4059)
bokelley May 4, 2026
de60c64
spec(auth): require buyer-principal credentials on transport channel;…
bokelley May 4, 2026
805067b
fix(training-agent): eager tenant registry init at server boot (#4060)
bokelley May 4, 2026
18b3db7
fix(training-agent): restore per-tenant /<tenant>/mcp-strict, close #…
bokelley May 4, 2026
29ca944
fix(training-agent): block app.listen() until tenant registry is read…
bokelley May 4, 2026
5d870c1
chore(ipr): record signature for @ohalushchak-exadel (adcontextprotoc…
github-actions[bot] May 4, 2026
dd5fc08
Revert "fix(training-agent): block app.listen() until tenant registry…
bokelley May 4, 2026
59bba55
fix(training-agent): wire seed.creative_format on /sales tenant (#4066)
bokelley May 4, 2026
e27122b
fix(addie): save_agent must not silently skip the dashboard write (#4…
bokelley May 4, 2026
fa69e06
fix(training-agent): surface tenant registry init failures + boot-pha…
bokelley May 4, 2026
a43f78f
fix(training-agent): wire PostgresStateStore (root cause of tenant in…
bokelley May 4, 2026
7aca981
fix(training-agent): defer pool lookup in pickStateStore so first-att…
bokelley May 4, 2026
0c9379d
fix(training-agent): defer pool lookup in pickTaskRegistry so prod ac…
bokelley May 4, 2026
6d6eae7
ci(storyboards): skip two SDK-blocked steps on /sales, ratchet floor …
bokelley May 4, 2026
4a8c8f3
fix(registry-api): downgrade external agent fetch failures from error…
bokelley May 4, 2026
47878fc
revert: remove /.well-known/adcp-agents.json (#3903) (#4078)
bokelley May 4, 2026
3caa57c
feat(addie): server-side Socket Mode for adopter conformance assistan…
bokelley May 4, 2026
b6c3c27
fix(training-agent): bump @adcp/sdk to 6.11.0, drop both KNOWN_FAILIN…
bokelley May 4, 2026
6133d31
feat(addie): conformance Socket Mode — storyboard runner + Addie chat…
bokelley May 4, 2026
edc1b5b
feat(integrity): unique-org-per-email-domain invariant + cleanup scri…
bokelley May 4, 2026
3943502
ci(storyboards): per-tenant probe_task override unblocks security_bas…
bokelley May 4, 2026
32f3c18
fix(compliance): chain proposal_id through proposal_finalize storyboa…
bokelley May 4, 2026
1243c0d
feat(design-system): bootstrap apps/web + token system (#3782)
katiecooperco May 4, 2026
1e44c04
feat(schemas): tmp identity_match_request — required seller_agent_url…
ohalushchak-exadel May 4, 2026
34d9d6e
fix(org-merge): handle five RESTRICT FK tables blocking merges (#4101)
bokelley May 4, 2026
d7e19b3
fix(training-agent): tenant router lock + storyboard-smoke --brand (#…
bokelley May 4, 2026
52d0ca5
fix(member-profile): surface load errors instead of blank page (#4105)
bokelley May 4, 2026
9fa537c
fix(org-merge): surface 500-response details on /api/admin/cleanup/me…
bokelley May 4, 2026
6f4d380
feat(aao): publisher self-service — /publisher/:domain page, API roll…
bokelley May 5, 2026
c2e3edf
feat(api): per-agent REST surface at /api/me/agents (#4104)
EmmaLouise2018 May 5, 2026
e92c85c
feat(aao): publisher page celebrates what's there + auto-crawl on vie…
bokelley May 5, 2026
ffe0cd0
feat(aao): origin verification for AAO-hosted publishers (#4124)
bokelley May 5, 2026
7b26957
chore(server): deprecate /api/registry/lookup/domain/:domain in favor…
bokelley May 5, 2026
41a5cc4
feat(admin-tool): add 'import from registry' picker to adagents.json …
bokelley May 5, 2026
13d7fd2
fix(server): per-IP rate limit on unauthenticated registry-read endpo…
bokelley May 5, 2026
9b81ef5
feat(registry): promote brand.json relationship to delegation_type on…
bokelley May 5, 2026
6fb91c2
fix(registry): reconcile aao_hosted properties on re-sync via source_…
bokelley May 5, 2026
ce70e1d
fix(aao): re-trigger brand crawl on stub rows without manifest (#4137)
bokelley May 5, 2026
eb3c296
fix(billing): backfill organizations.email_domain for orphaned prospe…
bokelley May 5, 2026
f35e397
fix(billing): set email_domain at row creation, don't wait for webhoo…
bokelley May 5, 2026
499020f
feat(jobs): daily orphan-org audit (#4133)
bokelley May 5, 2026
99b43b2
feat(onboarding): claim flow for sales-touched prospect orgs at signu…
bokelley May 5, 2026
8247514
fix(billing): gate customer portal on active subscription, record exp…
bokelley May 5, 2026
ec6e6a7
fix(billing): notify with actual paid amount and payment status, not …
bokelley May 5, 2026
8b87d1e
fix(aao): migrate adagents/brand validators from axios to safeFetch (…
bokelley May 5, 2026
aace6c5
feat(aao): add refresh button to publisher page hero (#4140)
bokelley May 5, 2026
dfb87c6
fix(addie): remove_saved_agent must clear member_profiles.agents too …
bokelley May 5, 2026
0eb677b
feat(dashboard-agents): add Delete button to agent cards (#4139)
EmmaLouise2018 May 5, 2026
e8a8901
fix(brandfetch): retry 5xx/429 and warn on transient upstream errors …
bokelley May 5, 2026
1cfcd51
chore(addie): log WorkOS Pipes authorize error fields on /connect/git…
bokelley May 5, 2026
59201ae
feat(addie-video): neutral filler pool + video-lab toggle (#4147)
bokelley May 6, 2026
048e20b
fix(registry): trust live origin over stale AAO opt-in on publisher p…
bokelley May 6, 2026
d1e466b
fix(registry): re-crawl when cached manifest diverges from federated …
bokelley May 6, 2026
a2c53b5
fix(registry): reconcile agent rows on crawl so removals propagate (#…
bokelley May 6, 2026
de4e9e6
feat(member-profile): auto-populate primary_brand_domain from verifie…
bokelley May 6, 2026
2882394
fix(addie): route OAuth-required agent failures to authorize flow (#4…
bokelley May 6, 2026
e6911f2
fix(member-profile): make backfill script prod-runnable + dry-run def…
bokelley May 6, 2026
4a7209c
fix(addie): extend OAuth prompt to buyer-tool handlers; fix retry cop…
bokelley May 6, 2026
ab4227a
fix(scripts): initialize database pool in backfill-primary-brand-doma…
bokelley May 6, 2026
588cedc
feat(registry): add POST /api/me/member-profile to bootstrap a member…
EmmaLouise2018 May 6, 2026
edc0f9d
chore(codeowners): use @adcontextprotocol/maintainers team (#4168)
EmmaLouise2018 May 6, 2026
e02845c
fix(admin): surface 23505 conflict on /sync + add by-stripe-id lookup…
bokelley May 6, 2026
77bae0c
fix(server): block free-email provider domains from brand claims, uni…
bokelley May 6, 2026
1277bc5
feat(web): unify blue ramp on brand-blue and add -1000 flood stops (#…
katiecooperco May 6, 2026
ac49380
fix(spec): quote MemberProfile.primary_brand_domain so Mintlify can p…
EmmaLouise2018 May 6, 2026
e8bfc2b
fix(billing): add stripe_subscription_id fallback to prevent silent c…
bokelley May 7, 2026
93146bb
docs(creative): document accounts filter item type as AccountRef[] in…
bokelley May 7, 2026
1d97176
feat(member-profile): self-service Linked Domains card (Stage 2 of #3…
bokelley May 7, 2026
3312d4b
fix(server): resolver self-heals dangling primary_organization_id (#4…
bokelley May 7, 2026
610c562
feat(registry): publisher page redesign — verifier-first hero + self_…
bokelley May 7, 2026
8832964
feat(registry): per-agent refresh endpoint + dashboard button (#4186)
bokelley May 7, 2026
356dffd
feat(registry): publisher page Phase B — fetch metadata + Case-B redi…
bokelley May 7, 2026
3e803e1
feat(registry): publisher page follow-ups — freshness pill, agent lin…
bokelley May 7, 2026
6389e47
chore(forward-merge): manually resolve 3.0.x → main backlog (closes #…
bokelley May 7, 2026
8cd3d55
feat(registry): partner-storefront embed widget at /publisher/:domain…
bokelley May 7, 2026
e0d80ce
fix(addie): coerce LLM-provided string-array tool inputs at runtime (…
bokelley May 7, 2026
e59bb57
feat(addie): get_github_issue gains include_diff + any-repo reads (#4…
bokelley May 7, 2026
50a01eb
feat(adagents): ads.txt managerdomain fallback for adagents discovery…
patmmccann May 7, 2026
91f417f
spec(tmp): IdentityMatch frequency-cap data flow + serve_window_sec (…
ohalushchak-exadel May 7, 2026
d0c84e4
fix(registry): agent-level visibility is the only listing gate (#4194)
EmmaLouise2018 May 7, 2026
dd9180a
Move changeset PR guidance from CLAUDE to playbook (#4199)
patmmccann May 7, 2026
a42f238
feat(registry): persist managerdomain discovery provenance on publish…
bokelley May 7, 2026
4467d9d
feat(registry): one-call storefront bootstrap, with membership_tier n…
bokelley May 7, 2026
3b85ea4
fix(agent-oauth): delegate web OAuth to @adcp/sdk web helpers (#4188)
bokelley May 8, 2026
9a38d2d
fix: stripe expand depth + WorkOS invite for static admin key (#4207)
bokelley May 8, 2026
fec4b19
spec: domain column rationalization (Stage 3, #4159) (#4215)
bokelley May 8, 2026
6676cd6
feat(scripts): Stage 0 domain-cleanup script (#4159) (#4217)
bokelley May 8, 2026
a93d2b0
fix(compliance): measurement_terms_rejected — UUID-aliased idempotenc…
bokelley May 8, 2026
d2c40bb
chore: snapshot docs for v3.0.7 (#4222)
aao-release-bot[bot] May 8, 2026
58269fa
docs(auth): forbid non-canonical bearer header aliases (#4216)
bokelley May 8, 2026
16fa0a7
ci(release): forward-merge 3.0.x → main (3.0.7 backlog) (#4225)
bokelley May 8, 2026
ec01509
ci(error-codes): lint enum drift between source and 3.0.x (#4221)
bokelley May 8, 2026
6772c0b
ci(release): docs-snapshot api-reference fix + forward-merge storyboa…
bokelley May 8, 2026
8edd3f9
fix(compliance): UUID-aliased idempotency_keys across remaining story…
bokelley May 8, 2026
36402a5
ci(release): forward-merge 3.0.x → main (3.0.8 backlog) (#4242)
bokelley May 8, 2026
d0c6841
chore: snapshot docs for v3.0.8 (#4234)
aao-release-bot[bot] May 8, 2026
b9b189f
fix(registry): require declared agent type + auto-backfill primary_br…
EmmaLouise2018 May 8, 2026
2e1de36
feat(crawler): queue-backed manager revalidation fan-out (#4210)
bokelley May 8, 2026
7bf68b6
feat(registry): manager fan-out re-validation endpoint (#4251)
bokelley May 8, 2026
29529ac
chore(ipr): record signature for @EvgenyAndroid (adcontextprotocol/ad…
github-actions[bot] May 8, 2026
d077d05
fix: stop paging on three expected error classes + plug pg-pool retry…
bokelley May 8, 2026
1a0df88
docs(playbook): clarify schema alias versioning contradiction (#4178)
patmmccann May 9, 2026
938dba7
docs(specs): Java SDK RFC for working group review (#4145)
bokelley May 9, 2026
f34ba8b
docs(webhooks): registration channel determines envelope shape (close…
bokelley May 9, 2026
79f5a1f
fix(registry): heartbeat picks up member-registered agents (write-sid…
EmmaLouise2018 May 9, 2026
be01c6c
fix(compliance): heartbeat pre-stamp TTL, dry_run correctness, manual…
bokelley May 9, 2026
6fa4c13
fix(registry): dashboard probe sends owner-saved auth token (#4277)
bokelley May 9, 2026
342a9b1
fix(adagents): accept property-level publisher_domain in managerdomai…
bokelley May 9, 2026
16efb2e
chore(scripts): add real-world managerdomain fallback probe (#4286)
bokelley May 9, 2026
870bcd5
feat(scripts): Stage 0.3 — insert-missing-rows phase (#4159) (#4287)
bokelley May 9, 2026
d2c557b
feat(compliance): add storyboard coverage for search_brands, get_crea…
claude May 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
509 changes: 509 additions & 0 deletions .agents/ds-migration-plan.md

Large diffs are not rendered by default.

94 changes: 92 additions & 2 deletions .agents/playbook.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,11 +194,13 @@ When linking to schemas in docs, use the correct version alias:
3. If only in `static/schemas/source/`, use `latest`

**Version aliases:**
- `/schemas/v3/` → latest 3.x release (currently 3.0.0-rc.3)
- `/schemas/v2/` → latest 2.x release (currently 2.5.3)
- `/schemas/v3/` → latest published 3.x release (do not hardcode a patch/RC number here; check `dist/schemas/` for the current target)
- `/schemas/v2/` → latest published 2.x release (check `dist/schemas/` for the current target)
- `/schemas/v1/` → points to `latest` (for backward compatibility)
- `/schemas/latest/` → development version (`static/schemas/source/`)

This avoids drift with the release-line section below, where `3.0.x` continues to advance after release candidates.

**CI validation:** The `check-schema-links.yml` workflow validates schema URLs in PRs and will warn about unreleased schemas or suggest the correct version.

### Protocol vs Task Response Separation
Expand All @@ -207,6 +209,21 @@ Task responses contain ONLY domain data. Protocol concerns (message, context_id,
## Versioning

### Changesets
#### Mandatory: changeset on every PR
Every PR **must** include a changeset file. Before pushing, run:

```bash
npx changeset --empty
```

Then **immediately rename** the generated file from its random name (for example, `petite-beds-film.md`) to a descriptive name matching the change (for example, `fix-pg-idle-timeout-retry.md`):

```bash
mv .changeset/<random-name>.md .changeset/<descriptive-name>.md
```

Add a clear description in the changeset body. Use `--empty` (no package entry) for non-protocol changes (server, UI, docs, infra, tools). Use `patch`/`minor`/`major` only for changes to the published AdCP protocol spec (schemas, task definitions, API reference).

**NEVER manually edit versions.** Use changesets:
```bash
# Create .changeset/your-feature.md
Expand All @@ -232,6 +249,79 @@ Only use `patch`/`minor`/`major` when the change affects the published AdCP prot
- **MINOR**: Add optional fields, new enum values, new tasks
- **MAJOR**: Remove/rename fields, change types, remove enum values

### Release lines

AdCP runs two release lines simultaneously:

- **`main`** → next minor (currently `3.1.0-beta.N` while in pre mode; see `.changeset/pre.json`)
- **`3.0.x`** → patches to the current minor (`3.0.2`, `3.0.3`, …)

Branch naming follows `<major>.<minor>.x` to match the existing `2.6.x` precedent. No `release/` prefix.

#### Cherry-pick convention

Default flow when a fix is needed in both lines:

1. Author lands on `main` first (normal PR flow)
2. After merge, cherry-pick to `3.0.x`:
```bash
git checkout 3.0.x && git pull
git cherry-pick <main-sha>
git push origin 3.0.x
```
3. The forward-merge workflow (`.github/workflows/forward-merge-3.0.yml`) opens a PR back to `main` whenever `3.0.x` updates. Merging it is a near-no-op (the cherry-pick is already in `main`) but keeps the lines provably in sync. The workflow auto-resolves conflicts on always-divergent paths (`package.json` / `package-lock.json` → preserve main's; `.changeset/*.md` → preserve main's; `dist/*`, `CHANGELOG.md`, `static/schemas/source/index.json` → take 3.0.x's) and post-merge skips the PR if the result has no tree change vs `main` (which happens after a squash-merge of an earlier forward-merge). Conflicts on any path outside that allowlist fail the workflow loud and need manual resolution — they indicate a playbook violation (a change on 3.0.x that wasn't first cherry-picked from main).

#### Patch eligibility

For each surface a PR touches, the corresponding rule must hold. A PR touching multiple surfaces must satisfy all relevant rules.

**Stable schemas** — no new fields, no renamed fields, no new enum values, no new error codes, no new normative requirements. Clarifications are patch-eligible only when both:
1. The prior spec was demonstrably silent or ambiguous on the input (not just unstated), AND
2. Any conformant 3.0.0 implementation of the surrounding behavior would already satisfy the new MUST.

If a previously-conformant implementation could fail the clause, it's a new requirement and ships in `3.1.x` only. (This is the IETF errata vs. bis test.)

**Experimental surfaces** (governance, TMP, anything `x-status: experimental`) — additive changes are always patch-eligible without notice. Breaking changes follow the 6-week notice rule in `docs/reference/experimental-status.mdx` and therefore ship in the next minor, not a patch.

**Conformance harness** (`comply_test_controller`, storyboards, `runner-output.json`) — additive scenarios, additive `comply_test_controller` enum values, new universal storyboards, and additive `runner-output.json` step kinds are patch-eligible. Renaming or repurposing existing step kinds is not.

**Non-normative docs and release tooling** — always patch-eligible. Includes typo fixes, link corrections, example updates, runbook changes.

**Normative docs** (security guidance, idempotency rules, error semantics, signing/transport behavior, `.well-known` files like `adagents.json`/`brand.json` schemas) — follow the stable-schemas rule above. "It's just docs" doesn't apply when the docs change required behavior.

**Never patch-eligible** (per `docs/reference/experimental-status.mdx`):
- Transport-layer changes (MCP, A2A, REST envelope semantics)
- Auth profile changes (RFC 9728, OAuth scopes)
- Signing profile changes (RFC 9421 covered components, JWS algorithms)

These are version-level concerns. Security fixes ship as out-of-band advisories or in the next minor.

If unsure, default to `--empty` and discuss whether the change belongs on `3.0.x` at all. Many fixes are stable-only and ship in `3.1.x` only.

#### Pre mode (beta releases)

`.changeset/pre.json` puts main in **pre mode** — every Version Packages cut produces `3.1.0-beta.N` instead of `3.1.0`. This is a deliberate safety net: if a `minor` changeset slips into `main` accidentally, it ships as a beta drop, not as 3.1.0 stable.

To exit pre mode and cut 3.1.0 stable:

```bash
npx changeset pre exit # deletes .changeset/pre.json
git add -A && git commit -m "chore(release): exit pre mode for 3.1.0 stable cut"
# open PR, land it
```

Next Version Packages cut after the exit PR merges produces `3.1.0` stable.

#### App-token convention

`release.yml`, `release-docs.yml`, and `forward-merge-3.0.yml` mint a GitHub App installation token via `actions/create-github-app-token@v3` (secrets `RELEASE_APP_ID` / `RELEASE_APP_PRIVATE_KEY`) instead of using the default `GITHUB_TOKEN`. App-token-triggered events (push, PR open, release publish) DO fire downstream workflows; `GITHUB_TOKEN`-triggered events don't (GitHub's recursion-blocking rule). Without this swap, the Version Packages PR's required CI never fires, the release-docs snapshot is never created on `release: published`, and the auto-snapshot PR's required CI never fires either.

#### Runbooks

- `.agents/shortcuts/cut-patch.md` — cutting a `3.0.X` patch
- `.agents/shortcuts/cut-beta.md` — cutting a `3.1.0-beta.N` and exiting pre mode for 3.1.0 stable
- `.agents/shortcuts/cut-major.md` — cutting a major (4.0 when its time comes)

### Addie Code Version
When making significant changes to Addie's core logic, bump `CODE_VERSION` in `server/src/addie/config-version.ts`.

Expand Down
120 changes: 114 additions & 6 deletions .agents/routines/triage-prompt.md
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,33 @@ consultation. Apply `claude-triaged` + appropriate label. Short
comment only for NONE / first-time authors.

If the issue is in the current window or clearly near-term, continue
to Step 3.
to Step 2.5.

### Step 2.5 — Stack-trace gate (Tier-0 signal)

If the issue body contains a runtime stack trace — lines matching
`at .* \(.*:\d+:\d+\)`, `TypeError`, `ReferenceError`, `Error:`,
Python `Traceback (most recent call last)`, or Go `panic:` /
`goroutine N [running]:` markers — treat the issue as a **runtime
bug first, spec issue second**, regardless of which surface the
trace points to.

1. **Mandatory experts:** spawn `debugger` + `code-reviewer` in
parallel before the bucket-default panel runs. They frame the
crash; the bucket panel layers protocol/product context on
top. Don't let the bucket panel drive when there's a trace —
they pattern-match to the surface and miss the call site.
2. **Identify the crashing frame's repo.** Parse the topmost
non-`node_modules` frame from the trace. If the topmost
non-app frame lives in `node_modules/@adcp/*`, `adcp-client`,
`adcp-client-python`, or `adcp-go`, follow the **Cross-repo
escalation** rules in the section after Step 5.
3. **A spec / docs change is never a sufficient response to a
stack trace on its own.** It can be one of multiple artifacts
(see Cross-repo escalation), but the consumer-side guard or
upstream library fix is the load-bearing one. The
symptom-coherence check in Step 5 is the gate that enforces
this.

### Step 3 — Classify and bucket

Expand All @@ -271,7 +297,10 @@ Pick one classification: **Bug**, **Doc/typo**, **Spec question**,

**Tiebreaker:** if you can't tell Bug from Usage/Spec-question
without running code, classify `needs-info` and ask a concrete repro
question. Never guess.
question. Never guess. **A stack trace is never a spec question** —
it's a Bug, even if the underlying cause is malformed input the spec
doesn't forbid; the spec gap is a follow-up to the runtime fix, not
a substitute for it.

Scope buckets — **label application is strictly gated**:

Expand All @@ -286,6 +315,13 @@ Scope buckets — **label application is strictly gated**:

Common buckets (verify every time):

- **runtime-crash** — overlay bucket: any issue whose body carries
a stack trace, `TypeError` / `ReferenceError` / `panic` /
`Traceback`, or "crashes on X" symptom. Overlays the surface
bucket — a crash in registry-consumer code is still
registry-bucketed for the surface panel, but routes through the
runtime-crash panel **first** (debugger + code-reviewer) before
the surface panel adds context.
- **spec / protocol** — AdCP schemas, task definitions, spec docs.
Non-breaking schema changes (see definition) are PR-able.
- **web / site / docs** — public site (`docs/`, `static/`). Typo
Expand Down Expand Up @@ -316,6 +352,7 @@ relevant files you've read.

| Bucket | Default panel |
|---|---|
| runtime-crash (overlay — applies to any bucket when a stack trace is present) | debugger, code-reviewer, **+ surface-bucket default** |
| spec / protocol | ad-tech-protocol-expert, adtech-product-expert |
| addie | prompt-engineer, user-engagement-expert, adtech-product-expert, internal-tools-strategist (if UI) |
| admin / ops tools | internal-tools-strategist, dx-expert |
Expand All @@ -342,6 +379,19 @@ Combine the experts' reports. Look for:

Never paper over expert disagreement. Surface it.

**Symptom-coherence check (mandatory for any runtime-crash issue —
i.e., when Step 2.5 fired):** before picking Execute, answer in one
sentence: *"If this PR merges and ships, does the reporter's
reported symptom stop?"* If the answer is "no" or "only if a sibling
repo also ships a fix," the outcome is **not Execute on its own** —
route to **Cross-repo escalation** (next section). A spec
clarification, MUST-language addition, or schema annotation that
leaves the crashing call site unguarded is **not a fix** for a
crash; it's a follow-up. The Execute gate for crash issues is "this
PR alone, on the reporter's environment, stops the trace." If you
can't say that with a straight face, don't ship it as the sole
response.

**Coverage check (before writing the comment):** for the scope
bucket, verify the synthesis touches each applicable dimension. If a
dimension is material and missing, loop back with a targeted
Expand All @@ -350,6 +400,7 @@ obvious gap.

| Bucket | Dimensions the synthesis should cover |
|---|---|
| runtime-crash (overlay) | crashing-frame repo (this repo vs sibling SDK), reproducibility / trigger conditions, defensive-shim feasibility in consumer code, upstream-fix scope, severity (single-call vs whole-pipeline abort) |
| spec / protocol | operator reality (what DSPs/SSPs actually do), codebase/schema coherence (existing enums, task boundaries), industry precedent (OpenRTB / VAST / GAM / prebid), migration cost, governance / backwards-compat |
| addie | pull vs. push dynamics, context use, channel choice, drop-off/decay handling, relationship-model fit |
| compliance suite | conformance coverage, test reliability, schema alignment, CI cost |
Expand All @@ -369,6 +420,44 @@ high-scope issues — different instances surface different angles
(operator reality vs. codebase coherence vs. migration). Synthesize
across the 2× outputs. Don't do this for small bugs — overkill.

## Cross-repo escalation — when the crash lives in a sibling repo

Triggers when Step 2.5 fired **and** the topmost non-`node_modules`
frame in the trace points at `adcp-client`, `adcp-client-python`,
`adcp-go`, or any sibling SDK. The routine produces **two
artifacts**, not one — and a spec clarification is at most an
optional third, never a substitute.

1. **Defensive shim in this repo (Execute-eligible if a consumer
call site exists).** Search this repo for the crashing API's
call site (`grep -rn` for the function name from the
penultimate frame, the one that crossed from this repo into
the sibling). If a call site exists in `server/`, `static/`,
or tooling, draft a minimal guard PR — coerce, validate, or
try/catch with a logged skip — so this repo's runtime stops
crashing even before the sibling repo ships. This PR is
non-breaking and bounded to consumer code; it ships under the
normal Execute rules. Mark it as a workaround in the PR body
and link the upstream tracker.
2. **Tracked follow-up for the sibling repo.** If the sibling is
in the same org (`adcontextprotocol/*`), add a
`Sibling-repo-fix-needed:` line in the triage comment naming
the repo, the file, and the symptom. Do **not** open the
sibling-repo issue from this routine — it doesn't have the
credentials or the context — surface it for the human to
file. Don't close this repo's issue on shim merge: convert it
to `Blocked-on: <sibling-repo>#<N>` so a future sweep
resurfaces it after the upstream fix lands.
3. **Spec / docs clarification (optional third artifact).** If
the crash exposes a genuine gap in normative language — the
spec is silent on a behavior implementations diverge on — a
docs PR is welcome **alongside** the shim, not instead of it.
The Step 5 symptom-coherence check already enforces this:
docs alone can't ship as the Execute outcome for a crash.

The pattern: **shim now (this repo) + tracker (sibling repo) +
docs (optional)**. Never **docs alone**.

### Step 6 — Comment (only when it adds signal)

Post a comment when:
Expand Down Expand Up @@ -828,10 +917,29 @@ body is in `<<<UNTRUSTED_ISSUE_BODY>>>`.
the issue forward — Execute PR or Flag-for-review per
standard outcome rules.
5. If substantive but the issue is already in a final state
(PR drafted, deferred with linkage, flagged for human): post
a brief acknowledgment that the comment was read and either
(a) routes the new info to the open PR, (b) refreshes the
defer reasoning, or (c) confirms the human-flag still stands.
(PR drafted, deferred with linkage, flagged for human):
**silent by default.** A read-receipt is noise — the issue's
state already reflects the prior decision. Comment **only** when
the new info would materially change the disposition: it
invalidates the prior defer reason, surfaces a new blocker,
reopens a question the prior triage thought was settled, or
asks a direct question the human-flag can't answer alone. In
those cases, treat the comment as a re-trigger and re-run the
relevant experts (rule 3) — don't just acknowledge.

**Anti-patterns — never post these:**
- "Acknowledged — noted." / "Cross-repo trackers noted."
- "Standing by for CI green before merge."
- "Decision noted; this PR stands as documented."
- Any comment whose function is to announce that the routine
read the thread. Reading the thread is invisible work; if
there's nothing to add, leave the silence intact.

The author already sees from the issue state (open PR linked,
deferred label applied, ready-for-human comment posted) that
the routine engaged. A second comment confirming receipt
dilutes the threads where the routine actually has something
to say.
6. Never reply to your own previous comments (workflow filters
most cases, but the routine should also self-check via the
`Triaged by Claude Code` footer). Never reply to bot authors.
Expand Down
Loading
Loading