Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
306 commits
Select commit Hold shift + click to select a range
218aa97
refactor: add LazyTenantContext for deferred DB loading
KonstantinMirin Feb 24, 2026
e7daf8c
refactor: remove ContextVar reads from all _impl business logic funct…
KonstantinMirin Feb 24, 2026
0899a6f
fix: resolve integration test regressions from #1050 identity migration
KonstantinMirin Feb 24, 2026
8962835
fix: resolve UI and e2e test infrastructure bugs (6 tests)
KonstantinMirin Feb 24, 2026
c60dbbb
refactor: consolidate test runners into single JSON-reporting script
KonstantinMirin Feb 24, 2026
ee9f6e3
fix: resolve 6 test failures across e2e and UI suites
KonstantinMirin Feb 24, 2026
39e4fc3
fix: resolve 8 test failures — MCP Accept header, property tags, form…
KonstantinMirin Feb 24, 2026
bee4a86
fix: resolve 7 test failures — MCP client protocol, pricing format, a…
KonstantinMirin Feb 24, 2026
44ebc97
fix: resolve 6 test suite health bugs (unawaited coroutines, stale mo…
KonstantinMirin Feb 24, 2026
aef2001
fix: resolve update_media_buy workflow step bugs and stale xfail (#1041)
KonstantinMirin Feb 25, 2026
4859915
chore: add pytest filterwarnings to suppress third-party deprecation …
KonstantinMirin Feb 25, 2026
05392ed
chore: upgrade httplib2 0.31.0 → 0.31.2 to resolve pyparsing deprecat…
KonstantinMirin Feb 25, 2026
58fe4b4
refactor: migrate jsonschema.RefResolver to referencing.Registry
KonstantinMirin Feb 25, 2026
9765c1c
refactor: remove EOL google-generativeai dependency
KonstantinMirin Feb 25, 2026
bd78482
fix: prevent FastMCP from overriding pytest filterwarnings
KonstantinMirin Feb 25, 2026
aefd500
fix: close unclosed async resources in test fixtures
KonstantinMirin Feb 25, 2026
0bdd6a1
refactor: replace deprecated starlette WSGIMiddleware with a2wsgi
KonstantinMirin Feb 25, 2026
cd491af
test: add list_creative_formats and list_authorized_properties e2e tests
KonstantinMirin Feb 25, 2026
1eaa380
test: add multi-tenant isolation e2e tests
KonstantinMirin Feb 25, 2026
bcf326a
test: add coverage for update_performance_index and get_adcp_capabili…
KonstantinMirin Feb 25, 2026
969173c
perf: mock time.sleep in slow unit tests (44s -> 7s)
KonstantinMirin Feb 25, 2026
0e98da7
fix: suppress asyncio ResourceWarnings in pytest filterwarnings
KonstantinMirin Feb 25, 2026
3027e34
fix: close HTTPServer sockets in e2e webhook test fixtures
KonstantinMirin Feb 25, 2026
cef3c8d
fix: propagate context parameter in list_authorized_properties MCP wr…
KonstantinMirin Feb 25, 2026
8826e48
perf: parallelize run_all_tests.sh suites for ~2x speedup
KonstantinMirin Feb 25, 2026
80438e3
refactor: replace bash test parallelism with tox + coverage
KonstantinMirin Feb 25, 2026
3cad964
fix: use direct script call instead of process substitution in run_al…
KonstantinMirin Feb 25, 2026
5e9787f
chore: prune test-results to keep only the last 10 runs
KonstantinMirin Feb 25, 2026
5c3479a
docs: update testing docs for tox-based test runner
KonstantinMirin Feb 25, 2026
cd00579
Merge remote-tracking branch 'origin/main' into KonstantinMirin/refac…
KonstantinMirin Feb 25, 2026
93d05f0
fix: resolve mypy errors and security audit warning
KonstantinMirin Feb 25, 2026
7307ebc
fix: increase step_id entropy to prevent flaky uniqueness test
KonstantinMirin Feb 25, 2026
b01a502
fix: proxy nginx /health to upstream instead of returning 200 directly
KonstantinMirin Feb 25, 2026
146bc3f
refactor: simplify nginx configs with catch-all pattern for single up…
KonstantinMirin Feb 25, 2026
a05273e
chore: upgrade adcp dependency from 3.2.0 to 3.6.0
KonstantinMirin Feb 25, 2026
9623940
refactor: drop brand_manifest backward compat, enforce brand (BrandRe…
KonstantinMirin Feb 25, 2026
e16fdbe
fix: replace request.brand_manifest with request.brand across source …
KonstantinMirin Feb 26, 2026
81e6421
fix: migrate test suite from brand_manifest to brand (BrandReference)
KonstantinMirin Feb 26, 2026
d9474f6
fix: relax A2A get_products validation to allow filter-only queries
KonstantinMirin Feb 26, 2026
46b1145
fix: update tests for adcp 3.6.0 cursor-based pagination and Reportin…
KonstantinMirin Feb 26, 2026
41b6f7d
fix: sync local schema cache with adcp 3.6.0 field names
KonstantinMirin Feb 26, 2026
1b04cdf
test: add regression tests for brand_manifest to brand migration
KonstantinMirin Feb 26, 2026
91a91de
fix: add 6 adcp 3.6.0 Product fields to database model and migration
KonstantinMirin Feb 26, 2026
14b6c40
feat: add entity-scoped formulas, skills, and migration documentation
KonstantinMirin Feb 26, 2026
706f1a9
refactor: add 3 structural guard tests for architecture enforcement
KonstantinMirin Feb 26, 2026
fedd9f0
docs: add structural guards reference and update critical patterns fo…
KonstantinMirin Feb 26, 2026
22a6db5
fix: suppress OTEL noise in tests and fix async event loop test
KonstantinMirin Feb 26, 2026
ec9e720
test: add canonical delivery entity test suite (26 real, 33 stubs)
KonstantinMirin Feb 26, 2026
414078a
test: add creative and media-buy entity test suites (surface map)
KonstantinMirin Feb 26, 2026
f938c43
test: expand creative entity test suite with additional stubs
KonstantinMirin Feb 26, 2026
f45abd1
feat: add /verify-spec skill for spec traceability before remediation
KonstantinMirin Feb 26, 2026
779cf0f
test: add spec traceability links to delivery test suite
KonstantinMirin Feb 26, 2026
2d2aa3f
test: add spec traceability links to creative test suite
KonstantinMirin Feb 26, 2026
1b38283
test: add spec traceability links to media-buy test suite
KonstantinMirin Feb 26, 2026
7ee4036
test: reclassify buyer_campaign_ref roundtrip as CONFIRMED
KonstantinMirin Feb 26, 2026
a1bc028
test: reclassify remaining SPEC_AMBIGUOUS as CONFIRMED in media-buy
KonstantinMirin Feb 26, 2026
5300ceb
test: reclassify partial ID resolution as CONTRADICTS in delivery
KonstantinMirin Feb 26, 2026
92c8eb9
fix: remediate delivery test suite (16 stubs -> real tests)
KonstantinMirin Feb 26, 2026
7861c9b
fix: remediate media-buy test suite (10 stubs -> real tests)
KonstantinMirin Feb 26, 2026
0c20671
fix: align creative test suites with listing Creative base class
KonstantinMirin Feb 26, 2026
1504f64
fix: align existing tests with UpdateMediaBuyRequest XOR validator
KonstantinMirin Feb 26, 2026
296f8bb
fix: remediate delivery test suite batch 2 (20 stubs -> real tests)
KonstantinMirin Feb 26, 2026
1f33d12
fix: remediate creative test suite batch 2 (18 stubs -> real tests)
KonstantinMirin Feb 26, 2026
0ed47ff
fix: remediate media-buy test suite batch 2 (13 stubs -> real tests)
KonstantinMirin Feb 26, 2026
4919ab3
fix: enforce iron rule in remediate formula — stubs are absolute truth
KonstantinMirin Feb 26, 2026
bbb9523
fix: remediate creative test suite batch 3 (15 stubs -> real tests)
KonstantinMirin Feb 26, 2026
d1917ca
fix: remediate media-buy test suite batch 3 (15 stubs -> real tests)
KonstantinMirin Feb 26, 2026
b67e3c7
fix: remediate creative test suite batch 4 (15 stubs -> real tests)
KonstantinMirin Feb 26, 2026
9c00530
fix: remediate media-buy test suite batch 4 (16 stubs -> real tests)
KonstantinMirin Feb 26, 2026
886e8fc
fix: remediate creative test suite batch 5 — final (17 stubs -> real …
KonstantinMirin Feb 26, 2026
9a63b3d
fix: remediate media-buy test suite batch 5 — final (22 stubs -> real…
KonstantinMirin Feb 26, 2026
7c22784
fix: add regression tests for #1039 timezone mismatch in update_media…
KonstantinMirin Feb 26, 2026
60a07f8
fix: replace invalid brand_manifest_policy="flexible" with "public" i…
KonstantinMirin Feb 26, 2026
6afb64e
fix: resolve 500 error on New Product page (#1067)
KonstantinMirin Feb 26, 2026
d9512a6
fix: forward buyer_campaign_ref and ext through transport boundary wr…
KonstantinMirin Feb 26, 2026
d190d9f
fix: address code review findings — forward reporting_webhook, streng…
KonstantinMirin Feb 26, 2026
1262bf5
chore: add integration-from-stub formula for Phase B1
KonstantinMirin Feb 26, 2026
0f97730
chore: add /integrate skill for integration-from-stub formula
KonstantinMirin Feb 26, 2026
932667d
test: add 10 integration tests for creative entity (v3.6 migration)
KonstantinMirin Feb 26, 2026
86864a8
test: add delivery integration tests (11 tests, 0 xfails resolved)
KonstantinMirin Feb 26, 2026
1386354
test: add 15 integration tests for media-buy entity (10 xfails resolved)
KonstantinMirin Feb 26, 2026
fb703b7
fix: update media buy status to active after successful adapter execu…
KonstantinMirin Feb 26, 2026
bfbf084
fix: composite PK for creatives table enabling cross-principal isolation
KonstantinMirin Feb 26, 2026
7178257
fix: migrate _get_media_buys_impl to ResolvedIdentity pattern (Patter…
KonstantinMirin Feb 26, 2026
ae4d992
fix: update agent-produced tests for v3.6 compatibility
KonstantinMirin Feb 26, 2026
7b7fbb3
fix: handle RootModel-wrapped StatusFilter in delivery status resolution
KonstantinMirin Feb 26, 2026
d6608a5
fix: creative_assignments replace-all semantics in update_media_buy
KonstantinMirin Feb 26, 2026
d81576a
fix: add placement data to sample_products fixture for placement vali…
KonstantinMirin Feb 26, 2026
e5fd42a
test: reconcile integration test xfails after Phase C2 fixes
KonstantinMirin Feb 27, 2026
081000d
fix: Docker-verified integration test fixes for Phase C2
KonstantinMirin Feb 27, 2026
ee411bc
feat: add repository pattern structural guard
KonstantinMirin Feb 27, 2026
5a8bf62
fix: register _get_media_buys_impl in structural guards and fix docs …
KonstantinMirin Feb 27, 2026
91c439c
fix: add tenant_id filter to Creative/CreativeReview queries (cross-t…
KonstantinMirin Feb 27, 2026
a1f315d
fix: add tenant_id filters to 13 cross-tenant query leaks
KonstantinMirin Feb 27, 2026
48f119e
feat: add structural guard — no model_dump() in _impl functions
KonstantinMirin Feb 27, 2026
8b9a30b
feat: add MediaBuyRepository + UoW with tenant-scoped queries
KonstantinMirin Feb 27, 2026
4d52188
fix: add tenant_id filter to creative review queries (cross-tenant is…
KonstantinMirin Feb 27, 2026
c8e7cc0
fix: supply principal_id in creative_assignment construction sites
KonstantinMirin Feb 27, 2026
09a930a
fix: update tests for adcp v3.6 schema changes (signals, assets, deli…
KonstantinMirin Feb 27, 2026
80432e8
fix: resolve collateral test failures from adcp v3.6 migration
KonstantinMirin Feb 27, 2026
ae1bddd
fix: add regression test for scheduler status_filter including comple…
KonstantinMirin Feb 27, 2026
518a189
fix: add regression tests for tenant_id filter in creative review que…
KonstantinMirin Feb 27, 2026
89f86a0
fix: add regression tests for principal_id in creative assignment cre…
KonstantinMirin Feb 27, 2026
72bd1e1
Merge branch 'worktree-agent-a6a2d3cf' into KonstantinMirin/adcp-v3.6…
KonstantinMirin Feb 27, 2026
1ef821f
Merge branch 'worktree-agent-a763f754' into KonstantinMirin/adcp-v3.6…
KonstantinMirin Feb 27, 2026
d9bd60a
Merge branch 'worktree-agent-aa2e955a' into KonstantinMirin/adcp-v3.6…
KonstantinMirin Feb 27, 2026
e7cf44c
Merge branch 'worktree-agent-ac8726fe' into KonstantinMirin/adcp-v3.6…
KonstantinMirin Feb 27, 2026
ca69cfa
fix: add known schema-library mismatch allowlist and fix migration
KonstantinMirin Feb 27, 2026
586c725
chore: improve formulas, test runner, and add migration guard
KonstantinMirin Feb 27, 2026
7e7dbfa
fix: align 6 remaining test failures with adcp 3.6.0 behavior
KonstantinMirin Feb 27, 2026
f019f61
chore: add executor agent, agent-db skill, and update team command
KonstantinMirin Feb 27, 2026
94b84b5
fix: enforce integration tests in executor agent, fix asset_type Lite…
KonstantinMirin Feb 27, 2026
1b4fef5
chore: executor agent requires uv sync and baseline tests before changes
KonstantinMirin Feb 27, 2026
a4fb74e
refactor: Phase 2 repository migration — media_buy_list, delivery, ad…
KonstantinMirin Feb 27, 2026
79b6f1c
chore: add clean slate principle to executor agent
KonstantinMirin Feb 27, 2026
93a7ccc
Merge remote-tracking branch 'origin/main' into KonstantinMirin/refac…
KonstantinMirin Feb 27, 2026
29493ae
chore: add baseline and verify-no-regression atoms to molecular formulas
KonstantinMirin Feb 27, 2026
7a7ff42
refactor: add repository write methods + migrate admin blueprint queries
KonstantinMirin Feb 27, 2026
22363dd
refactor: migrate approve_media_buy raw select(MediaBuy) to repository
KonstantinMirin Feb 27, 2026
f58ad4b
fix: delegate A2A tenant detection to resolve_identity() instead of i…
KonstantinMirin Feb 27, 2026
daf7b5a
fix: remove redundant DB queries in REST _resolve_auth()
KonstantinMirin Feb 27, 2026
0f99cae
chore: add test level selection and mutation verification to bug-tria…
KonstantinMirin Feb 27, 2026
17bcf8a
chore: apply ruff formatting to files updated in main merge
KonstantinMirin Feb 27, 2026
e7df3c9
fix: repair integration_v2 A2A tests with fixture-derived mock identity
KonstantinMirin Feb 27, 2026
caca611
refactor: Wave 2 — migrate create/update _impl to UoW + adapter Media…
KonstantinMirin Feb 27, 2026
952776c
refactor: add structural guard — no raw select(MediaPackage) outside …
KonstantinMirin Feb 27, 2026
fff75a2
feat: add property_targeting_allowed to Product model and conversion
KonstantinMirin Feb 27, 2026
70ad857
fix: address code review findings for property_targeting_allowed
KonstantinMirin Feb 27, 2026
687d68e
chore: add CONDUCTOR_PORT isolation for executor agents and manual wo…
KonstantinMirin Feb 27, 2026
8d6a9f1
fix: resolve A2A identity once at transport boundary, not per-handler
KonstantinMirin Feb 27, 2026
c9538ed
refactor: align Product.channels to MediaChannel enum per AdCP spec
KonstantinMirin Feb 27, 2026
6ea8679
feat: add property list resolver with caching for buyer property lists
KonstantinMirin Feb 27, 2026
c9fb156
fix: remove dead fields from AuthContext and pass pre-extracted auth_…
KonstantinMirin Feb 27, 2026
71eeae6
fix: extract testing context from A2A request headers
KonstantinMirin Feb 27, 2026
fb98760
test: add 30 v3.6 Product field contract tests
KonstantinMirin Feb 27, 2026
c9da6e4
feat: add property_list filtering to get_products
KonstantinMirin Feb 27, 2026
8191c36
feat: add obligation coverage reconciliation guard
KonstantinMirin Feb 27, 2026
29d257d
fix: restore get_media_buys A2A skill and fix e2e test failures
KonstantinMirin Feb 27, 2026
b50f951
refactor: add /reclassify skill with deterministic obligation layer c…
KonstantinMirin Feb 28, 2026
deb9896
refactor: migrate MCP auth to unified resolve_identity() path
KonstantinMirin Feb 28, 2026
eae35c0
refactor: reclassify 69 more obligations via LLM review of borderline…
KonstantinMirin Feb 28, 2026
3632c24
fix: pass tenant ORM model directly instead of partial dict in media_…
KonstantinMirin Feb 28, 2026
5204602
refactor: use AdCPValidationError for A2A get_products search criteri…
KonstantinMirin Feb 28, 2026
8ec62e3
feat: implement delete_missing=True archive logic in _sync_creatives_…
KonstantinMirin Feb 28, 2026
b2c9f5b
feat: add empty update validation for update_media_buy (BR-RULE-022)
KonstantinMirin Feb 28, 2026
901b6e2
docs: add Transport Parity Invariant to architecture docs and formulas
KonstantinMirin Feb 28, 2026
eba5d24
fix: skip DB writes in creative sync when dry_run=True
KonstantinMirin Feb 28, 2026
281e7d7
fix: skip adapter call in _create_media_buy_impl when dry_run=True
KonstantinMirin Feb 28, 2026
8ad8e26
feat: add buyer_ref uniqueness validation in create_media_buy (BR-RUL…
KonstantinMirin Feb 28, 2026
60163ee
feat: add creative format vs product format_ids validation in create_…
KonstantinMirin Feb 28, 2026
6d34171
refactor: eliminate double header parsing in A2A middleware
KonstantinMirin Feb 28, 2026
3e4fa92
refactor: remove ContextVar mutation from LazyTenantContext._resolve()
KonstantinMirin Feb 28, 2026
57268df
refactor: remove dead get_principal_from_context from auth_utils.py
KonstantinMirin Feb 28, 2026
b04db98
refactor: extract _get_header_case_insensitive to shared http_utils m…
KonstantinMirin Feb 28, 2026
6282c64
fix: reorder middleware so auth_context runs before a2a_auth
KonstantinMirin Feb 28, 2026
6b29969
refactor: replace 3 auth middlewares with single pure ASGI UnifiedAut…
KonstantinMirin Feb 28, 2026
8dbc0af
refactor: wire A2A CallContextBuilder and thread SDK context to handl…
KonstantinMirin Feb 28, 2026
5915820
fix: add missing GetMediaBuyDeliveryRequest fields from updated AdCP …
KonstantinMirin Feb 28, 2026
7b0c027
refactor: centralize MCP identity resolution via FastMCP Middleware
KonstantinMirin Feb 28, 2026
8d44dac
refactor: convert REST auth to FastAPI Depends
KonstantinMirin Feb 28, 2026
d581913
fix: make task management tests async after sync-to-async conversion
KonstantinMirin Feb 28, 2026
32540ae
refactor: eliminate ContextVar dual-write from A2A auth path
KonstantinMirin Feb 28, 2026
5e8f254
fix: reconcile token extraction priority and case sensitivity in midd…
KonstantinMirin Feb 28, 2026
0e49043
refactor: modernize auth deps to Annotated types and fix type annotat…
KonstantinMirin Feb 28, 2026
460fba2
fix: use uuid task_id, remove debug logs, raise ServerError for stubs
KonstantinMirin Feb 28, 2026
f5b66fe
docs: update stale comments and documentation post-auth-refactoring
KonstantinMirin Feb 28, 2026
1018a8c
refactor: harden auth infrastructure with immutable headers, shared c…
KonstantinMirin Feb 28, 2026
159863f
refactor: eliminate tenant ContextVar side-effect from resolve_identi…
KonstantinMirin Feb 28, 2026
fa29f95
fix: resolve CI test failures from schema drift, stale dates, and ref…
KonstantinMirin Mar 1, 2026
7154d27
merge: integrate PR #1066 auth infrastructure hardening
KonstantinMirin Mar 1, 2026
7f7562e
refactor: move 4 model_dump calls from _impl to repository/transport …
KonstantinMirin Mar 1, 2026
f4678bf
fix: resolve CI failures from auth refactor and schema drift
KonstantinMirin Mar 1, 2026
654d17f
feat: expand obligation guard to scan unit tests, add 282 Covers tags
KonstantinMirin Mar 1, 2026
84a73ba
fix: strip known library mismatches from minimal request test
KonstantinMirin Mar 1, 2026
3411aaa
refactor: reclassify 39 UC-001 obligations from behavioral to schema …
KonstantinMirin Mar 1, 2026
0eb89a4
refactor: extract Product schemas into src/core/schemas/product.py
KonstantinMirin Mar 1, 2026
158bbeb
feat: add device_platform targeting conversion from TargetingOverlay
KonstantinMirin Mar 1, 2026
4b2f2bb
test: add 84 unit tests covering schema-layer UC-001 product obligations
KonstantinMirin Mar 1, 2026
880e671
refactor: create ProductRepository with unit-of-work pattern
KonstantinMirin Mar 1, 2026
e4406bc
fix: narrow ProductUoW.products type for mypy and update guard line n…
KonstantinMirin Mar 1, 2026
223ae21
test: add 77 integration tests for UC-001 behavioral obligations
KonstantinMirin Mar 2, 2026
f9c184f
feat: enforce delivery_measurement as REQUIRED on Product per AdCP v3.6
KonstantinMirin Mar 2, 2026
a44dd8a
docs: update structural guards count from 7 to 11 in CLAUDE.md
KonstantinMirin Mar 2, 2026
8e4af5d
fix: address 6 code review findings (CRIT-04, HIGH-03/04/07/12/13)
KonstantinMirin Mar 2, 2026
044ecb3
fix: update smoke test for schemas package conversion
KonstantinMirin Mar 2, 2026
635e278
refactor: migrate product integration tests to factory-based setup
KonstantinMirin Mar 5, 2026
6871ae6
refactor: convert 3 product behavioral unit tests to integration tests
KonstantinMirin Mar 5, 2026
95b5f3d
fix: remove 8 stale entries from repository-pattern allowlist
KonstantinMirin Mar 5, 2026
1e15f82
fix: resolve $ref schemas in pydantic alignment test generator
KonstantinMirin Mar 5, 2026
2e53eae
fix: extract brand domain from BrandReference instead of dict
KonstantinMirin Mar 5, 2026
3b97998
fix: hoist adapter validation to pre-adapter business logic for dry_run
KonstantinMirin Mar 5, 2026
68f7d41
chore: add factory-boy dependency for test factories
KonstantinMirin Mar 5, 2026
d84249a
Merge remote-tracking branch 'origin/main' into KonstantinMirin/v3.6-…
KonstantinMirin Mar 5, 2026
247b103
fix: update CPC auction test for pre-adapter validation and bump authlib
KonstantinMirin Mar 5, 2026
e1b52c9
fix: raise AdCPValidationError from pre-adapter validation instead of…
KonstantinMirin Mar 5, 2026
eadde5f
Merge main (including PR #1071) into v3.6-product-completion
KonstantinMirin Mar 6, 2026
1cbaf5e
fix: resolve 7 post-merge integration test failures
KonstantinMirin Mar 6, 2026
f5af909
fix: clean up stash conflict markers from stale git stash pop
KonstantinMirin Mar 6, 2026
4b483df
test: add 11 integration tests for format_types/format_ids/standard_f…
KonstantinMirin Mar 6, 2026
bfed759
test: add 12 tests for product schema model_dump and repository cover…
KonstantinMirin Mar 6, 2026
c9f4ad9
refactor: remove dead code create_get_products_response()
KonstantinMirin Mar 6, 2026
3a2e63e
test: add 41 tests for pricing conversion, min_exposures filter, and …
KonstantinMirin Mar 6, 2026
d7310a9
test: add auth & identity obligation tests (salesagent-gmja)
KonstantinMirin Mar 6, 2026
50183b6
test: add policy enforcement obligation tests (salesagent-bxyg)
KonstantinMirin Mar 6, 2026
a7e861e
test: add filter conjunction & semantics obligation tests (salesagent…
KonstantinMirin Mar 6, 2026
baa9782
test: add response schema constraint obligation tests (salesagent-p51r)
KonstantinMirin Mar 6, 2026
b30eeba
test: add 19 unit tests for property list schema constraints
KonstantinMirin Mar 6, 2026
3c8e7b1
test: add 40 integration tests for property list obligations
KonstantinMirin Mar 6, 2026
7789303
feat: add device_type filtering to get_products
KonstantinMirin Mar 6, 2026
9dc9856
fix: add device_types to computed_fields in schema mapping test
KonstantinMirin Mar 7, 2026
c57a47a
refactor: remove stale serialize_format_ids_for_json from Product schema
KonstantinMirin Mar 7, 2026
9bbe6d9
test: un-mock DynamicPricingService in ProductEnv integration tests
KonstantinMirin Mar 7, 2026
69cefd6
fix: update min_exposures tests for un-mocked DynamicPricingService
KonstantinMirin Mar 7, 2026
cd81e4e
test: add ProductRepository write and inventory tests (49% → 98%)
KonstantinMirin Mar 7, 2026
813c25b
fix: correct format_ids column name in dynamic variant creation
KonstantinMirin Mar 7, 2026
8059c2d
refactor: remove dead except-ImportError branches in adapter metadata…
KonstantinMirin Mar 7, 2026
831e66d
test: cover MCP get_products wrapper validation and response construc…
KonstantinMirin Mar 7, 2026
fb7a23c
test: cover format_resolver.py error paths and edge cases (67% → 100%)
KonstantinMirin Mar 7, 2026
5176e51
test: cover _get_products_impl error paths and filter branches (21 te…
KonstantinMirin Mar 7, 2026
9aef499
test: add spec traceability to 173 product obligation tests
KonstantinMirin Mar 7, 2026
dbf8cd5
fix: is_fixed_price filter now correctly unwraps PricingOption RootModel
KonstantinMirin Mar 7, 2026
6a74f62
fix: canonicalize creative agent cache keys with yarl (RFC 3986)
KonstantinMirin Mar 7, 2026
b60085a
fix: restore error-raising in get_product_catalog (revert of 5444a3fb…
KonstantinMirin Mar 8, 2026
f9df374
feat: enforce delivery_measurement as REQUIRED on Product per AdCP v3.6
KonstantinMirin Mar 8, 2026
ef9e98c
refactor: move adapter default functions from tools to src/adapters/
KonstantinMirin Mar 8, 2026
df68032
test: add migration tests for delivery_measurement (upgrade/downgrade…
KonstantinMirin Mar 8, 2026
fa5dc7f
fix: narrow except clauses in _get_products_impl enrichment services …
KonstantinMirin Mar 8, 2026
bb013b9
fix: ground enrichment fail-open behavior in BDD obligations (#1093)
KonstantinMirin Mar 8, 2026
9e39cfc
fix: serialize MediaChannel enums in ranking agent prompt (#1093)
KonstantinMirin Mar 9, 2026
f16b895
feat: add task-single formula and upgrade obligation test quality guard
KonstantinMirin Mar 9, 2026
3a8a6fd
test: rewrite 3 creative issubclass tests as multi-route behavioral t…
KonstantinMirin Mar 9, 2026
20be501
test: rewrite 3 filtered discovery tests to call _get_products_impl
KonstantinMirin Mar 9, 2026
0f1577e
test: rewrite 3 filtered discovery tests (regions, metros, standard_f…
KonstantinMirin Mar 9, 2026
4a21f96
test: rewrite 3 creative REST route tests as multi-route behavioral t…
KonstantinMirin Mar 9, 2026
eecc168
test: rewrite 3 filtered discovery tests (axe, features, geo_targeting)
KonstantinMirin Mar 9, 2026
e0733fd
test: rewrite 3 creative behavioral tests via _sync_creatives_impl (s…
KonstantinMirin Mar 9, 2026
7b0ced1
test: rewrite 3 tests (pagination bounds, product selectors precondit…
KonstantinMirin Mar 9, 2026
51f1b5a
test: rewrite creative asset types test via _sync_creatives_impl (sal…
KonstantinMirin Mar 9, 2026
15ed5cf
test: rewrite 3 proposal tests to call _get_products_impl
KonstantinMirin Mar 9, 2026
b2404fe
test: rewrite 3 tests (relevance threshold, product uniqueness)
KonstantinMirin Mar 9, 2026
2ad5143
test: rewrite brand derivation tests to call _get_products_impl (sale…
KonstantinMirin Mar 9, 2026
809b3e4
test: rewrite PL + delivery obligation tests as xfail stubs and multi…
KonstantinMirin Mar 9, 2026
53a58aa
Merge origin/main (PR #1080 creative domain) into v3.6-product-comple…
KonstantinMirin Mar 9, 2026
03031ec
fix: repair merge damage — identity backward compat, device platform …
KonstantinMirin Mar 9, 2026
0012956
fix: case-insensitive pricing model validation in adapter boundary
KonstantinMirin Mar 9, 2026
e2a79ec
test: add async lifecycle obligation integration tests (UC-006-ASYNC-…
KonstantinMirin Mar 9, 2026
6e4f82e
test: add 5 integration tests for creative validation + REST obligations
KonstantinMirin Mar 9, 2026
ecb0fac
test: add 13 integration tests for creative schema compliance obligat…
KonstantinMirin Mar 9, 2026
790ca47
refactor: remove Covers: tags from 13 allowlisted unit tests and clea…
KonstantinMirin Mar 9, 2026
8d1fcee
chore: sync beads after quality allowlist cleanup
KonstantinMirin Mar 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .beads

This file was deleted.

32 changes: 32 additions & 0 deletions .claude/agents/executor.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,23 @@ Record the results. This confirms the clean slate. If anything fails here
Follow the **mol-execute** skill (`.claude/skills/mol-execute/SKILL.md`).
Read that file for the full protocol: cook the molecule, walk atoms, close.

### Formula Selection

If your spawn prompt specifies a formula, use that. Otherwise, auto-select:

```bash
bd show <task-id> # Check type and description
```

| Condition | Formula | Cook command |
|-----------|---------|-------------|
| Type is `bug` | `bug-triage.yaml` | `--formula .claude/formulas/bug-triage.yaml --var "BUG_IDS=<ids>"` |
| Task is well-defined (test rewrite, allowlist fix, mechanical change) | `task-single.yaml` | `--formula .claude/formulas/task-single.yaml --var "TASK_IDS=<ids>"` |
| Task needs research or TDD (new feature, refactor with unknowns) | `task-execute.yaml` | `--formula .claude/formulas/task-execute.yaml --var "TASK_IDS=<ids>"` |

**Default to `task-single`** unless the task explicitly needs research or
architect review. Most beads tasks have sufficient context in their description.

## Quality Gates (HARD REQUIREMENTS)

You have a Postgres container. You MUST use it. The quality gates below are
Expand All @@ -132,9 +149,24 @@ This starts Docker, runs all 5 suites (unit, integration, integration_v2,
e2e, ui) via tox, and tears down. Do NOT substitute with individual pytest
commands — `./run_all_tests.sh` is the single source of truth.

JSON results are saved to `test-results/<ddmmyy_HHmm>/`. Use those to
review results — background processes may crash and lose terminal output.

**If any test fails, your implementation has a bug. Fix it before
committing.** You started from a clean slate — every failure is yours.

### Test Integrity Policy — ZERO TOLERANCE

**Read and follow CLAUDE.md "Test Integrity Policy" section. Summary:**

- **NEVER** use `--ignore`, `-k "not ..."`, `--deselect`, `pytest.mark.skip`,
or `pytest.mark.xfail` to work around failures.
- **NEVER** rationalize failures as "pre-existing", "infrastructure issue",
"misplaced test", "needs a running server", or "was deselected in full run".
- If a test needs Docker → start Docker (`./run_all_tests.sh` handles this).
- If infrastructure is broken → STOP and report. Do NOT skip tests and report success.
- A failing test is a failing test. Fix it or report it as a blocker.

### What tests to write

**For repository migrations, data access changes, and session management:**
Expand Down
45 changes: 36 additions & 9 deletions .claude/commands/team.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,23 +39,44 @@ TeamCreate: team_name="<descriptive-name>", description="<what the team does>"
Analyze the user's prompt and break it into parallel work items. For beads
task IDs, run `bd show <id>` to read descriptions and verify they're unblocked.

**Grouping strategy:**
- Group tasks that touch the **same file** into one executor (avoids merge conflicts)
- Each executor gets one file or a small set of non-overlapping files
- The allowlist (`obligation_test_quality_allowlist.json`) is a shared resource —
coordinate updates or do a reconciliation pass after all executors finish

**Formula selection:**
- If the user specifies a formula, use it
- Otherwise, check each task with `bd show <id>`:
- Well-defined tasks (test rewrites, allowlist fixes, mechanical changes) → `task-single.yaml`
- Tasks needing research or TDD (new features, refactors) → `task-execute.yaml`
- Bugs → `bug-triage.yaml`

Each work item becomes:
- A task in the team's task list (via TaskCreate)
- An executor teammate spawned to handle it (via Task with team_name)

### Step 4: Spawn executor teammates
For each work item, spawn an executor:
For each work item, spawn an executor with an **explicit formula and cook command**:
```
Task:
team_name: "<team-name>"
name: "executor-<short-id>"
name: "executor-<short-label>"
subagent_type: "executor"
prompt: |
Execute beads task salesagent-<id>.
Execute these beads tasks using <formula> formula:
salesagent-<id1> salesagent-<id2> salesagent-<id3>

Cook:
python3 .claude/scripts/cook_formula.py \
--formula .claude/formulas/<formula>.yaml \
--var "TASK_IDS=salesagent-<id1> salesagent-<id2> salesagent-<id3>" \
--epic-title "<descriptive title>"

Then walk atoms: bd ready → bd show <id> → execute → bd close <id> → repeat

Run `bd show <id>` for full description and acceptance criteria.
Follow the executor protocol: setup DB, cook molecule, walk atoms,
quality gates, commit.
Your files: <list of files this executor owns>
Shared resource: <any shared files like allowlists>
```

**NOTE: `isolation: "worktree"` is a no-op for team agents.** All executors
Expand All @@ -70,9 +91,15 @@ non-overlapping files to avoid conflicts.

### Step 6: Verify and commit
After all executors complete:
1. Run `make quality` on the combined result
2. Squash or organize commits if needed
3. Push if the user requests it
1. Run `./run_all_tests.sh` on the combined result (NOT just `make quality` —
the full suite including e2e and ui is mandatory)
2. Review JSON results in `test-results/<ddmmyy_HHmm>/` if terminal output is lost
3. Squash or organize commits if needed
4. Push if the user requests it

**Test Integrity — ZERO TOLERANCE**: If any test fails in the combined result,
do NOT skip it or rationalize it. See CLAUDE.md "Test Integrity Policy".
Every failure must be fixed or reported as a blocker.

## User's Request

Expand Down
19 changes: 16 additions & 3 deletions .claude/formulas/bug-triage.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -605,6 +605,10 @@ finalize:
e2e, ui) via tox, and tears down. Do NOT substitute with individual pytest
commands — `./run_all_tests.sh` is the single source of truth.

JSON results are saved to `test-results/<ddmmyy_HHmm>/`. If terminal
output is lost (background process crash, timeout), read the JSON files
to review results.

3. **Compare counts**:
- Passes must be >= baseline (new tests are expected)
- Failures must be exactly 0
Expand All @@ -616,15 +620,24 @@ finalize:
- make quality: [N] passed, 0 failed (baseline: [N])
- integration: [N] passed, 0 failed (baseline: [N])
- integration_v2: [N] passed, 0 failed (baseline: [N])
- e2e: [N] passed, [N] skipped, 0 failed
- ui: [N] passed, [N] skipped, 0 failed
- Delta: +[N] new tests, 0 regressions"
```

## HARD STOP
## HARD STOP — Test Integrity (ZERO TOLERANCE)

**Read CLAUDE.md "Test Integrity Policy". These rules apply here:**

If ANY gate has failures that were not in the baseline:
If ANY test fails in `./run_all_tests.sh`:
- Do NOT close this atom.
- Do NOT commit.
- Fix the regressions first, then re-run this atom.
- Do NOT use `--ignore`, `-k "not ..."`, or `--deselect` to skip failures.
- Do NOT rationalize failures as "pre-existing", "infrastructure issue",
"misplaced test", "needs a running server", or "was deselected".
- Fix the regressions first, then re-run `./run_all_tests.sh`.
- If infrastructure is broken and you cannot fix it, report it as a
BLOCKER to the user. Do NOT skip tests and report success.

acceptance: "All three gates pass. Zero regressions vs baseline. Final counts recorded in epic notes."
depends_on_all_barriers: true
Expand Down
19 changes: 16 additions & 3 deletions .claude/formulas/task-execute.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -604,6 +604,10 @@ finalize:
e2e, ui) via tox, and tears down. Do NOT substitute with individual pytest
commands — `./run_all_tests.sh` is the single source of truth.

JSON results are saved to `test-results/<ddmmyy_HHmm>/`. If terminal
output is lost (background process crash, timeout), read the JSON files
to review results.

3. **Compare counts**:
- Passes must be >= baseline (new tests are expected)
- Failures must be exactly 0
Expand All @@ -615,15 +619,24 @@ finalize:
- make quality: [N] passed, 0 failed (baseline: [N])
- integration: [N] passed, 0 failed (baseline: [N])
- integration_v2: [N] passed, 0 failed (baseline: [N])
- e2e: [N] passed, [N] skipped, 0 failed
- ui: [N] passed, [N] skipped, 0 failed
- Delta: +[N] new tests, 0 regressions"
```

## HARD STOP
## HARD STOP — Test Integrity (ZERO TOLERANCE)

**Read CLAUDE.md "Test Integrity Policy". These rules apply here:**

If ANY gate has failures that were not in the baseline:
If ANY test fails in `./run_all_tests.sh`:
- Do NOT close this atom.
- Do NOT commit.
- Fix the regressions first, then re-run this atom.
- Do NOT use `--ignore`, `-k "not ..."`, or `--deselect` to skip failures.
- Do NOT rationalize failures as "pre-existing", "infrastructure issue",
"misplaced test", "needs a running server", or "was deselected".
- Fix the regressions first, then re-run `./run_all_tests.sh`.
- If infrastructure is broken and you cannot fix it, report it as a
BLOCKER to the user. Do NOT skip tests and report success.

acceptance: "All three gates pass. Zero regressions vs baseline. Final counts recorded in epic notes."
depends_on_all_barriers: true
Expand Down
Loading