All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.7.0 (2026-04-09)
- Account management, adcp 3.10 migration, and BDD test infrastructure (#1170) (ccf91eb)
- introduce BDD behavioral test suite (delivery metrics, creative formats) (#1146) (7f0d45a)
- universal request normalization for AdCP backward compatibility (#1175) (1ad11b6)
- add missing AdCP spec fields to UpdateMediaBuyRequest and correct e2e assertions (#1152) (e9a7a67)
- apply SSRF protection to signals agent URL ingestion (F-04) (c18ac11)
- ci e2e port allocation and setting | crypto package update (#1188) (e48edda)
- enforce update budget guardrails and preserve currency in media … (#1140) (1e1aa6d)
- harden login redirect validation and test-auth gate (F-06, F-02) (#1141) (cd56496)
- raise on anomalous empty format responses instead of silent return [] (#1167) (149f58b)
- replace dict subscript with attribute access on FormatId objects (#1166) (80c5776)
- require authenticated principal for task management tools (#1139) (ff1006d)
- resolve CI failures on PR #1143 (5c5f34f)
- use request.script_root for dynamic URL prefixing (#1160) (0b304ed)
- video/display format template appears unselected after saving product (#1168) (9e395c5)
1.6.0 (2026-03-19)
- coerce AnyUrl to str before passing to yarl.URL() (#1106) (#1118) (641ee9e)
- creative agent TextContent fallback for adcp SDK 3.6.0 (#1135) (d83ed14)
- normalize admin UI to canonical /admin routes (0283124)
- persist platform_line_item_ids in execute_approved_media_buy (#1126) (6a9776d)
- remove unauthenticated /init-api-key endpoint and harden control-plane auth (#1103) (3a336ef)
- resolve forked Alembic migration graph and prevent recurrence (#1144) (a4cd866)
- restore pre-#1066 admin routes via flask fallback mount (4b919f3)
- Skip format validation when creative agent returns no formats (#1137) (1173473)
- complete delivery schema extraction from _base.py (#1121) (46624e9)
- Eliminate get_db_session() from business logic — complete repository pattern adoption (#1097) (1965f1d)
- extract shared delivery helpers and migrate all adapters (#1124) (e8a9b8a)
1.5.0 (2026-03-09)
- AdCP v3.6 upgrade — schema migration, auth hardening, repository pattern, multi-tenant isolation (#1071) (3398aab)
- Creative domain completion — v3.6 schema, auth hardening, error propagation, 3300+ tests (#1080) (0cbe97c)
- delivery domain completion + media buy test coverage (v3.6) (#1081) (46db70f)
- Error recovery classification and standard error vocabulary (#1083) (96ed70f)
- Product v3.6 completion — schema extraction, repository pattern, obligation test coverage (#1082) (90e1dfa)
1.4.0 (2026-02-27)
- Add Broadstreet Ads adapter with template support (#1013) (d7db92e)
- implement get_media_buys tool with delivery snapshots (#1063) (0ebcf93)
- Support AdCP v3 structured geo targeting (#1006) (#1024) (ec3939a)
- Add root-level URL fallback for simple creatives (843ab76)
- bump googleads to 49.0.0 and remove GAM_API_VERSION constant (#1070) (f6ce2a9)
- handle FormatId objects in format validation during media buy creation (3e9dcaf)
- improve test harness stability and add real GAM e2e tests (#1062) (52dc231)
- propagate delivery_type in GAM products_map for correct line item type selection (#1058) (ff36add)
- resolve property_ids/property_tags authorization in property discovery (#1054) (a188b6a)
- Unify creative URL extraction and update GAM macro mappings (56cbc6a)
- Unify creative URL extraction and update GAM macro mappings (70b04e2)
- Update vulnerable dependencies (cryptography, pillow) (4ba6c61)
- use attribute access for FormatId in format validation during media buy creation (502f978), closes #1019
- eliminate model_dump antipatterns and migrate to adcp library base classes (#1051) (5e6815f)
- enforce typed model boundaries across serialization and data flow (#1044) (c412ce9)
1.3.1 (2026-02-06)
1.3.0 (2026-02-04)
- Add schema-driven adapter configuration (#1007) (e6324b6)
- Display version in tenant landing page footer (27780c5)
- Display version in tenant landing page footer (37015e6)
- Add audit logging for get_products, update_media_buy, and update_performance_index (9dfd39b)
- Add audit logging for get_products, update_media_buy, and update_performance_index (d563dc8)
- Correct comment to match actual implementation (starts with, not contains) (666f889)
- Improve GAM creative-to-line-item matching for flexible naming templates (126f0dd)
- Improve GAM creative-to-line-item matching for flexible naming templates (7d85208)
- more tests (88b0347)
- mypy (0aeb111)
- preserve format dimensions during media buy approval (1bdc4a7)
- preserve format dimensions during media buy approval (dc2429e)
- Preserve signup flow state through OAuth redirect (7e63052)
- Preserve signup flow state through OAuth redirect (735211d)
- reset tests to main (03e32db)
- tests (491e21e)
- Update organization and repository names in ipr sig workflow (3217152)
- Use dynamic dates in GAM pricing restriction tests (bef48d1)
- Use dynamic dates in pricing integration tests (a89dc8a)
- Add PR naming guideline to CLAUDE.md (34a87be)
1.2.0 (2026-01-29)
- ipr policy should point to prebid.org (1fad905)
- Remove unnecessary trafficker_id requirement from GAM creatives_manager (#975) (87fad8a)
- fix repo loc (03ffce8)
1.1.0 (2026-01-26)
1.0.0 (2026-01-26)
- This updates the AdCP library dependency from 2.14.0 to 3.0.0.
0.9.3 (2026-01-25)
- Handle product.format_ids as dicts in creative validation (#965) (1c760e6)
- ignore url not configured when use mock adapters (#943) (7f55e02)
0.9.2 (2026-01-22)
0.9.1 (2026-01-19)
- Sync custom targeting keys to adapter_config during inventory sync (fa187f9)
- Sync custom targeting keys to adapter_config during inventory sync (d49badc)
0.9.0 (2026-01-16)
- Add role name fallback for tracker detection and fix REDIRECT_URL macro (4054133)
- Add tracker_redirect support with REDIRECTION_URL macro (6b34831)
- Add tracking pixel macro substitution for GAM adapter (a3dd2d1)
- Add isinstance check for list before append in creative_helpers (8b42656)
- Improve click tracker and native creative tracking handling (ade8de4)
- Pass tenant_gemini_key as keyword argument to build_order_name_context (5f4f1f1)
- Restore click tracking URL support via destinationUrl (c3eeab7)
0.8.0 (2026-01-14)
- update to adcp 2.18.0 with new assets field support (6d19499)
- update to adcp 2.18.0 with new assets field support (4c94434)
- Accept Authorization: Bearer header for MCP authentication (#948) (a1ae3ff)
- Fix CI test failures and security vulnerabilities (f1e4c40)
- Improve onboarding experience and resolve first-run issues (#946) (e803e85)
- resolve mypy type errors for adcp 2.18.0 format assets (7d0a021)
- Update adcp to 2.18.0 for assets field support (9693fcc)
- Update adcp to 2.18.0 for assets field support (ebfb27d)
- update tests for adcp 2.18.0 compatibility (0a60085)
- update urllib3 and werkzeug to fix security vulnerabilities (9490db8)
- use dynamic adcp version in e2e tests instead of hardcoded 2.5.0 (ecee6f2)
- rename asset_req to asset_spec for clarity (f15c9ea)
- clarify that repeatable groups were never supported in asset extraction (dbee49e)
0.7.0 (2026-01-08)
- a2a bugs with media buy and media buy delivery (c5325b9)
- a2a bugs with media buy and media buy delivery (ea98357)
- Add security audit to CI and upgrade fastmcp (#941) (ec592ed)
- Include empty pricing_options in serialization for anonymous users (#939) (4e57265)
- Set default role to admin for SSO auto-provisioned users (#937) (e64440c)
0.6.0 (2026-01-05)
- Add GAM placement targeting for creative-level targeting (adcp#208) (#915) (b2f9585)
- apply suggestions (362513f)
- apply suggestions (9b75990)
- improve e2e test for a2a push notification delivery v2 (f9008b9)
- Make SSO optional for multi-tenant deployments (#931) (8ac80a1)
- migrate push notification sending for media_buy (6fa4cda)
- undo unrelated changes (9a7e45f)
- update webhook delivery function to support both mcp and a2a payloads (7f41d98)
- update webhook delivery function to support both mcp and a2a payloads (27b2eaa)
- wip (0713543)
- adcp version; media buy status change; media buy delivery look up (41dd1dc)
- Add Fly.io header middleware for proper HTTPS detection (#920) (a115fc9)
- Add multi-admin domain support for cross-domain OAuth (#919) (f373ebb)
- Clear session before OAuth to prevent stale cookie conflicts (#924) (addab84)
- Correct middleware ordering for Fly.io header processing (#921) (c4d373d)
- e2e webhook delivery check (1599266)
- Explicitly save session on OAuth redirect to persist state cookie (#928) (e78ae67)
- Fix list_creatives enum serialization and invalid creative count (#930) (3d9c643)
- improve tests (676690b)
- integration test v2 (756d6d4)
- integrations (8050605)
- link validator check for cyclic bugs (91fe6f7)
- mypy failures (79de36d)
- Preserve tenant context on OAuth callback errors (#918) (c82760b)
- Preserve X-Forwarded-Proto from Fly.io through nginx (#922) (5eddd36)
- Prevent redirect loop for super admins accessing /admin/ (#929) (95d7cac)
- Restore deleted migration to fix Fly.io deploy (#914) (2cfbccc)
- Reuse unwrapped brand_manifest for policy checks (#932) (#935) (03ba408)
- Route multi-tenant subdomain requests to tenant-specific login (#916) (c0152db)
- Run database migrations automatically on docker compose up (#933) (c5c73a8)
- run_all_tests ci (3a1b1d2)
- Show full values in Pydantic extra_forbidden errors (#912) (165d985)
- Task and TaskStatusUpdate serializations (a8e7792)
- Use global OAuth as fallback, not setup mode for multi-tenant (#917) (ef63349)
0.5.0 (2026-01-01)
- Add dynamic per-tenant OIDC/SSO authentication (#903) (ed05a41)
- Add format template picker UI for AdCP 2.5 parameterized formats (#782) (#882) (532657e)
- Add vidium MCP server to local configuration (#904) (ebcfdd1)
- Convert advertising channel from single to multi-select (#897) (a1aa8e4)
- Display sales agent version in agent card (#902) (663702b)
- Implement AI product ranking with simplified catalog (#906) (d59e76b)
- Simplify user authorization with User records as primary auth method (#907) (504b489)
- Simplify Docker Compose setup to fix mount errors (#910) (723b0b2)
- Single-tenant deployment and SSO configuration (#908) (e725781)
- src.core.format_spec_cache undefined (#901) (e3e701c)
- Update docs links and fix alembic migrations (#911) (e498a43)
- Use pull_request_target for PR title check on fork PRs (#909) (bb9817d)
0.4.1 (2025-12-29)
- Add Fly Managed Postgres option to deployment guide (#894) (6bf6ce9)
- Fix GCP Cloud Run deployment walkthrough (#896) (10a9674)
0.4.0 (2025-12-28)
- Add GAM currency detection and Budget Controls integration (#887) (f7539e3)
- Consolidate Docker entrypoint to use Python directly (#880) (a12b19d)
- Default to production setup, make demo mode opt-in (#883) (580bcfe)
- Restrict currency selection to GAM-supported currencies (#890) (1076539)
0.3.0 (2025-12-26)
- Add Docker Hub as secondary container registry (#878) (71e7d2f)
- Enhance AdCP 2.5 creative rotation weight support with improved error handling (#876) (d226b58)
0.2.1 (2025-12-25)
0.2.0 (2025-12-24)
- Improve Docker quickstart - ARM64 support, better docs, fail-fast validation (#859) (ba3f81a)
- Improve single-tenant mode UX and Docker quickstart (#868) (8559f8d)
- Pydantic AI multi-provider integration with admin UI (#860) (1ff0366)
- show access token directly in advertisers table (#867) (ceac7b0)
- enforce tenant human_review_required for media buy approval (#866) (92c562e)
- Fix/format ids type handling for the format_ids in the products table (#864) (bd65beb)
- Update release-please to use manifest mode (v4 config) (925a1b2)
- Add Conventional Commits guidance to CLAUDE.md (4578eab)
- Add platform-specific deployment guides and Cloud SQL improvements (#869) (38626f8)
- Update quickstart to use published Docker images (#857) (435d6d2)
- Update quickstart to use published Docker images (#857) (#861) (7db5c94)
- Media buy creation now FAILS when creatives are missing required fields (URL, dimensions) instead of silently skipping them.
- Add AdCP 2.5 extension to A2A agent card (#783) (a979cb6)
- add auth_header and timeout columns to creative_agents table (#714) (64eecd8)
- add background scheduler to auto-transition media buy statuses based on flight dates (4af1343)
- add background scheduler to auto-transition media buy statuses based on flight dates (d6f8d78)
- Add brand manifest policy system for flexible product discovery (#663) (1c00e1d)
- Add brand manifest policy UI dropdown in Admin (#726) (55d2414)
- add commitizen for automated version management (#666) (4c49051)
- Add creative format size filtering with inventory-based suggestions (#690) (ced6466)
- add date range validation and testing for validation (9706fd1)
- Add hierarchical product picker with search and caching (#707) (6a6c23d)
- Add inventory profiles for reusable inventory configuration (#722) (ceb2363)
- Add manual delivery webhook trigger to admin UI (f91d55e)
- Add manual delivery webhook trigger to admin UI (e95d6f4)
- Add real-time custom targeting values endpoint and visual selector widget (#678) (ebd89b9)
- Add signals agent registry with unified MCP client (#621) (9a15431)
- alphabetize targeting keys/values and show display names (#687) (c6be06d)
- Auto-download AdCP schemas on workspace startup (#616) (94c3876)
- calculate clicks and ctr (ebe7d66)
- enforce strict AdCP v1 spec compliance for Creative model (BREAKING CHANGE) (#706) (ff1cbc4)
- improve product workflow - always show formats and descriptive targeting values (#688) (4530f25)
- Publish Docker images on release (#855) (47e88e3)
- refactor and add integration and e2e tests for delivery metrics webhooks (3df36de)
- refactor webhook deliveries (f1302ba)
- Remove Scope3 dependencies - make codebase vendor-neutral (#668) (de503bf)
- Simplify targeting selector to match existing UI patterns (#679) (ce76f8e)
- support application level context (#735) (ea6891d)
- Update budget handling to match AdCP v2.2.0 specification (#635) (0a9dd4a)
- 'Select All' buttons in Create Product page by fixing JS scope (5f5553a)
- 'Select All' buttons in Create Product page by fixing JS scope (6bcca14)
- Achieve 100% mypy compliance in src/ directory - 881 errors to 0 (#662) (d7f4711)
- ad unit format button, targeting selector crash, and service account auth (#723) (83bd497)
- AdCP responses now exclude None values in JSON serialization (#642) (c3fa69a)
- AdCP responses now properly omit null/empty optional fields (#638) (ab7c4cd)
- Add /admin prefix to OAuth redirect URI for nginx routing (#651) (a95a534)
- Add content hash verification to prevent meta file noise (#659) (20b0a16)
- add e2e tests for get_media_buy_delivery direct request (1263a81)
- Add logging + fix targeting browser sync button (#677) (bdf19cc)
- Add missing /api/tenant/<tenant_id>/products endpoint (9dc4bdc)
- Add missing activity feed and audit logs to manual approval path (#729) (114778c)
- Add missing adapter_type to SyncJob creation (fb0fb79)
- Add null safety checks for audience.type and audience.segment_type (#682) (b8e6e77)
- add pricing to delivery (78eab1e)
- Add timeout to discover_ad_units to prevent stuck syncs (56457ad)
- add type field to audience segments API for filtering (28302f2)
- add type field to audience segments API for filtering (474df9a)
- advertiser creation (4e9e32d)
- advertiser creation (d323477)
- apply type filter when fetching inventory by IDs (3fc3ded)
- approval flow (ee2e90a)
- attempt to fix e2e test in ci (8c269a8)
- Auto-create default principal and improve setup output (#849) (0c222f3)
- Auto-create user records for authorized emails on tenant login (#492) (454eb8f)
- Check super admin status before signup flow redirect (#674) (e5dfb8d)
- Clean up smoke tests and resolve warnings (#629) (73cbc99)
- Complete /admin prefix handling for all API calls (#736) (4c20c9c)
- Convert FormatReference to FormatId in MediaPackage reconstruction (#656) (7c24705)
- Convert summary dict to JSON string in sync completion (3318ee0)
- convert to utc (bcb54f0)
- Correct AdManagerClient signature for service account auth (#571) (bcb1686), closes #570
- Correct API field name mismatch in targeting selector widget (#681) (9573749)
- correct creative agent URL typo (creatives → creative) (#844) (f29659b)
- correct inventory search endpoint and parameters in unified view (201fd4f)
- correct inventory search endpoint and parameters in unified view (5532adb)
- Correct tenant context ordering in update_media_buy (#773) (2c2d9b1)
- Create mock properties only for mock adapters (#854) (efdcfca)
- creative agent url check; allow to fallback to /mcp when creating mcp client (09bc1ac)
- creative agent url check; allow to fallback to /mcp when creating mcp client (6bf221f)
- creative approval/rejection webhook delivery (9062449)
- Creative management - reject invalid creatives (#460) (1540de3)
- Default publisher_properties to 'all' when not specified (#759) (690f2b1)
- display and save custom targeting keys in product inventory (#692) (991656b)
- Docker test cleanup to prevent 100GB+ resource accumulation (9036cae)
- Docker test cleanup to prevent 100GB+ resource accumulation (9ed12fd)
- e2e test context initialization (0c463a1)
- e2e test for media buy deliveries webhooks (64d9529)
- edit configuration feature (fb61f20)
- Enable all 189 integration_v2 tests - achieve 100% coverage goal (#626) (6377462)
- enforce brand_manifest_policy in get_products (#731) (075e681)
- Ensure Package objects always have valid status (#755) (757c0d3)
- ensure User record creation during OAuth tenant selection (#701) (be22ffb)
- Exclude null values from list_authorized_properties response (#647) (5afb6b5)
- existing unit tests (60a1961)
- fetch inventory by IDs to bypass 500-item API limit (c1e197e)
- fetch specific ad units by ID for placement size extraction (85f792d)
- file lint error (#625) (2fec26e)
- flush deleted inventory mappings before recreating (c83e34c)
- GAM adapter (f4f0df1)
- GAM adpaters and other logic changes including bumping adcp client to 2.5.5 (8367e0a)
- GAM advertiser search and pagination with Select2 UI (#710) (792d4ae)
- GAM product placements not saving when line_item_type absent (#691) (eb66e33)
- GAM test connection error fix (78e88ae)
- GAM test error fix (48b07a9)
- Handle /admin prefix in login redirects and API calls (#733) (15ab582)
- Handle CreateMediaBuyError response in approval and main flows (#745) (574943b)
- Handle unrestricted agents in property discovery (no property_ids = all properties) (#750) (136575b)
- Implement creative assignment in update_media_buy (#560) (99cdcdc)
- implement missing naming template preview logic (39eafff)
- implement missing naming template preview logic (66fc55d)
- Implement missing update_media_buy field persistence (#749) (f67a304)
- Import get_testing_context in list_authorized_properties (#632) (6612c7d)
- improve creative status handling and dashboard visibility (#711) (539e1bb)
- improve inventory browser UX and fix search lag (#709) (0d09f1b)
- include ALL statuses when fetching inventory names for existing products (2a61600)
- Include service_account_email in adapter_config dict for template (#517) (c36aef6)
- increase sync_id length from 50 to 100 (cd89098)
- increase sync_id length from 50 to 100 (6ae87ff)
- Integration tests, mypy errors, and AdCP schema compliance (#633) (77c4da6)
- Integration tests, mypy errors, and deprecation warnings (#628) (be52151)
- Integration tests, mypy errors, and test infrastructure improvements (#631) (ca4c184)
- inventory profile save URL and property_mode handling (40f192a)
- inventory profile save URL and property_mode handling (7440350)
- inventory sync (d300258)
- Inventory sync JavaScript errors (0d2ad1f)
- inventory sync status now checks GAMInventory table instead of Products (#708) (193e87d)
- lint errors (dff427a)
- list_tasks query using non-existent WorkflowStep.tenant_id (#822) (c17abcb)
- Load pricing_options when querying products (#413) (a87c69a)
- make media_buy_ids optional in get_media_buy_delivery per AdCP spec (#704) (5c69013)
- media buy tests creation (4045386)
- media buys & creatives (58c4f45)
- mypy (77b5ecc)
- nest inventory picker modal to resolve search input focus issue (a14c47b)
- nest inventory picker modal to resolve search input focus issue (f888fe9)
- Normalize agent URL variations for consistent validation (#497) (9bef942)
- parse and apply custom targeting from product forms to GAM line items (#686) (a1132ae)
- pass DELIVERY_WEBhOOK_INTERVAL when running e2e tests in ci/cd (07f3eee)
- persist targeting and placement selections in product editor (#689) (ebbecf0)
- populate custom targeting keys when editing products (#693) (88f0b9e)
- prevent duplicate IDs in placement display after removal (#696) (87b0eac)
- Prevent duplicate tenant display when user has both domain and email access (#660) (92ca049)
- product editor bugs - JSON parsing, text color, selection preservation (#694) (50765cf)
- rebase (581b18b)
- Reduce skipped tests from 323 to ~97 (70% improvement) (#669) (c48f978)
- rejection (79cb754)
- remove /a2a suffix from A2A endpoint URLs and add name field to configs (2b036c6)
- remove /a2a suffix from A2A endpoint URLs and add name field to configs (13914b8)
- remove 97% of type: ignore comments and fix 169 mypy errors (#820) (#823) (1175c63)
- Remove auto-restart of delivery simulators on server boot (#646) (52c2378)
- remove dead API docs link and fix testing docs path (#700) (9fd959e), closes #676
- Remove fake media_buy_id from pending/async responses in mock adapter (#658) (dc2a2ba)
- remove inventory sync requirement for mock adapter (#719) (4268b2e)
- Remove non-existent fields from SyncCreativesResponse (9bf3da7)
- Remove non-existent fields from SyncCreativesResponse (453c329)
- Remove non-existent impressions field from AdCPPackageUpdate (#500) (404c653)
- Remove non-spec tags field from ListAuthorizedPropertiesResponse (#643) (a38b3d7)
- Remove stale ui-test-assistant MCP server configuration (#851) (0e7cf9a)
- remove top-level budget requirement from create_media_buy (#725) (4474de3)
- Replace progress_data with progress in SyncJob (f4008f4)
- require authentication for sync_creatives and update_media_buy (#721) (defa383)
- Resolve GAM inventory sync and targeting data loading issues (#675) (ca31c6a)
- Resolve product creation and format URL issues (#756) (d99a6f8)
- Restore accidentally deleted commitizen configuration files (c92075c)
- Restore brand manifest policy migrations and merge with signals agent (e30c106)
- restore unrelative changes (8c159e6)
- Return human-readable text in MCP protocol messages (#644) (3bb9bce)
- Route external domains to tenant login instead of signup (#661) (b194b83)
- sales agent logic (0a51476)
- sanitize tenant ID in GCP service account creation (b4c3bbc)
- sanitize tenant ID in GCP service account creation (6774587)
- Set session role for super admin OAuth login (#654) (505b24f)
- set tenant context before fetching delivery metrics (1042274)
- Set tenant context when x-adcp-tenant header provides direct tenant_id (#467) (20b3f9c)
- show both name and ID for placements consistently (#695) (52caddd)
- signals agent test endpoint async handling (#718) (e1c5d72)
- Support ListCreativesRequest convenience fields with adcp 2.9.0 (#770) (1bd57f0)
- syntax (af504a6)
- Targeting browser, product page auth, UI repositioning + format conversion tests (#683) (d363627)
- targeting keys errors in browser and product pages (#685) (7fc3603)
- test (62c2fe0)
- test delivery webhook sends for fresh data (b35457f)
- test scase in test_format_conversion_approval (3060a24)
- tests (5d5347c)
- tests (1b1ce8e)
- tests (f70f684)
- tests (c966e43)
- try to pass delivery interval through docker-compose.override.yml for e2e tests (c830255)
- types (d545f14)
- typo in integration test (d09125e)
- Unskip 3 integration tests and reduce mypy errors by 330 (#627) (37cc165)
- Update DNS widget to use A record pointing to Approximated proxy IP (#636) (3291ae6)
- Update tenant selector template to work with dictionary objects (#652) (aa612a3)
- Use content-based hashing for schema sync to avoid metadata noise (#649) (5625955)
- use correct field name inventory_metadata in IDs path (4e7d7a2)
- Use SQLAlchemy event listener for statement_timeout with PgBouncer (#641) (bde8186)
- wrap service account credentials with GoogleCredentialsClient (#727) (9d21709)
- clarify GAM setup with three clear paths and environment validation (#847) (6a2e951)
- document PYTHONPATH requirement for Docker hot reload (#846) (03878f4)
- Changeset system for automated version management
- CI workflows to enforce changeset requirements on PRs
- Automated version bump PR creation when changesets are merged
0.1.0 - 2025-01-29
Initial release of the Prebid Sales Agent reference implementation.
- MCP server implementation with AdCP v2.3 support
- A2A (Agent-to-Agent) protocol support
- Multi-tenant architecture with PostgreSQL
- Google Ad Manager (GAM) adapter
- Mock ad server adapter for testing
- Admin UI with Google OAuth authentication
- Comprehensive testing backend with dry-run support
- Real-time activity dashboard with SSE
- Workflow management system
- Creative management and approval workflows
- Audit logging
- Docker deployment support
- Extensive documentation