diff --git a/.beads/generate_progress.py b/.beads/generate_progress.py index 3e908c1..61962a3 100644 --- a/.beads/generate_progress.py +++ b/.beads/generate_progress.py @@ -150,7 +150,7 @@ def format_date(iso_str): def generate(): - issues = load_issues() + issues = [i for i in load_issues() if i.get("status") != "tombstone"] if not issues: OUTPUT_PATH.write_text("# Progress\n\nNo issues found.\n") return diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 5cd05ef..306fd79 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -5,7 +5,7 @@ {"id":"buyer-3aa","title":"2D: Creative Management Sub-Agent","description":"Add a Level 3 Creative Agent that manages creative assets across campaigns. Handles creative spec validation (IAB standard sizes, VAST/VPAID for video, SIMID for interactive), A/B testing assignment, creative rotation strategies, and compliance checks. Works with execution agent for creative-to-line assignment via OpenDirect Assignments API.","status":"open","priority":2,"issue_type":"feature","created_at":"2026-03-04T14:23:19.15895-05:00","updated_at":"2026-03-04T14:23:19.15895-05:00","created_by":"Brian Tomasette"} {"id":"buyer-4bg","title":"3A: FreeWheel Buyer Cloud Integration","description":"Integrate with FreeWheel Buyer Cloud MCP (bcmcp.freewheel.com) for campaign execution, creative management, and reporting. This is the buyer-side counterpart to seller's FreeWheel dual-MCP architecture (seller-dcd chain). Phase 1: campaign binding to deals from Streaming Hub. Phase 2: creative upload and activation. Phase 3: reporting and pacing. Cross-repo dependency: seller-dcd (open, P1 — FreeWheel Ad Server Integration).","notes":"BLOCKED BY: seller-dcd (Brian). FreeWheel integration requires seller-side FreeWheel support.","status":"open","priority":2,"issue_type":"feature","created_at":"2026-03-04T14:22:19.373267-05:00","updated_at":"2026-03-11T17:02:17.28422-04:00","created_by":"Brian Tomasette"} {"id":"buyer-4mt","title":"5G: Instantiate Deal From Template Tool","description":"Create InstantiateDealFromTemplateTool in tools/deal_jockey/. Takes template_id + seller_url, resolves template from DealStore, calls seller's POST /api/v1/deals/from-template with structured params. Persists resulting deal to DealStore with template linkage.","status":"open","priority":2,"issue_type":"feature","created_at":"2026-03-11T18:19:59.48181-04:00","updated_at":"2026-03-11T18:19:59.48181-04:00","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-4mt","depends_on_id":"buyer-aw4","type":"blocks","created_at":"2026-03-11T18:23:58.77837-04:00","created_by":"Brian Tomasette"}]} -{"id":"buyer-5b7","title":"5J: Wire Deal Jockey Tools into Agent","description":"Wire all new Deal Jockey tools into deal_jockey_agent.py. Add ManageDealTemplateTool, ManageSupplyPathTemplateTool, AnalyzeSupplyPathTool, InstantiateDealFromTemplateTool, BulkDealOperationTool, GetDealPerformanceTool to the agent's tool list. Update backstory to include SPO and template expertise.","status":"open","priority":2,"issue_type":"task","created_at":"2026-03-11T18:20:04.412189-04:00","updated_at":"2026-03-11T18:20:04.412189-04:00","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-5b7","depends_on_id":"buyer-e6a","type":"blocks","created_at":"2026-03-11T18:23:59.028701-04:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-5b7","depends_on_id":"buyer-hik","type":"blocks","created_at":"2026-03-11T18:23:59.112175-04:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-5b7","depends_on_id":"buyer-4mt","type":"blocks","created_at":"2026-03-11T18:23:59.195586-04:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-5b7","depends_on_id":"buyer-h3r","type":"blocks","created_at":"2026-03-11T18:23:59.276825-04:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-5b7","depends_on_id":"buyer-shp","type":"blocks","created_at":"2026-03-11T18:23:59.358783-04:00","created_by":"Brian Tomasette"}]} +{"id":"buyer-5b7","title":"5J: Wire Deal Jockey Tools into Agent","description":"Wire all new Deal Jockey tools into deal_jockey_agent.py. Add ManageDealTemplateTool, ManageSupplyPathTemplateTool, AnalyzeSupplyPathTool, InstantiateDealFromTemplateTool, BulkDealOperationTool, GetDealPerformanceTool to the agent's tool list. Update backstory to include SPO and template expertise.","status":"open","priority":2,"issue_type":"task","created_at":"2026-03-11T18:20:04.412189-04:00","updated_at":"2026-03-11T18:20:04.412189-04:00","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-5b7","depends_on_id":"buyer-4mt","type":"blocks","created_at":"2026-03-11T18:23:59.195586-04:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-5b7","depends_on_id":"buyer-h3r","type":"blocks","created_at":"2026-03-11T18:23:59.276825-04:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-5b7","depends_on_id":"buyer-shp","type":"blocks","created_at":"2026-03-11T18:23:59.358783-04:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-5b7","depends_on_id":"buyer-e6a","type":"blocks","created_at":"2026-03-11T18:23:59.028701-04:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-5b7","depends_on_id":"buyer-hik","type":"blocks","created_at":"2026-03-11T18:23:59.112175-04:00","created_by":"Brian Tomasette"}]} {"id":"buyer-5er","title":"1I: Order State Machine Implementation","description":"Copy the seller's OrderStateMachine framework into the buyer repo and customize for buyer-specific deal and campaign lifecycles.\n\n## What to Do\n1. Copy state machine framework classes from seller (OrderStateMachine, TransitionRule, GuardFn, StateTransition, OrderAuditLog) into buyer src/ad_buyer/models/state_machine.py\n2. Define buyer deal lifecycle states: quoted → negotiating → accepted → booking → booked → delivering → completed (plus failed, cancelled, expired)\n3. Define buyer campaign/booking lifecycle states mapping to existing ExecutionStatus enum\n4. Add linear TV lifecycle states: makegood_pending, partially_canceled\n5. Wire into DealStore.update_deal_status() to enforce valid transitions\n6. Wire into DealBookingFlow and DSPDealFlow (replace direct enum assignments with machine.transition())\n7. Tests: transition enforcement, guard conditions, audit trail, invalid transition rejection\n\n## Source Reference\n- Seller implementation: ad_seller_system/src/ad_seller/models/order_state_machine.py (on fix-seller-import-crash branch)\n- Pure Pydantic + stdlib, no external deps","notes":"Quinn verification: VERIFIED. See docs/reports/QUINN_VERIFICATION_buyer-5er_2026-03-11.md","status":"closed","priority":1,"issue_type":"task","created_at":"2026-03-11T14:00:14.20895-04:00","updated_at":"2026-03-11T18:39:18.813758-04:00","closed_at":"2026-03-11T16:30:37.944468-04:00","close_reason":"Quinn VERIFIED. 47/47 tests, PR #50","created_by":"ATC964"} {"id":"buyer-5gp","title":"5R: Deal Jockey Example and Documentation","description":"Create examples/deal_jockey.py demonstrating: deal template creation, supply path template with custom weights, SPO analysis across multiple sellers, template-based deal instantiation, cross-platform deal tracking, deal migration. Update README and docs with Deal Jockey architecture, plugin interface, and new API endpoints.","status":"open","priority":3,"issue_type":"task","created_at":"2026-03-11T18:20:31.229808-04:00","updated_at":"2026-03-11T18:20:31.229808-04:00","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-5gp","depends_on_id":"buyer-omm","type":"blocks","created_at":"2026-03-11T18:23:59.996144-04:00","created_by":"Brian Tomasette"}]} {"id":"buyer-681","title":"5Q: Curator Awareness in SPO","description":"Add curator awareness to AnalyzeSupplyPathTool and SupplyPathScorer. Support preferred_curators list in supply_path_templates. Score curator-packaged deals based on curator identity and curation fee. Per OpenDirect 3.0 curator role spec.","status":"open","priority":2,"issue_type":"feature","created_at":"2026-03-11T18:20:29.080828-04:00","updated_at":"2026-03-11T18:20:29.080828-04:00","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-681","depends_on_id":"buyer-hik","type":"blocks","created_at":"2026-03-11T18:23:59.918207-04:00","created_by":"Brian Tomasette"}]} @@ -32,13 +32,13 @@ {"id":"buyer-jin","title":"1A: API Key Authentication Client","description":"Implement client-side API key management for authenticating with sellers. Store API keys per seller endpoint, send via Authorization: Bearer or X-Api-Key headers. Maps to seller's 1I (buyer agent auth \u0026 access tiers). The seller issues ask_live_ prefixed keys that map to BuyerIdentity — the buyer client must store these securely, attach them to outgoing requests, and handle 401 responses (expired/revoked keys) gracefully. Cross-repo dependency: seller-aeb (completed).","status":"closed","priority":1,"issue_type":"feature","created_at":"2026-03-04T14:20:51.828179-05:00","updated_at":"2026-03-11T17:02:17.286644-04:00","closed_at":"2026-03-08T20:43:24.055235-04:00","close_reason":"Quinn VERIFIED 129/129 tests. Tier 2 auto-close. Branch: feature/api-key-auth","created_by":"Brian Tomasette"} {"id":"buyer-k2i","title":"3D-Phase1: Mediaocean Prisma (Digital/Programmatic)","description":"Integrate with Mediaocean Prisma for digital and programmatic order management. Prisma is the industry-standard buy-side OMS used by major agencies (GroupM, Publicis, IPG, Dentsu) for display, video, and CTV. Integration enables: order plan export from Prisma to buyer agent, automated IO generation, deal ID mapping back to Prisma line items, pacing/delivery data sync, and invoice reconciliation. Supports Prisma API and TIP standard for electronic order exchange.","status":"open","priority":2,"issue_type":"feature","created_at":"2026-03-05T12:36:21.80498-05:00","updated_at":"2026-03-05T12:36:21.80498-05:00","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-k2i","depends_on_id":"buyer-je8","type":"blocks","created_at":"2026-03-05T12:36:30.717486-05:00","created_by":"Brian Tomasette"}]} {"id":"buyer-kyo","title":"3B: Order Lifecycle State Machine","description":"Implement buyer-side order state tracking mirroring the seller's state machine (draft, pending_approval, approved, delivering, completed, canceled). Handle state transitions, approval gates, and cancellation flows. Maps to seller's 2A (order workflow state machine). Cross-repo dependency: seller-awh (open, P2).","notes":"BLOCKED BY: seller-awh (Brian). Order lifecycle requires seller-side order state machine.","status":"open","priority":2,"issue_type":"feature","created_at":"2026-03-04T14:22:21.679283-05:00","updated_at":"2026-03-11T17:02:17.286991-04:00","created_by":"Brian Tomasette"} -{"id":"buyer-llu","title":"1E: Multi-Turn Negotiation Client","description":"Implement buyer-side negotiation protocol for multi-turn counter-offers with sellers. Send counter-proposals via POST /proposals/{id}/counter with price, volume, and terms adjustments. Handle NegotiationStrategy responses (COLLABORATIVE, STANDARD, FIRM). Track negotiation history and know when to accept vs counter. Maps to seller's 2B (enhanced negotiation engine). Cross-repo dependency: seller-8hx (completed).","status":"closed","priority":1,"issue_type":"feature","created_at":"2026-03-04T14:21:51.216616-05:00","updated_at":"2026-03-11T17:02:17.287317-04:00","closed_at":"2026-03-09T07:04:53.314597-04:00","close_reason":"Quinn VERIFIED 128/128 tests. Tier 2 auto-close. Swappable strategy pattern implemented. Branch: feature/negotiation-client","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-llu","depends_on_id":"buyer-1ku","type":"blocks","created_at":"2026-03-04T14:22:29.621282-05:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-llu","depends_on_id":"buyer-jin","type":"blocks","created_at":"2026-03-04T14:22:29.762475-05:00","created_by":"Brian Tomasette"}]} +{"id":"buyer-llu","title":"1E: Multi-Turn Negotiation Client","description":"Implement buyer-side negotiation protocol for multi-turn counter-offers with sellers. Send counter-proposals via POST /proposals/{id}/counter with price, volume, and terms adjustments. Handle NegotiationStrategy responses (COLLABORATIVE, STANDARD, FIRM). Track negotiation history and know when to accept vs counter. Maps to seller's 2B (enhanced negotiation engine). Cross-repo dependency: seller-8hx (completed).","status":"closed","priority":1,"issue_type":"feature","created_at":"2026-03-04T14:21:51.216616-05:00","updated_at":"2026-03-11T17:02:17.287317-04:00","closed_at":"2026-03-09T07:04:53.314597-04:00","close_reason":"Quinn VERIFIED 128/128 tests. Tier 2 auto-close. Swappable strategy pattern implemented. Branch: feature/negotiation-client","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-llu","depends_on_id":"buyer-jin","type":"blocks","created_at":"2026-03-04T14:22:29.762475-05:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-llu","depends_on_id":"buyer-1ku","type":"blocks","created_at":"2026-03-04T14:22:29.621282-05:00","created_by":"Brian Tomasette"}]} {"id":"buyer-nz9","title":"Order Status \u0026 Audit API Integration","description":"Buyer-side order state persistence and seller API integration. Storage: Add OrderStateMachine model to buyer models, implement get_order/set_order/list_orders on buyer StorageBackend with order:{id} key format to persist buyer's view of order state locally. API client: client for seller's GET /api/v1/orders/{order_id} (check order status), client for GET /api/v1/orders/{order_id}/history (view transition audit trail). Sync: periodic or event-driven sync of order status from seller to local buyer DB. Buyer endpoints: GET /api/v1/buyer/orders (list buyer's orders from local DB with status filter), GET /api/v1/buyer/orders/{order_id}/audit (local audit trail). Enables buyer agents and buyer admins to check order status and audit history at any point without depending on seller API availability.","notes":"Depends on seller-cnd (Order Storage \u0026 API Endpoints) in seller-agent repo. Cannot start until seller API is deployed.","status":"open","priority":2,"issue_type":"task","created_at":"2026-03-09T20:16:36.621279-04:00","updated_at":"2026-03-11T18:34:12.557433-04:00","created_by":"Brian Tomasette"} -{"id":"buyer-omm","title":"5M: Expand DealJockeyFlow with Optimization Plugin Interface","description":"Expand DealJockeyFlow to support: template selection, SPO evaluation, multi-seller instantiation. Define DealReplacementStrategy and SupplyPathScorer plugin protocols (Python Protocol classes). Built-in implementations: RulesBasedReplacementStrategy (thresholds on fill rate, win rate, fee pct) and WeightedSupplyPathScorer (uses template weights). Injectable component seam so external providers can replace defaults.","status":"open","priority":1,"issue_type":"feature","created_at":"2026-03-11T18:20:16.195869-04:00","updated_at":"2026-03-11T18:20:16.195869-04:00","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-omm","depends_on_id":"buyer-1q3","type":"blocks","created_at":"2026-03-11T18:23:59.600847-04:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-omm","depends_on_id":"buyer-5b7","type":"blocks","created_at":"2026-03-11T18:23:59.682215-04:00","created_by":"Brian Tomasette"}]} +{"id":"buyer-omm","title":"5M: Expand DealJockeyFlow with Optimization Plugin Interface","description":"Expand DealJockeyFlow to support: template selection, SPO evaluation, multi-seller instantiation. Define DealReplacementStrategy and SupplyPathScorer plugin protocols (Python Protocol classes). Built-in implementations: RulesBasedReplacementStrategy (thresholds on fill rate, win rate, fee pct) and WeightedSupplyPathScorer (uses template weights). Injectable component seam so external providers can replace defaults.","status":"open","priority":1,"issue_type":"feature","created_at":"2026-03-11T18:20:16.195869-04:00","updated_at":"2026-03-11T18:20:16.195869-04:00","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-omm","depends_on_id":"buyer-5b7","type":"blocks","created_at":"2026-03-11T18:23:59.682215-04:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-omm","depends_on_id":"buyer-1q3","type":"blocks","created_at":"2026-03-11T18:23:59.600847-04:00","created_by":"Brian Tomasette"}]} {"id":"buyer-rsf","title":"5C: DealStore Schema v2 Migration","description":"Add 4 new tables to DealStore via schema v2 migration: deal_templates (reusable deal configs), supply_path_templates (SPO routing preferences with scoring weights), supply_chain_nodes (cached seller supply chain data), deal_activations (cross-platform deal tracking). Also add parent_deal_id column to deals table for deal ID lineage tracking. Update SCHEMA_VERSION to 2.","status":"open","priority":2,"issue_type":"feature","created_at":"2026-03-11T18:19:46.976479-04:00","updated_at":"2026-03-11T18:19:46.976479-04:00","created_by":"Brian Tomasette"} {"id":"buyer-shp","title":"5I: Get Deal Performance Tool","description":"Create GetDealPerformanceTool in tools/deal_jockey/. Calls seller's GET /api/v1/deals/{id}/performance endpoint. Returns fill_rate, win_rate, delivery_pacing, avg_cpm_actual. Updates supply_chain_nodes table with performance data for SPO feedback loop.","status":"open","priority":2,"issue_type":"feature","created_at":"2026-03-11T18:20:02.185608-04:00","updated_at":"2026-03-11T18:20:02.185608-04:00","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-shp","depends_on_id":"buyer-1kn","type":"blocks","created_at":"2026-03-11T18:23:58.944896-04:00","created_by":"Brian Tomasette"}]} {"id":"buyer-u8l","title":"2B: Campaign Brief to Deal Pipeline","description":"End-to-end automated pipeline from campaign brief JSON to booked deals with Deal IDs. Integrates audience planning (UCP), inventory discovery (media kit), pricing evaluation, negotiation, and booking into a single flow. Extends the existing DealBookingFlow and DSPDealFlow with auth (1A), negotiation (1E), and session (1F) capabilities.","status":"open","priority":2,"issue_type":"feature","created_at":"2026-03-04T14:22:09.518678-05:00","updated_at":"2026-03-04T14:22:09.518678-05:00","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-u8l","depends_on_id":"buyer-jin","type":"blocks","created_at":"2026-03-04T14:22:30.158158-05:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-u8l","depends_on_id":"buyer-llu","type":"blocks","created_at":"2026-03-04T14:22:30.287825-05:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-u8l","depends_on_id":"buyer-1ku","type":"blocks","created_at":"2026-03-04T14:22:30.414428-05:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-u8l","depends_on_id":"buyer-8rb","type":"blocks","created_at":"2026-03-04T14:22:30.549518-05:00","created_by":"Brian Tomasette"}]} {"id":"buyer-w5c","title":"3E: Builder Guides for Vertical Customization","description":"Guides for customizing the buyer agent for specific verticals (retail media, pharma, automotive, financial services). Covers: adding custom Level 2 channel specialists, configuring deal type preferences per vertical, custom audience taxonomy mapping, vertical-specific compliance rules (e.g. pharma pre-clearance), and integration patterns for vertical-specific DSPs. Mirrors seller's 3B (seller-nur).","status":"open","priority":2,"issue_type":"task","created_at":"2026-03-04T14:27:32.864232-05:00","updated_at":"2026-03-04T14:27:32.864232-05:00","created_by":"Brian Tomasette"} -{"id":"buyer-wwf","title":"3D-Phase2: Mediaocean Lumina (Linear TV)","description":"Integrate with Mediaocean Lumina for linear TV order management. Lumina is the linear TV buying and stewardship platform used by agencies for national and local TV. Integration enables: linear TV buy plan import, daypart/program-level order placement, makegood tracking and resolution, post-log reconciliation, and audience delivery verification (Nielsen/Comscore). The Linear TV buyer agent (1G) should use Lumina as its order management backbone. Supports TIP standard for electronic avails, orders, and invoicing with sellers.","status":"open","priority":2,"issue_type":"feature","created_at":"2026-03-05T12:36:23.574598-05:00","updated_at":"2026-03-05T12:36:23.574598-05:00","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-wwf","depends_on_id":"buyer-je8","type":"blocks","created_at":"2026-03-05T12:36:30.869278-05:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-wwf","depends_on_id":"buyer-6io","type":"blocks","created_at":"2026-03-05T12:36:31.011477-05:00","created_by":"Brian Tomasette"}]} +{"id":"buyer-wwf","title":"3D-Phase2: Mediaocean Lumina (Linear TV)","description":"Integrate with Mediaocean Lumina for linear TV order management. Lumina is the linear TV buying and stewardship platform used by agencies for national and local TV. Integration enables: linear TV buy plan import, daypart/program-level order placement, makegood tracking and resolution, post-log reconciliation, and audience delivery verification (Nielsen/Comscore). The Linear TV buyer agent (1G) should use Lumina as its order management backbone. Supports TIP standard for electronic avails, orders, and invoicing with sellers.","status":"open","priority":2,"issue_type":"feature","created_at":"2026-03-05T12:36:23.574598-05:00","updated_at":"2026-03-05T12:36:23.574598-05:00","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-wwf","depends_on_id":"buyer-6io","type":"blocks","created_at":"2026-03-05T12:36:31.011477-05:00","created_by":"Brian Tomasette"},{"issue_id":"buyer-wwf","depends_on_id":"buyer-je8","type":"blocks","created_at":"2026-03-05T12:36:30.869278-05:00","created_by":"Brian Tomasette"}]} {"id":"buyer-xgc","title":"5O: External Optimization Provider Registration","description":"CrewAI tool/skill interface for third-party providers (e.g., Agent Range) to register DealReplacementStrategy and SupplyPathScorer implementations. DealJockeyFlow checks for registered provider at optimization steps — if none registered, falls back to built-in rules. Providers are inputs to the Deal Jockey, not the Deal Jockey itself.","status":"open","priority":2,"issue_type":"feature","created_at":"2026-03-11T18:20:20.991087-04:00","updated_at":"2026-03-11T18:20:20.991087-04:00","created_by":"Brian Tomasette","dependencies":[{"issue_id":"buyer-xgc","depends_on_id":"buyer-omm","type":"blocks","created_at":"2026-03-11T18:23:59.762565-04:00","created_by":"Brian Tomasette"}]} {"id":"buyer-zzq","title":"3C: API \u0026 SDK Documentation","description":"Comprehensive documentation for the buyer system: API reference for REST endpoints, SDK usage guide for UnifiedClient, agent configuration guide, protocol selection guide (MCP vs A2A vs UCP), and deployment instructions.","status":"open","priority":3,"issue_type":"task","created_at":"2026-03-04T14:22:23.116223-05:00","updated_at":"2026-03-04T14:22:23.116223-05:00","created_by":"Brian Tomasette"}