Reconcile main with origin/main + MCP transport + CrewAI 1.10 fixes#9
Merged
Reconcile main with origin/main + MCP transport + CrewAI 1.10 fixes#9
Conversation
bead: ar-q8ok Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per proposal §5.7. Adds AudienceCapabilities + AgenticCapabilities; Public view exposes capabilities only, Authenticated view exposes segment lists; legacy shim migrates list[str] inputs. bead: ar-roi5 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per proposal §5.7 layer 1 + §6 row 9. Includes schema_version, supports_* flags, max_refs_per_role, and taxonomy_lock_hashes (loaded dynamically from data/taxonomies/taxonomies.lock.json for cross-repo schema-drift backstop). bead: ar-2sip Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per proposal §5.7 + §6 row 10. GET /packages now accepts audience_type + audience_id query params; /media-kit/search scoring corpus now includes audience_capabilities segment IDs alongside keywords/tags. bead: ar-2wxa Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… honor Per proposal §5.7 layers 2-3 + §5.1 Step 2 + §6 row 11. - POST /agentic-audience/match (mock-quality match for DRAFT spec) - audience_plan_unsupported structured error on DealBookingRequest - validate_audience hard-rejects on standard/contextual mismatch - honor_audience_plan_snapshot helper for capability change mid-campaign bead: ar-sn8f Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Updates docs/guides/media-kit.md to reflect the typed audience_capabilities
shipped in proposal §8 (replacing the deprecated flat audience_segment_ids):
- Replaces audience_segment_ids row with the typed audience_capabilities
block (standard / contextual / agentic sub-fields with versions)
- Adds positioning guidance per §5.7: standard direct response,
content-adjacency contextual, agentic premium tier
- Adds new "Audience-Aware Discovery" section covering:
* Capability advertisement on /.well-known/agent.json (§9)
* Audience filter on GET /packages?audience_type=X&audience_id=Y (§10)
* POST /agentic-audience/match endpoint (§11)
* Structured rejection envelope audience_plan_unsupported (§11)
- Updates tier-gated visibility table to expose capability versions
publicly (no segment lists) and segment lists at SEAT+ tier
- Updates authenticated package response example to show the typed
audience_capabilities shape
- Adds dual-naming note ("Agentic Audiences (UCP)") for the wire content
type per §5.6
- Cross-references the parent-repo capability-negotiation guide
bead: ar-nd3i
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per proposal §5.1 Step 2 + §5.6 + §6 row 14b. Seller accepts both UCP and Agentic Audiences content-types; booking response includes audience_plan_snapshot + audience_match_summary per wire-format §6.5; logs audience_plan_id at INFO. bead: ar-y6ki Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per proposal §5.1 Step 4 + §6 row 15. Parses standard segments from user.data[], contextual from site.cat/cattax, agentic from user.ext.iab_agentic_audiences.refs[]. bead: ar-8vzg Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds the matching embedding_provenance field on the seller-side ComplianceContext so the cross-repo wire round-trip (§16 test 4 schema-drift backstop) stays byte-equivalent after E2-2 added the field on the buyer. Per E2-7 Gap 6. Pre-emptively lands the seller-side mirror that E2-6 would otherwise own; minimum touch to keep the schema-drift backstop green during E2-2. bead: ar-0abx Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per E2-2's real embedding model. AgenticCapabilities.modern_default() classmethod produces a "modern seller" capability shape that genuinely supports agentic refs minted by the buyer's sentence-transformers (384-dim, in [256, 1024]) on all three IAB Agentic Audiences signal types. Global default Package.audience_capabilities.agentic_capabilities remains None — sellers opt in by setting it explicitly. bead: ar-wkzu Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Compares the seller's mirror models (AudienceRef, ComplianceContext) to the canonical buyer-emitted snapshot. Field-shape match (properties + required + enums), not byte-equality, because the seller's model_json_schema may have minor stylistic differences from the buyer's. bead: ar-tuac Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per UAT 2026-04-25 flag — `GET /products` (and other endpoints that instantiate seller flows) returned HTTP 500 because CrewAI's `_create_initial_state()` constructs `StateWithId()` with no kwargs, but `SellerFlowState` had four required fields (flow_id, flow_type, seller_organization_id, seller_name) without defaults. Pydantic ValidationError surfaced as 500. Fix: give the four fields empty-string defaults. Each Flow's `@start`-decorated step then overwrites them with real values via `self.state.field = ...` (verified in ProductSetupFlow.initialize_setup and parallel flows). Pure additive change — no test churn. Note: a separate downstream issue (Flow.kickoff hanging on OpenDirect connection in test mode) prevents `GET /products` from returning a clean response; that requires endpoint-level refactor (read products from a store rather than running a full flow per request) — filing as a follow-up. bead: ar-y7hn Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
GET /products, GET /products/{id}, and GET /.well-known/agent.json
all called `await ProductSetupFlow().kickoff()` per request, which hangs
in OpenDirect MCP session.initialize() — UAT R2 surfaced this as a
500 on both endpoints. Replace with direct reads from the existing
products store; agent_card() reads seller identity from settings.
bead: ar-uwad
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Epic 1 (ar-hrwc): 24/24 beads — Standard + Contextual + Agentic audience support across buyer + seller, with composable overlay model, capability negotiation, structured rejection, snapshot honor, OpenRTB carrier mapping. Epic 2 (ar-wi9x): 10/10 beads — sentence-transformers hybrid embedding model, per-mode similarity thresholds, canonical JSON Schema drift backstop, embedding_provenance metadata. 8 P3 follow-ups closed during the run. Live UAT R3: byte-identical wire round-trip on real seller booking (deal DEMO-78215162AD80, plan_id sha256:cc87ed44...199b292e). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Same root cause as ar-uwad: per-request `await ProductSetupFlow().kickoff()` hangs in OpenDirect MCP session.initialize. Different invocation site (quote-create endpoint vs the read endpoints ar-uwad fixed). Replace with direct store/cache read. Extends ar-uwad's autouse fixture guarantee that no read endpoint runs Flow.kickoff per request. bead: ar-0vtg Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…erience cleanup Epic ar-v5lt: - ar-0vtg: POST /api/v1/quotes endpoint — was 500, now 200 in 16ms - ar-le3: lazy Settings init via _LazySettings proxy - ar-yt4: tool _natural_language_ registry dict + case-insensitive lookup - ar-gsd: regression guard on _run/_arun return type annotations - ar-w5g: channel crew DRY (4 factories → 1 builder + 4 specs; 12% line cut) - ar-7p3: tests/README.md test-suite map - ar-jzek: campaign demo --headless / --json mode Buyer suite 3076/3077 passing (1 order-dep flake = ar-0isf, separate followup). Seller suite 767/767. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…th-origin-seller # Conflicts: # src/ad_seller/interfaces/api/main.py # src/ad_seller/models/flow_state.py
…fvap) Previous reconciliation merge (ee54e01 in ar-z40x) took local entirely on this file, dropping origin commit 7d822a5 ("feat: add MCP Streamable HTTP transport (fix buyer agent 405)"). The two changes are orthogonal: - Origin's change: lifespan handler, Streamable HTTP mount at /mcp, legacy SSE fallback at /mcp-sse, session_manager.run keepalive - Local's ar-uwad change (d60878e): /products endpoints read from static catalog instead of kickoff_async Both are now present. bead: ar-fvap Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The OpenRTB builder/parser round-trip test resolved the buyer src path via parents[5] + a hardcoded `.worktrees/audience-extension/src/` suffix, which only worked when a buyer worktree by that exact name existed. Outside of that environment (i.e., on every developer machine after the worktree was cleaned up), the path didn't exist and the test failed with ModuleNotFoundError on `ad_buyer`. Replace the hardcoded path with explicit ancestry search for `ad_seller_system`, then look for a matching buyer worktree only when the test is running inside a seller worktree, falling back to `ad_buyer_system/src` otherwise. Adds an `AD_BUYER_SRC_PATH` env var override mirroring the buyer-side `AD_SELLER_SRC_PATH`. bead: ar-e2rj Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Origin's 3d8b69c fixed /products and /products/{id}; six other endpoints still called `await flow.kickoff()` and crashed with TypeError: object NoneType can't be used in 'await' expression. Affected: /pricing, /proposals, /discovery, /packages/sync, /api/v1/deals/from-template, /api/v1/deals/curated. bead: ar-yet5 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Starlette sub-app routing causes \`/mcp\` to 307→404; the working URL is \`/mcp/mcp\`. Update setup guides and reference docs to use the canonical path so MCP clients (Claude Desktop, ChatGPT, etc.) work out of the box. Files updated: - docs/api/mcp.md: endpoint table, Codex and Cursor config examples - docs/guides/claude-desktop-setup.md: remote server URL - docs/guides/chatgpt-setup.md: ChatGPT, Codex, Cursor, Windsurf configs - docs/guides/developer-setup.md: claude_desktop_config.json example - docs/guides/troubleshooting.md: connectivity verification command - docs/index.md: access methods table - docs/architecture/overview.md: Mermaid diagram node labels bead: ar-yptd Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
mainwithorigin/main— local was 7 commits behind (origin's MCP Streamable HTTP transport, litellm→CrewAI native provider migration, CrewAI 1.10 fixes, CI tweaks). Conflicts resolved in favor of origin's MCP transport while preserving local's ar-uwad/productsstatic catalog.kickoff()awaitability across 6 endpoints, cross-repo test paths.What's in
main.py(first reconciliation merge dropped it during conflict resolution)kickoff()returns None — 6 endpoints (/pricing,/proposals,/discovery,/packages/sync,from-template,curated) now usekickoff_async().worktrees/audience-extension/refs)/mcp/mcp(Streamable HTTP) and/mcp-sse/sse(legacy)Test posture
PYTHONPATH=srcfrom worktree)TypeError: object NoneTypein server log); MCP/mcp/mcpStreamable HTTP confirmed end-to-end (42 tools enumerated, full protocol negotiation,list_productsreturned 12-product catalog)docs/reports/QUINN_VERIFICATION_ar-{yet5,fvap,e2rj}_2026-04-26.mdTest plan
pytest tests/, expect 768/768 passedcurl -X POST -d '{}'— expect non-500, zeroTypeError NoneTypein logPOST /mcp/mcpnegotiates protocol successfully (Streamable HTTP)🤖 Generated with Claude Code