Skip to main content
Glama

SalesMap

Save seller profile

seller_profile

Price: free. Saves and reads the user's facts about their own company, kept in the user's SalesMap workspace (one entry per seller site, seen by that workspace only): who they are, company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions, do-not-contact. discover starts from it. Returns the saved profile, the key fields still missing (ICP, buyer roles) and a question for each. Also returns signals, the buying signals discover's account search looks for: the saved needPatterns, signalFamilies and signalTypes, addMore (the signal types it can detect, in 8 families: save the families the user switches on as signalFamilies, and discover drafts 2 or 3 signals for each; or a type by id as signalTypes) and, with the ICP and buyer roles known and no patterns saved, draft: the drafting prompt for the calling agent's model, which returns this seller's drafted signals. Use when: "remember that we sell to …", "save or update my ICP / buyer roles / customers", "our competitors are …", "don't target these accounts", "what do you know about my company / my profile", before the first list for a seller. Skip when: the question is about a prospect company, not the user's own, or about a watch on closed-lost deals and which are ready again. The saved fields are the user's inputs, not findings. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.

Input Schema

NameRequiredDescriptionDefault
sellerYesThe user's own company site, e.g. getklira.com
contextNoFields to save, merged into the saved profile field by field. Omit to read.

Output Schema

NameRequiredDescriptionDefault
costNo
pathYes
savedYes
sellerYes
missingYes
profileYes
signalsNo
questionsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • addedInput schema / properties / context / properties / disqualifiers
      Added value: +{
      +  "description": "Conditions that rule a company out even inside the ICP, each a few words, e.g. \"already uses a competitor's product\", \"has an in-house data team\", \"public sector\". Discover checks each against the sources it reads: one a quoted source shows is flagged in checkFirst and ranked lower (dropped under hard \"disqualifier\") and never billed; one no source shows is \"not checked\", never assumed",
      +  "items": {
      +    "maxLength": 160,
      +    "minLength": 3,
      +    "type": "string"
      +  },
      +  "maxItems": 8,
      +  "type": "array"
      +}
    • changedInput schema / properties / context / properties / hard / description
      Previous value: -"Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it"New value: +"Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in, \"disqualifier\" drops those a source shows meet one of `disqualifiers`. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it"
    • changedInput schema / properties / context / properties / hard / items / enum
      Previous value: -[
      -  "size",
      -  "fit",
      -  "intent"
      -]New value: +[
      +  "size",
      +  "fit",
      +  "intent",
      +  "disqualifier"
      +]
    • changedInput schema / properties / context / properties / hard / maxItems
      Previous value: -3New value: +4
    • changedOutput schema / properties / profile / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "buyerRoles": {
      -        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "city": {
      -        "description": "The user's own city, for events near them (in person within 50 km); never narrows who discover looks for",
      -        "maxLength": 120,
      -        "type": "string"
      -      },
      -      "company": {
      -        "description": "The seller company's name",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "competitors": {
      -        "description": "Competitors, as domains or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "customers": {
      -        "description": "Current customers, as domains (acme.com) or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "doNotContact": {
      -        "description": "Companies the user said never to contact (domains)",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "employees": {
      -        "additionalProperties": false,
      -        "description": "Headcount band the seller can close, when the user has said",
      -        "properties": {
      -          "max": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "min": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "exclusions": {
      -        "description": "Companies or kinds of company to leave out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "hard": {
      -        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      -        "items": {
      -          "enum": [
      -            "size",
      -            "fit",
      -            "intent"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 3,
      -        "type": "array"
      -      },
      -      "icp": {
      -        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "investors": {
      -        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "lost": {
      -        "description": "Deals lost or churned (domains or names), with why if known",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "needPatterns": {
      -        "description": "What a buying need for the seller's offer looks like: each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words. Discover drafts them when left out and returns them to review; only signals matching one rank",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "family": {
      -              "enum": [
      -                "hiring",
      -                "company_events",
      -                "product_site",
      -                "news_compliance",
      -                "tools",
      -                "people_moves",
      -                "competitor_events",
      -                "public_intent"
      -              ],
      -              "type": "string"
      -            },
      -            "need": {
      -              "maxLength": 160,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "proof": {
      -              "maxLength": 300,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "titles": {
      -              "items": {
      -                "maxLength": 60,
      -                "minLength": 3,
      -                "type": "string"
      -              },
      -              "maxItems": 8,
      -              "type": "array"
      -            },
      -            "where": {
      -              "items": {
      -                "enum": [
      -                  "jobs",
      -                  "tools",
      -                  "news",
      -                  "site",
      -                  "ai_adoption"
      -                ],
      -                "type": "string"
      -              },
      -              "maxItems": 5,
      -              "minItems": 1,
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "need",
      -            "where",
      -            "proof"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 24,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "notes": {
      -        "description": "Anything else the user said that should shape the list",
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "openDeals": {
      -        "description": "Companies in an open deal (domains): left out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "product": {
      -        "description": "What the seller sells, in a sentence or two",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "regions": {
      -        "description": "Regions or countries the seller sells into",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "segments": {
      -        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "signalFamilies": {
      -        "description": "The signal families the user switched on (the families of `signals.addMore`, by id). Discover drafts 2 or 3 need patterns for each, worded for the seller's offer, and drops patterns in a family switched off; left out, it drafts 5 to 8 across all",
      -        "items": {
      -          "enum": [
      -            "hiring",
      -            "company_events",
      -            "product_site",
      -            "news_compliance",
      -            "tools",
      -            "people_moves",
      -            "competitor_events",
      -            "public_intent"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 8,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "signalTypes": {
      -        "description": "Catalog signal types the user added from the \"add more\" list, by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      -        "items": {
      -          "enum": [
      -            "job_posting_buyer_role",
      -            "job_posting_mentions_tool",
      -            "hiring_surge_function",
      -            "headcount_growth",
      -            "role_reopened",
      -            "layoffs",
      -            "hiring_freeze",
      -            "function_attrition",
      -            "employee_sentiment_drop",
      -            "funding_round",
      -            "funding_use_of_funds_match",
      -            "debt_financing",
      -            "ipo_filing",
      -            "acquires_company",
      -            "company_acquired",
      -            "spin_off_carve_out",
      -            "geo_expansion",
      -            "partnership_announced",
      -            "partnership_ended",
      -            "prospect_loses_client",
      -            "revenue_decline",
      -            "distress_bankruptcy",
      -            "earnings_call_mention",
      -            "annual_report_insight",
      -            "company_register_change",
      -            "product_launch",
      -            "website_relaunch",
      -            "site_section_added",
      -            "pricing_change",
      -            "legal_page_change",
      -            "new_public_repo_by_topic",
      -            "own_incident_spike",
      -            "public_symptom_visible",
      -            "own_customer_reviews_negative",
      -            "event_sponsorship",
      -            "compliance_pursuit",
      -            "regulation_deadline",
      -            "regulatory_exposure",
      -            "platform_policy_change",
      -            "data_breach",
      -            "peer_company_incident",
      -            "litigation",
      -            "positive_media",
      -            "negative_media",
      -            "award_recognition",
      -            "tech_adoption_adjacent",
      -            "competitor_installed",
      -            "competitor_newly_adopted",
      -            "overlapping_tools_in_category",
      -            "recent_software_purchases",
      -            "outbound_domains_registered",
      -            "mcp_server_published",
      -            "hf_org_paid_plan",
      -            "bug_bounty_ai_scope",
      -            "new_exec_buyer_role",
      -            "exec_departure",
      -            "first_hire_in_function",
      -            "competitor_outage_deprecation",
      -            "competitor_acquired_closed",
      -            "competitor_logo_removed",
      -            "competitor_positioning_change",
      -            "competitor_banned_or_sanctioned",
      -            "social_post_about_problem",
      -            "podcast_or_talk_appearance",
      -            "exec_public_appearance",
      -            "named_project_underway",
      -            "customer_peer_reference"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 15,
      -        "type": "array"
      -      },
      -      "user": {
      -        "additionalProperties": false,
      -        "description": "Who the user is: their name, role at the seller and LinkedIn profile URL",
      -        "properties": {
      -          "linkedinUrl": {
      -            "description": "The user's own LinkedIn profile URL; kept in the workspace, never sent to a model",
      -            "pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
      -            "type": "string"
      -          },
      -          "name": {
      -            "maxLength": 120,
      -            "type": "string"
      -          },
      -          "role": {
      -            "maxLength": 120,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "warmPaths": {
      -        "description": "Warm paths the user confirmed: company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "company": {
      -              "maxLength": 200,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "confirmedAt": {
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "path": {
      -              "maxLength": 300,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "company",
      -            "path"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "won": {
      -        "description": "Deals won (domains or names): the pattern to find more of",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "ycBatch": {
      -        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      -        "maxLength": 40,
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "buyerRoles": {
      +        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "city": {
      +        "description": "The user's own city, for events near them (in person within 50 km); never narrows who discover looks for",
      +        "maxLength": 120,
      +        "type": "string"
      +      },
      +      "company": {
      +        "description": "The seller company's name",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "competitors": {
      +        "description": "Competitors, as domains or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "customers": {
      +        "description": "Current customers, as domains (acme.com) or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "disqualifiers": {
      +        "description": "Conditions that rule a company out even inside the ICP, each a few words, e.g. \"already uses a competitor's product\", \"has an in-house data team\", \"public sector\". Discover checks each against the sources it reads: one a quoted source shows is flagged in checkFirst and ranked lower (dropped under hard \"disqualifier\") and never billed; one no source shows is \"not checked\", never assumed",
      +        "items": {
      +          "maxLength": 160,
      +          "minLength": 3,
      +          "type": "string"
      +        },
      +        "maxItems": 8,
      +        "type": "array"
      +      },
      +      "doNotContact": {
      +        "description": "Companies the user said never to contact (domains)",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "employees": {
      +        "additionalProperties": false,
      +        "description": "Headcount band the seller can close, when the user has said",
      +        "properties": {
      +          "max": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "min": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "exclusions": {
      +        "description": "Companies or kinds of company to leave out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "hard": {
      +        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in, \"disqualifier\" drops those a source shows meet one of `disqualifiers`. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      +        "items": {
      +          "enum": [
      +            "size",
      +            "fit",
      +            "intent",
      +            "disqualifier"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 4,
      +        "type": "array"
      +      },
      +      "icp": {
      +        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "investors": {
      +        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "lost": {
      +        "description": "Deals lost or churned (domains or names), with why if known",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "needPatterns": {
      +        "description": "What a buying need for the seller's offer looks like: each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words. Discover drafts them when left out and returns them to review; only signals matching one rank",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "family": {
      +              "enum": [
      +                "hiring",
      +                "company_events",
      +                "product_site",
      +                "news_compliance",
      +                "tools",
      +                "people_moves",
      +                "competitor_events",
      +                "public_intent"
      +              ],
      +              "type": "string"
      +            },
      +            "need": {
      +              "maxLength": 160,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "proof": {
      +              "maxLength": 300,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "titles": {
      +              "items": {
      +                "maxLength": 60,
      +                "minLength": 3,
      +                "type": "string"
      +              },
      +              "maxItems": 8,
      +              "type": "array"
      +            },
      +            "where": {
      +              "items": {
      +                "enum": [
      +                  "jobs",
      +                  "tools",
      +                  "news",
      +                  "site",
      +                  "ai_adoption"
      +                ],
      +                "type": "string"
      +              },
      +              "maxItems": 5,
      +              "minItems": 1,
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "need",
      +            "where",
      +            "proof"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 24,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "notes": {
      +        "description": "Anything else the user said that should shape the list",
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "openDeals": {
      +        "description": "Companies in an open deal (domains): left out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "product": {
      +        "description": "What the seller sells, in a sentence or two",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "regions": {
      +        "description": "Regions or countries the seller sells into",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "segments": {
      +        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "signalFamilies": {
      +        "description": "The signal families the user switched on (the families of `signals.addMore`, by id). Discover drafts 2 or 3 need patterns for each, worded for the seller's offer, and drops patterns in a family switched off; left out, it drafts 5 to 8 across all",
      +        "items": {
      +          "enum": [
      +            "hiring",
      +            "company_events",
      +            "product_site",
      +            "news_compliance",
      +            "tools",
      +            "people_moves",
      +            "competitor_events",
      +            "public_intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 8,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "signalTypes": {
      +        "description": "Catalog signal types the user added from the \"add more\" list, by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      +        "items": {
      +          "enum": [
      +            "job_posting_buyer_role",
      +            "job_posting_mentions_tool",
      +            "hiring_surge_function",
      +            "headcount_growth",
      +            "role_reopened",
      +            "layoffs",
      +            "hiring_freeze",
      +            "function_attrition",
      +            "employee_sentiment_drop",
      +            "funding_round",
      +            "funding_use_of_funds_match",
      +            "debt_financing",
      +            "ipo_filing",
      +            "acquires_company",
      +            "company_acquired",
      +            "spin_off_carve_out",
      +            "geo_expansion",
      +            "partnership_announced",
      +            "partnership_ended",
      +            "prospect_loses_client",
      +            "revenue_decline",
      +            "distress_bankruptcy",
      +            "earnings_call_mention",
      +            "annual_report_insight",
      +            "company_register_change",
      +            "product_launch",
      +            "website_relaunch",
      +            "site_section_added",
      +            "pricing_change",
      +            "legal_page_change",
      +            "new_public_repo_by_topic",
      +            "own_incident_spike",
      +            "public_symptom_visible",
      +            "own_customer_reviews_negative",
      +            "event_sponsorship",
      +            "compliance_pursuit",
      +            "regulation_deadline",
      +            "regulatory_exposure",
      +            "platform_policy_change",
      +            "data_breach",
      +            "peer_company_incident",
      +            "litigation",
      +            "positive_media",
      +            "negative_media",
      +            "award_recognition",
      +            "tech_adoption_adjacent",
      +            "competitor_installed",
      +            "competitor_newly_adopted",
      +            "overlapping_tools_in_category",
      +            "recent_software_purchases",
      +            "outbound_domains_registered",
      +            "mcp_server_published",
      +            "hf_org_paid_plan",
      +            "bug_bounty_ai_scope",
      +            "new_exec_buyer_role",
      +            "exec_departure",
      +            "first_hire_in_function",
      +            "competitor_outage_deprecation",
      +            "competitor_acquired_closed",
      +            "competitor_logo_removed",
      +            "competitor_positioning_change",
      +            "competitor_banned_or_sanctioned",
      +            "social_post_about_problem",
      +            "podcast_or_talk_appearance",
      +            "exec_public_appearance",
      +            "named_project_underway",
      +            "customer_peer_reference"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 15,
      +        "type": "array"
      +      },
      +      "user": {
      +        "additionalProperties": false,
      +        "description": "Who the user is: their name, role at the seller and LinkedIn profile URL",
      +        "properties": {
      +          "linkedinUrl": {
      +            "description": "The user's own LinkedIn profile URL; kept in the workspace, never sent to a model",
      +            "pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
      +            "type": "string"
      +          },
      +          "name": {
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "role": {
      +            "maxLength": 120,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "warmPaths": {
      +        "description": "Warm paths the user confirmed: company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "company": {
      +              "maxLength": 200,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "confirmedAt": {
      +              "format": "date",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +              "type": "string"
      +            },
      +            "path": {
      +              "maxLength": 300,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "company",
      +            "path"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "won": {
      +        "description": "Deals won (domains or names): the pattern to find more of",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "ycBatch": {
      +        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      +        "maxLength": 40,
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Changed3 schema fields changed
    • addedInput schema / properties / context / properties / needPatterns / items / properties / titles
      Added value: +{
      +  "items": {
      +    "maxLength": 60,
      +    "minLength": 3,
      +    "type": "string"
      +  },
      +  "maxItems": 8,
      +  "type": "array"
      +}
    • changedOutput schema / properties / profile / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "buyerRoles": {
      -        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "city": {
      -        "description": "The user's own city, for events near them (in person within 50 km); never narrows who discover looks for",
      -        "maxLength": 120,
      -        "type": "string"
      -      },
      -      "company": {
      -        "description": "The seller company's name",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "competitors": {
      -        "description": "Competitors, as domains or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "customers": {
      -        "description": "Current customers, as domains (acme.com) or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "doNotContact": {
      -        "description": "Companies the user said never to contact (domains)",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "employees": {
      -        "additionalProperties": false,
      -        "description": "Headcount band the seller can close, when the user has said",
      -        "properties": {
      -          "max": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "min": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "exclusions": {
      -        "description": "Companies or kinds of company to leave out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "hard": {
      -        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      -        "items": {
      -          "enum": [
      -            "size",
      -            "fit",
      -            "intent"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 3,
      -        "type": "array"
      -      },
      -      "icp": {
      -        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "investors": {
      -        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "lost": {
      -        "description": "Deals lost or churned (domains or names), with why if known",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "needPatterns": {
      -        "description": "What a buying need for the seller's offer looks like: each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words. Discover drafts them when left out and returns them to review; only signals matching one rank",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "family": {
      -              "enum": [
      -                "hiring",
      -                "company_events",
      -                "product_site",
      -                "news_compliance",
      -                "tools",
      -                "people_moves",
      -                "competitor_events",
      -                "public_intent"
      -              ],
      -              "type": "string"
      -            },
      -            "need": {
      -              "maxLength": 160,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "proof": {
      -              "maxLength": 300,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "where": {
      -              "items": {
      -                "enum": [
      -                  "jobs",
      -                  "tools",
      -                  "news",
      -                  "site",
      -                  "ai_adoption"
      -                ],
      -                "type": "string"
      -              },
      -              "maxItems": 5,
      -              "minItems": 1,
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "need",
      -            "where",
      -            "proof"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 24,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "notes": {
      -        "description": "Anything else the user said that should shape the list",
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "openDeals": {
      -        "description": "Companies in an open deal (domains): left out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "product": {
      -        "description": "What the seller sells, in a sentence or two",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "regions": {
      -        "description": "Regions or countries the seller sells into",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "segments": {
      -        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "signalFamilies": {
      -        "description": "The signal families the user switched on (the families of `signals.addMore`, by id). Discover drafts 2 or 3 need patterns for each, worded for the seller's offer, and drops patterns in a family switched off; left out, it drafts 5 to 8 across all",
      -        "items": {
      -          "enum": [
      -            "hiring",
      -            "company_events",
      -            "product_site",
      -            "news_compliance",
      -            "tools",
      -            "people_moves",
      -            "competitor_events",
      -            "public_intent"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 8,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "signalTypes": {
      -        "description": "Catalog signal types the user added from the \"add more\" list, by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      -        "items": {
      -          "enum": [
      -            "job_posting_buyer_role",
      -            "job_posting_mentions_tool",
      -            "hiring_surge_function",
      -            "headcount_growth",
      -            "role_reopened",
      -            "layoffs",
      -            "hiring_freeze",
      -            "function_attrition",
      -            "employee_sentiment_drop",
      -            "funding_round",
      -            "funding_use_of_funds_match",
      -            "debt_financing",
      -            "ipo_filing",
      -            "acquires_company",
      -            "company_acquired",
      -            "spin_off_carve_out",
      -            "geo_expansion",
      -            "partnership_announced",
      -            "partnership_ended",
      -            "prospect_loses_client",
      -            "revenue_decline",
      -            "distress_bankruptcy",
      -            "earnings_call_mention",
      -            "annual_report_insight",
      -            "company_register_change",
      -            "product_launch",
      -            "website_relaunch",
      -            "site_section_added",
      -            "pricing_change",
      -            "legal_page_change",
      -            "new_public_repo_by_topic",
      -            "own_incident_spike",
      -            "public_symptom_visible",
      -            "own_customer_reviews_negative",
      -            "event_sponsorship",
      -            "compliance_pursuit",
      -            "regulation_deadline",
      -            "regulatory_exposure",
      -            "platform_policy_change",
      -            "data_breach",
      -            "peer_company_incident",
      -            "litigation",
      -            "positive_media",
      -            "negative_media",
      -            "award_recognition",
      -            "tech_adoption_adjacent",
      -            "competitor_installed",
      -            "competitor_newly_adopted",
      -            "overlapping_tools_in_category",
      -            "recent_software_purchases",
      -            "outbound_domains_registered",
      -            "mcp_server_published",
      -            "hf_org_paid_plan",
      -            "bug_bounty_ai_scope",
      -            "new_exec_buyer_role",
      -            "exec_departure",
      -            "first_hire_in_function",
      -            "competitor_outage_deprecation",
      -            "competitor_acquired_closed",
      -            "competitor_logo_removed",
      -            "competitor_positioning_change",
      -            "competitor_banned_or_sanctioned",
      -            "social_post_about_problem",
      -            "podcast_or_talk_appearance",
      -            "exec_public_appearance",
      -            "named_project_underway",
      -            "customer_peer_reference"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 15,
      -        "type": "array"
      -      },
      -      "user": {
      -        "additionalProperties": false,
      -        "description": "Who the user is: their name, role at the seller and LinkedIn profile URL",
      -        "properties": {
      -          "linkedinUrl": {
      -            "description": "The user's own LinkedIn profile URL; kept in the workspace, never sent to a model",
      -            "pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
      -            "type": "string"
      -          },
      -          "name": {
      -            "maxLength": 120,
      -            "type": "string"
      -          },
      -          "role": {
      -            "maxLength": 120,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "warmPaths": {
      -        "description": "Warm paths the user confirmed: company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "company": {
      -              "maxLength": 200,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "confirmedAt": {
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "path": {
      -              "maxLength": 300,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "company",
      -            "path"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "won": {
      -        "description": "Deals won (domains or names): the pattern to find more of",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "ycBatch": {
      -        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      -        "maxLength": 40,
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "buyerRoles": {
      +        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "city": {
      +        "description": "The user's own city, for events near them (in person within 50 km); never narrows who discover looks for",
      +        "maxLength": 120,
      +        "type": "string"
      +      },
      +      "company": {
      +        "description": "The seller company's name",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "competitors": {
      +        "description": "Competitors, as domains or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "customers": {
      +        "description": "Current customers, as domains (acme.com) or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "doNotContact": {
      +        "description": "Companies the user said never to contact (domains)",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "employees": {
      +        "additionalProperties": false,
      +        "description": "Headcount band the seller can close, when the user has said",
      +        "properties": {
      +          "max": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "min": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "exclusions": {
      +        "description": "Companies or kinds of company to leave out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "hard": {
      +        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      +        "items": {
      +          "enum": [
      +            "size",
      +            "fit",
      +            "intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 3,
      +        "type": "array"
      +      },
      +      "icp": {
      +        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "investors": {
      +        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "lost": {
      +        "description": "Deals lost or churned (domains or names), with why if known",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "needPatterns": {
      +        "description": "What a buying need for the seller's offer looks like: each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words. Discover drafts them when left out and returns them to review; only signals matching one rank",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "family": {
      +              "enum": [
      +                "hiring",
      +                "company_events",
      +                "product_site",
      +                "news_compliance",
      +                "tools",
      +                "people_moves",
      +                "competitor_events",
      +                "public_intent"
      +              ],
      +              "type": "string"
      +            },
      +            "need": {
      +              "maxLength": 160,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "proof": {
      +              "maxLength": 300,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "titles": {
      +              "items": {
      +                "maxLength": 60,
      +                "minLength": 3,
      +                "type": "string"
      +              },
      +              "maxItems": 8,
      +              "type": "array"
      +            },
      +            "where": {
      +              "items": {
      +                "enum": [
      +                  "jobs",
      +                  "tools",
      +                  "news",
      +                  "site",
      +                  "ai_adoption"
      +                ],
      +                "type": "string"
      +              },
      +              "maxItems": 5,
      +              "minItems": 1,
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "need",
      +            "where",
      +            "proof"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 24,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "notes": {
      +        "description": "Anything else the user said that should shape the list",
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "openDeals": {
      +        "description": "Companies in an open deal (domains): left out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "product": {
      +        "description": "What the seller sells, in a sentence or two",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "regions": {
      +        "description": "Regions or countries the seller sells into",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "segments": {
      +        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "signalFamilies": {
      +        "description": "The signal families the user switched on (the families of `signals.addMore`, by id). Discover drafts 2 or 3 need patterns for each, worded for the seller's offer, and drops patterns in a family switched off; left out, it drafts 5 to 8 across all",
      +        "items": {
      +          "enum": [
      +            "hiring",
      +            "company_events",
      +            "product_site",
      +            "news_compliance",
      +            "tools",
      +            "people_moves",
      +            "competitor_events",
      +            "public_intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 8,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "signalTypes": {
      +        "description": "Catalog signal types the user added from the \"add more\" list, by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      +        "items": {
      +          "enum": [
      +            "job_posting_buyer_role",
      +            "job_posting_mentions_tool",
      +            "hiring_surge_function",
      +            "headcount_growth",
      +            "role_reopened",
      +            "layoffs",
      +            "hiring_freeze",
      +            "function_attrition",
      +            "employee_sentiment_drop",
      +            "funding_round",
      +            "funding_use_of_funds_match",
      +            "debt_financing",
      +            "ipo_filing",
      +            "acquires_company",
      +            "company_acquired",
      +            "spin_off_carve_out",
      +            "geo_expansion",
      +            "partnership_announced",
      +            "partnership_ended",
      +            "prospect_loses_client",
      +            "revenue_decline",
      +            "distress_bankruptcy",
      +            "earnings_call_mention",
      +            "annual_report_insight",
      +            "company_register_change",
      +            "product_launch",
      +            "website_relaunch",
      +            "site_section_added",
      +            "pricing_change",
      +            "legal_page_change",
      +            "new_public_repo_by_topic",
      +            "own_incident_spike",
      +            "public_symptom_visible",
      +            "own_customer_reviews_negative",
      +            "event_sponsorship",
      +            "compliance_pursuit",
      +            "regulation_deadline",
      +            "regulatory_exposure",
      +            "platform_policy_change",
      +            "data_breach",
      +            "peer_company_incident",
      +            "litigation",
      +            "positive_media",
      +            "negative_media",
      +            "award_recognition",
      +            "tech_adoption_adjacent",
      +            "competitor_installed",
      +            "competitor_newly_adopted",
      +            "overlapping_tools_in_category",
      +            "recent_software_purchases",
      +            "outbound_domains_registered",
      +            "mcp_server_published",
      +            "hf_org_paid_plan",
      +            "bug_bounty_ai_scope",
      +            "new_exec_buyer_role",
      +            "exec_departure",
      +            "first_hire_in_function",
      +            "competitor_outage_deprecation",
      +            "competitor_acquired_closed",
      +            "competitor_logo_removed",
      +            "competitor_positioning_change",
      +            "competitor_banned_or_sanctioned",
      +            "social_post_about_problem",
      +            "podcast_or_talk_appearance",
      +            "exec_public_appearance",
      +            "named_project_underway",
      +            "customer_peer_reference"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 15,
      +        "type": "array"
      +      },
      +      "user": {
      +        "additionalProperties": false,
      +        "description": "Who the user is: their name, role at the seller and LinkedIn profile URL",
      +        "properties": {
      +          "linkedinUrl": {
      +            "description": "The user's own LinkedIn profile URL; kept in the workspace, never sent to a model",
      +            "pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
      +            "type": "string"
      +          },
      +          "name": {
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "role": {
      +            "maxLength": 120,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "warmPaths": {
      +        "description": "Warm paths the user confirmed: company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "company": {
      +              "maxLength": 200,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "confirmedAt": {
      +              "format": "date",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +              "type": "string"
      +            },
      +            "path": {
      +              "maxLength": 300,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "company",
      +            "path"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "won": {
      +        "description": "Deals won (domains or names): the pattern to find more of",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "ycBatch": {
      +        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      +        "maxLength": 40,
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / signals / properties / needPatterns / items / properties / titles
      Added value: +{
      +  "items": {
      +    "maxLength": 60,
      +    "minLength": 3,
      +    "type": "string"
      +  },
      +  "maxItems": 8,
      +  "type": "array"
      +}
  3. Changed13 schema fields changed
    • changedInput schema / properties / context / properties / needPatterns / description
      Previous value: -"What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words (s97). Discover drafts them when left out and returns them to review; only signals matching one rank"New value: +"What a buying need for the seller's offer looks like: each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words. Discover drafts them when left out and returns them to review; only signals matching one rank"
    • changedInput schema / properties / context / properties / signalTypes / description
      Previous value: -"Catalog signal types the user added from the \"add more\" list (s97), by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none"New value: +"Catalog signal types the user added from the \"add more\" list, by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none"
    • changedInput schema / properties / context / properties / warmPaths / description
      Previous value: -"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model"New value: +"Warm paths the user confirmed: company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model"
    • addedOutput schema / properties / cost / properties / balanceCredits
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • removedOutput schema / properties / cost / properties / balanceUsd
      Removed value: -{
      -  "type": [
      -    "number",
      -    "null"
      -  ]
      -}
    • addedOutput schema / properties / cost / properties / chargedCredits
      Added value: +{
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • removedOutput schema / properties / cost / properties / chargedUsd
      Removed value: -{
      -  "type": "number"
      -}
    • addedOutput schema / properties / cost / properties / heldCredits
      Added value: +{
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • removedOutput schema / properties / cost / properties / heldUsd
      Removed value: -{
      -  "type": "number"
      -}
    • addedOutput schema / properties / cost / properties / notChargedCredits
      Added value: +{
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • removedOutput schema / properties / cost / properties / notChargedUsd
      Removed value: -{
      -  "type": "number"
      -}
    • changedOutput schema / properties / cost / required
      Previous value: -[
      -  "chargedUsd",
      -  "notChargedUsd",
      -  "balanceUsd"
      -]New value: +[
      +  "chargedCredits",
      +  "notChargedCredits",
      +  "balanceCredits"
      +]
    • changedOutput schema / properties / profile / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "buyerRoles": {
      -        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "city": {
      -        "description": "The user's own city, for events near them (in person within 50 km); never narrows who discover looks for",
      -        "maxLength": 120,
      -        "type": "string"
      -      },
      -      "company": {
      -        "description": "The seller company's name",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "competitors": {
      -        "description": "Competitors, as domains or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "customers": {
      -        "description": "Current customers, as domains (acme.com) or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "doNotContact": {
      -        "description": "Companies the user said never to contact (domains)",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "employees": {
      -        "additionalProperties": false,
      -        "description": "Headcount band the seller can close, when the user has said",
      -        "properties": {
      -          "max": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "min": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "exclusions": {
      -        "description": "Companies or kinds of company to leave out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "hard": {
      -        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      -        "items": {
      -          "enum": [
      -            "size",
      -            "fit",
      -            "intent"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 3,
      -        "type": "array"
      -      },
      -      "icp": {
      -        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "investors": {
      -        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "lost": {
      -        "description": "Deals lost or churned (domains or names), with why if known",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "needPatterns": {
      -        "description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words (s97). Discover drafts them when left out and returns them to review; only signals matching one rank",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "family": {
      -              "enum": [
      -                "hiring",
      -                "company_events",
      -                "product_site",
      -                "news_compliance",
      -                "tools",
      -                "people_moves",
      -                "competitor_events",
      -                "public_intent"
      -              ],
      -              "type": "string"
      -            },
      -            "need": {
      -              "maxLength": 160,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "proof": {
      -              "maxLength": 300,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "where": {
      -              "items": {
      -                "enum": [
      -                  "jobs",
      -                  "tools",
      -                  "news",
      -                  "site",
      -                  "ai_adoption"
      -                ],
      -                "type": "string"
      -              },
      -              "maxItems": 5,
      -              "minItems": 1,
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "need",
      -            "where",
      -            "proof"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 24,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "notes": {
      -        "description": "Anything else the user said that should shape the list",
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "openDeals": {
      -        "description": "Companies in an open deal (domains): left out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "product": {
      -        "description": "What the seller sells, in a sentence or two",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "regions": {
      -        "description": "Regions or countries the seller sells into",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "segments": {
      -        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "signalFamilies": {
      -        "description": "The signal families the user switched on (the families of `signals.addMore`, by id). Discover drafts 2 or 3 need patterns for each, worded for the seller's offer, and drops patterns in a family switched off; left out, it drafts 5 to 8 across all",
      -        "items": {
      -          "enum": [
      -            "hiring",
      -            "company_events",
      -            "product_site",
      -            "news_compliance",
      -            "tools",
      -            "people_moves",
      -            "competitor_events",
      -            "public_intent"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 8,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "signalTypes": {
      -        "description": "Catalog signal types the user added from the \"add more\" list (s97), by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      -        "items": {
      -          "enum": [
      -            "job_posting_buyer_role",
      -            "job_posting_mentions_tool",
      -            "hiring_surge_function",
      -            "headcount_growth",
      -            "role_reopened",
      -            "layoffs",
      -            "hiring_freeze",
      -            "function_attrition",
      -            "employee_sentiment_drop",
      -            "funding_round",
      -            "funding_use_of_funds_match",
      -            "debt_financing",
      -            "ipo_filing",
      -            "acquires_company",
      -            "company_acquired",
      -            "spin_off_carve_out",
      -            "geo_expansion",
      -            "partnership_announced",
      -            "partnership_ended",
      -            "prospect_loses_client",
      -            "revenue_decline",
      -            "distress_bankruptcy",
      -            "earnings_call_mention",
      -            "annual_report_insight",
      -            "company_register_change",
      -            "product_launch",
      -            "website_relaunch",
      -            "site_section_added",
      -            "pricing_change",
      -            "legal_page_change",
      -            "new_public_repo_by_topic",
      -            "own_incident_spike",
      -            "public_symptom_visible",
      -            "own_customer_reviews_negative",
      -            "event_sponsorship",
      -            "compliance_pursuit",
      -            "regulation_deadline",
      -            "regulatory_exposure",
      -            "platform_policy_change",
      -            "data_breach",
      -            "peer_company_incident",
      -            "litigation",
      -            "positive_media",
      -            "negative_media",
      -            "award_recognition",
      -            "tech_adoption_adjacent",
      -            "competitor_installed",
      -            "competitor_newly_adopted",
      -            "overlapping_tools_in_category",
      -            "recent_software_purchases",
      -            "outbound_domains_registered",
      -            "mcp_server_published",
      -            "hf_org_paid_plan",
      -            "bug_bounty_ai_scope",
      -            "new_exec_buyer_role",
      -            "exec_departure",
      -            "first_hire_in_function",
      -            "competitor_outage_deprecation",
      -            "competitor_acquired_closed",
      -            "competitor_logo_removed",
      -            "competitor_positioning_change",
      -            "competitor_banned_or_sanctioned",
      -            "social_post_about_problem",
      -            "podcast_or_talk_appearance",
      -            "exec_public_appearance",
      -            "named_project_underway",
      -            "customer_peer_reference"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 15,
      -        "type": "array"
      -      },
      -      "user": {
      -        "additionalProperties": false,
      -        "description": "Who the user is: their name, role at the seller and LinkedIn profile URL",
      -        "properties": {
      -          "linkedinUrl": {
      -            "description": "The user's own LinkedIn profile URL; kept in the workspace, never sent to a model",
      -            "pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
      -            "type": "string"
      -          },
      -          "name": {
      -            "maxLength": 120,
      -            "type": "string"
      -          },
      -          "role": {
      -            "maxLength": 120,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "warmPaths": {
      -        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "company": {
      -              "maxLength": 200,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "confirmedAt": {
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "path": {
      -              "maxLength": 300,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "company",
      -            "path"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "won": {
      -        "description": "Deals won (domains or names): the pattern to find more of",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "ycBatch": {
      -        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      -        "maxLength": 40,
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "buyerRoles": {
      +        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "city": {
      +        "description": "The user's own city, for events near them (in person within 50 km); never narrows who discover looks for",
      +        "maxLength": 120,
      +        "type": "string"
      +      },
      +      "company": {
      +        "description": "The seller company's name",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "competitors": {
      +        "description": "Competitors, as domains or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "customers": {
      +        "description": "Current customers, as domains (acme.com) or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "doNotContact": {
      +        "description": "Companies the user said never to contact (domains)",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "employees": {
      +        "additionalProperties": false,
      +        "description": "Headcount band the seller can close, when the user has said",
      +        "properties": {
      +          "max": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "min": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "exclusions": {
      +        "description": "Companies or kinds of company to leave out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "hard": {
      +        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      +        "items": {
      +          "enum": [
      +            "size",
      +            "fit",
      +            "intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 3,
      +        "type": "array"
      +      },
      +      "icp": {
      +        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "investors": {
      +        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "lost": {
      +        "description": "Deals lost or churned (domains or names), with why if known",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "needPatterns": {
      +        "description": "What a buying need for the seller's offer looks like: each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words. Discover drafts them when left out and returns them to review; only signals matching one rank",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "family": {
      +              "enum": [
      +                "hiring",
      +                "company_events",
      +                "product_site",
      +                "news_compliance",
      +                "tools",
      +                "people_moves",
      +                "competitor_events",
      +                "public_intent"
      +              ],
      +              "type": "string"
      +            },
      +            "need": {
      +              "maxLength": 160,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "proof": {
      +              "maxLength": 300,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "where": {
      +              "items": {
      +                "enum": [
      +                  "jobs",
      +                  "tools",
      +                  "news",
      +                  "site",
      +                  "ai_adoption"
      +                ],
      +                "type": "string"
      +              },
      +              "maxItems": 5,
      +              "minItems": 1,
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "need",
      +            "where",
      +            "proof"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 24,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "notes": {
      +        "description": "Anything else the user said that should shape the list",
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "openDeals": {
      +        "description": "Companies in an open deal (domains): left out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "product": {
      +        "description": "What the seller sells, in a sentence or two",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "regions": {
      +        "description": "Regions or countries the seller sells into",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "segments": {
      +        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "signalFamilies": {
      +        "description": "The signal families the user switched on (the families of `signals.addMore`, by id). Discover drafts 2 or 3 need patterns for each, worded for the seller's offer, and drops patterns in a family switched off; left out, it drafts 5 to 8 across all",
      +        "items": {
      +          "enum": [
      +            "hiring",
      +            "company_events",
      +            "product_site",
      +            "news_compliance",
      +            "tools",
      +            "people_moves",
      +            "competitor_events",
      +            "public_intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 8,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "signalTypes": {
      +        "description": "Catalog signal types the user added from the \"add more\" list, by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      +        "items": {
      +          "enum": [
      +            "job_posting_buyer_role",
      +            "job_posting_mentions_tool",
      +            "hiring_surge_function",
      +            "headcount_growth",
      +            "role_reopened",
      +            "layoffs",
      +            "hiring_freeze",
      +            "function_attrition",
      +            "employee_sentiment_drop",
      +            "funding_round",
      +            "funding_use_of_funds_match",
      +            "debt_financing",
      +            "ipo_filing",
      +            "acquires_company",
      +            "company_acquired",
      +            "spin_off_carve_out",
      +            "geo_expansion",
      +            "partnership_announced",
      +            "partnership_ended",
      +            "prospect_loses_client",
      +            "revenue_decline",
      +            "distress_bankruptcy",
      +            "earnings_call_mention",
      +            "annual_report_insight",
      +            "company_register_change",
      +            "product_launch",
      +            "website_relaunch",
      +            "site_section_added",
      +            "pricing_change",
      +            "legal_page_change",
      +            "new_public_repo_by_topic",
      +            "own_incident_spike",
      +            "public_symptom_visible",
      +            "own_customer_reviews_negative",
      +            "event_sponsorship",
      +            "compliance_pursuit",
      +            "regulation_deadline",
      +            "regulatory_exposure",
      +            "platform_policy_change",
      +            "data_breach",
      +            "peer_company_incident",
      +            "litigation",
      +            "positive_media",
      +            "negative_media",
      +            "award_recognition",
      +            "tech_adoption_adjacent",
      +            "competitor_installed",
      +            "competitor_newly_adopted",
      +            "overlapping_tools_in_category",
      +            "recent_software_purchases",
      +            "outbound_domains_registered",
      +            "mcp_server_published",
      +            "hf_org_paid_plan",
      +            "bug_bounty_ai_scope",
      +            "new_exec_buyer_role",
      +            "exec_departure",
      +            "first_hire_in_function",
      +            "competitor_outage_deprecation",
      +            "competitor_acquired_closed",
      +            "competitor_logo_removed",
      +            "competitor_positioning_change",
      +            "competitor_banned_or_sanctioned",
      +            "social_post_about_problem",
      +            "podcast_or_talk_appearance",
      +            "exec_public_appearance",
      +            "named_project_underway",
      +            "customer_peer_reference"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 15,
      +        "type": "array"
      +      },
      +      "user": {
      +        "additionalProperties": false,
      +        "description": "Who the user is: their name, role at the seller and LinkedIn profile URL",
      +        "properties": {
      +          "linkedinUrl": {
      +            "description": "The user's own LinkedIn profile URL; kept in the workspace, never sent to a model",
      +            "pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
      +            "type": "string"
      +          },
      +          "name": {
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "role": {
      +            "maxLength": 120,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "warmPaths": {
      +        "description": "Warm paths the user confirmed: company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "company": {
      +              "maxLength": 200,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "confirmedAt": {
      +              "format": "date",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +              "type": "string"
      +            },
      +            "path": {
      +              "maxLength": 300,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "company",
      +            "path"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "won": {
      +        "description": "Deals won (domains or names): the pattern to find more of",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "ycBatch": {
      +        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      +        "maxLength": 40,
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  4. Changed3 schema fields changed
    • addedInput schema / properties / context / properties / city
      Added value: +{
      +  "description": "The user's own city, for events near them (in person within 50 km); never narrows who discover looks for",
      +  "maxLength": 120,
      +  "type": "string"
      +}
    • addedOutput schema / properties / cost / properties / line
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / properties / profile / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "buyerRoles": {
      -        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "company": {
      -        "description": "The seller company's name",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "competitors": {
      -        "description": "Competitors, as domains or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "customers": {
      -        "description": "Current customers, as domains (acme.com) or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "doNotContact": {
      -        "description": "Companies the user said never to contact (domains)",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "employees": {
      -        "additionalProperties": false,
      -        "description": "Headcount band the seller can close, when the user has said",
      -        "properties": {
      -          "max": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "min": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "exclusions": {
      -        "description": "Companies or kinds of company to leave out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "hard": {
      -        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      -        "items": {
      -          "enum": [
      -            "size",
      -            "fit",
      -            "intent"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 3,
      -        "type": "array"
      -      },
      -      "icp": {
      -        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "investors": {
      -        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "lost": {
      -        "description": "Deals lost or churned (domains or names), with why if known",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "needPatterns": {
      -        "description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words (s97). Discover drafts them when left out and returns them to review; only signals matching one rank",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "family": {
      -              "enum": [
      -                "hiring",
      -                "company_events",
      -                "product_site",
      -                "news_compliance",
      -                "tools",
      -                "people_moves",
      -                "competitor_events",
      -                "public_intent"
      -              ],
      -              "type": "string"
      -            },
      -            "need": {
      -              "maxLength": 160,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "proof": {
      -              "maxLength": 300,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "where": {
      -              "items": {
      -                "enum": [
      -                  "jobs",
      -                  "tools",
      -                  "news",
      -                  "site",
      -                  "ai_adoption"
      -                ],
      -                "type": "string"
      -              },
      -              "maxItems": 5,
      -              "minItems": 1,
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "need",
      -            "where",
      -            "proof"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 24,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "notes": {
      -        "description": "Anything else the user said that should shape the list",
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "openDeals": {
      -        "description": "Companies in an open deal (domains): left out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "product": {
      -        "description": "What the seller sells, in a sentence or two",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "regions": {
      -        "description": "Regions or countries the seller sells into",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "segments": {
      -        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "signalFamilies": {
      -        "description": "The signal families the user switched on (the families of `signals.addMore`, by id). Discover drafts 2 or 3 need patterns for each, worded for the seller's offer, and drops patterns in a family switched off; left out, it drafts 5 to 8 across all",
      -        "items": {
      -          "enum": [
      -            "hiring",
      -            "company_events",
      -            "product_site",
      -            "news_compliance",
      -            "tools",
      -            "people_moves",
      -            "competitor_events",
      -            "public_intent"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 8,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "signalTypes": {
      -        "description": "Catalog signal types the user added from the \"add more\" list (s97), by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      -        "items": {
      -          "enum": [
      -            "job_posting_buyer_role",
      -            "job_posting_mentions_tool",
      -            "hiring_surge_function",
      -            "headcount_growth",
      -            "role_reopened",
      -            "layoffs",
      -            "hiring_freeze",
      -            "function_attrition",
      -            "employee_sentiment_drop",
      -            "funding_round",
      -            "funding_use_of_funds_match",
      -            "debt_financing",
      -            "ipo_filing",
      -            "acquires_company",
      -            "company_acquired",
      -            "spin_off_carve_out",
      -            "geo_expansion",
      -            "partnership_announced",
      -            "partnership_ended",
      -            "prospect_loses_client",
      -            "revenue_decline",
      -            "distress_bankruptcy",
      -            "earnings_call_mention",
      -            "annual_report_insight",
      -            "company_register_change",
      -            "product_launch",
      -            "website_relaunch",
      -            "site_section_added",
      -            "pricing_change",
      -            "legal_page_change",
      -            "new_public_repo_by_topic",
      -            "own_incident_spike",
      -            "public_symptom_visible",
      -            "own_customer_reviews_negative",
      -            "event_sponsorship",
      -            "compliance_pursuit",
      -            "regulation_deadline",
      -            "regulatory_exposure",
      -            "platform_policy_change",
      -            "data_breach",
      -            "peer_company_incident",
      -            "litigation",
      -            "positive_media",
      -            "negative_media",
      -            "award_recognition",
      -            "tech_adoption_adjacent",
      -            "competitor_installed",
      -            "competitor_newly_adopted",
      -            "overlapping_tools_in_category",
      -            "recent_software_purchases",
      -            "outbound_domains_registered",
      -            "mcp_server_published",
      -            "hf_org_paid_plan",
      -            "bug_bounty_ai_scope",
      -            "new_exec_buyer_role",
      -            "exec_departure",
      -            "first_hire_in_function",
      -            "competitor_outage_deprecation",
      -            "competitor_acquired_closed",
      -            "competitor_logo_removed",
      -            "competitor_positioning_change",
      -            "competitor_banned_or_sanctioned",
      -            "social_post_about_problem",
      -            "podcast_or_talk_appearance",
      -            "exec_public_appearance",
      -            "named_project_underway",
      -            "customer_peer_reference"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 15,
      -        "type": "array"
      -      },
      -      "user": {
      -        "additionalProperties": false,
      -        "description": "Who the user is: their name, role at the seller and LinkedIn profile URL",
      -        "properties": {
      -          "linkedinUrl": {
      -            "description": "The user's own LinkedIn profile URL; kept in the workspace, never sent to a model",
      -            "pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
      -            "type": "string"
      -          },
      -          "name": {
      -            "maxLength": 120,
      -            "type": "string"
      -          },
      -          "role": {
      -            "maxLength": 120,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "warmPaths": {
      -        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "company": {
      -              "maxLength": 200,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "confirmedAt": {
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "path": {
      -              "maxLength": 300,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "company",
      -            "path"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "won": {
      -        "description": "Deals won (domains or names): the pattern to find more of",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "ycBatch": {
      -        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      -        "maxLength": 40,
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "buyerRoles": {
      +        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "city": {
      +        "description": "The user's own city, for events near them (in person within 50 km); never narrows who discover looks for",
      +        "maxLength": 120,
      +        "type": "string"
      +      },
      +      "company": {
      +        "description": "The seller company's name",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "competitors": {
      +        "description": "Competitors, as domains or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "customers": {
      +        "description": "Current customers, as domains (acme.com) or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "doNotContact": {
      +        "description": "Companies the user said never to contact (domains)",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "employees": {
      +        "additionalProperties": false,
      +        "description": "Headcount band the seller can close, when the user has said",
      +        "properties": {
      +          "max": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "min": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "exclusions": {
      +        "description": "Companies or kinds of company to leave out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "hard": {
      +        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      +        "items": {
      +          "enum": [
      +            "size",
      +            "fit",
      +            "intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 3,
      +        "type": "array"
      +      },
      +      "icp": {
      +        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "investors": {
      +        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "lost": {
      +        "description": "Deals lost or churned (domains or names), with why if known",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "needPatterns": {
      +        "description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words (s97). Discover drafts them when left out and returns them to review; only signals matching one rank",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "family": {
      +              "enum": [
      +                "hiring",
      +                "company_events",
      +                "product_site",
      +                "news_compliance",
      +                "tools",
      +                "people_moves",
      +                "competitor_events",
      +                "public_intent"
      +              ],
      +              "type": "string"
      +            },
      +            "need": {
      +              "maxLength": 160,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "proof": {
      +              "maxLength": 300,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "where": {
      +              "items": {
      +                "enum": [
      +                  "jobs",
      +                  "tools",
      +                  "news",
      +                  "site",
      +                  "ai_adoption"
      +                ],
      +                "type": "string"
      +              },
      +              "maxItems": 5,
      +              "minItems": 1,
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "need",
      +            "where",
      +            "proof"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 24,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "notes": {
      +        "description": "Anything else the user said that should shape the list",
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "openDeals": {
      +        "description": "Companies in an open deal (domains): left out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "product": {
      +        "description": "What the seller sells, in a sentence or two",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "regions": {
      +        "description": "Regions or countries the seller sells into",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "segments": {
      +        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "signalFamilies": {
      +        "description": "The signal families the user switched on (the families of `signals.addMore`, by id). Discover drafts 2 or 3 need patterns for each, worded for the seller's offer, and drops patterns in a family switched off; left out, it drafts 5 to 8 across all",
      +        "items": {
      +          "enum": [
      +            "hiring",
      +            "company_events",
      +            "product_site",
      +            "news_compliance",
      +            "tools",
      +            "people_moves",
      +            "competitor_events",
      +            "public_intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 8,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "signalTypes": {
      +        "description": "Catalog signal types the user added from the \"add more\" list (s97), by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      +        "items": {
      +          "enum": [
      +            "job_posting_buyer_role",
      +            "job_posting_mentions_tool",
      +            "hiring_surge_function",
      +            "headcount_growth",
      +            "role_reopened",
      +            "layoffs",
      +            "hiring_freeze",
      +            "function_attrition",
      +            "employee_sentiment_drop",
      +            "funding_round",
      +            "funding_use_of_funds_match",
      +            "debt_financing",
      +            "ipo_filing",
      +            "acquires_company",
      +            "company_acquired",
      +            "spin_off_carve_out",
      +            "geo_expansion",
      +            "partnership_announced",
      +            "partnership_ended",
      +            "prospect_loses_client",
      +            "revenue_decline",
      +            "distress_bankruptcy",
      +            "earnings_call_mention",
      +            "annual_report_insight",
      +            "company_register_change",
      +            "product_launch",
      +            "website_relaunch",
      +            "site_section_added",
      +            "pricing_change",
      +            "legal_page_change",
      +            "new_public_repo_by_topic",
      +            "own_incident_spike",
      +            "public_symptom_visible",
      +            "own_customer_reviews_negative",
      +            "event_sponsorship",
      +            "compliance_pursuit",
      +            "regulation_deadline",
      +            "regulatory_exposure",
      +            "platform_policy_change",
      +            "data_breach",
      +            "peer_company_incident",
      +            "litigation",
      +            "positive_media",
      +            "negative_media",
      +            "award_recognition",
      +            "tech_adoption_adjacent",
      +            "competitor_installed",
      +            "competitor_newly_adopted",
      +            "overlapping_tools_in_category",
      +            "recent_software_purchases",
      +            "outbound_domains_registered",
      +            "mcp_server_published",
      +            "hf_org_paid_plan",
      +            "bug_bounty_ai_scope",
      +            "new_exec_buyer_role",
      +            "exec_departure",
      +            "first_hire_in_function",
      +            "competitor_outage_deprecation",
      +            "competitor_acquired_closed",
      +            "competitor_logo_removed",
      +            "competitor_positioning_change",
      +            "competitor_banned_or_sanctioned",
      +            "social_post_about_problem",
      +            "podcast_or_talk_appearance",
      +            "exec_public_appearance",
      +            "named_project_underway",
      +            "customer_peer_reference"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 15,
      +        "type": "array"
      +      },
      +      "user": {
      +        "additionalProperties": false,
      +        "description": "Who the user is: their name, role at the seller and LinkedIn profile URL",
      +        "properties": {
      +          "linkedinUrl": {
      +            "description": "The user's own LinkedIn profile URL; kept in the workspace, never sent to a model",
      +            "pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
      +            "type": "string"
      +          },
      +          "name": {
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "role": {
      +            "maxLength": 120,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "warmPaths": {
      +        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "company": {
      +              "maxLength": 200,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "confirmedAt": {
      +              "format": "date",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +              "type": "string"
      +            },
      +            "path": {
      +              "maxLength": 300,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "company",
      +            "path"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "won": {
      +        "description": "Deals won (domains or names): the pattern to find more of",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "ycBatch": {
      +        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      +        "maxLength": 40,
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  5. Changed2 schema fields changed
    • changedInput schema / properties / context / properties / user / properties / linkedinUrl / description
      Previous value: -"s99: the user's own LinkedIn profile URL. In paid mode the playbook reads their past jobs and schools from it once (treg's hosted API) and matches them with its buyers' in code for shared-history paths; kept in the workspace, never sent to a model"New value: +"The user's own LinkedIn profile URL; kept in the workspace, never sent to a model"
    • changedOutput schema / properties / profile / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "buyerRoles": {
      -        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "company": {
      -        "description": "The seller company's name",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "competitors": {
      -        "description": "Competitors, as domains or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "customers": {
      -        "description": "Current customers, as domains (acme.com) or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "doNotContact": {
      -        "description": "Companies the user said never to contact (domains)",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "employees": {
      -        "additionalProperties": false,
      -        "description": "Headcount band the seller can close, when the user has said",
      -        "properties": {
      -          "max": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "min": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "exclusions": {
      -        "description": "Companies or kinds of company to leave out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "hard": {
      -        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      -        "items": {
      -          "enum": [
      -            "size",
      -            "fit",
      -            "intent"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 3,
      -        "type": "array"
      -      },
      -      "icp": {
      -        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "investors": {
      -        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "lost": {
      -        "description": "Deals lost or churned (domains or names), with why if known",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "needPatterns": {
      -        "description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words (s97). Discover drafts them when left out and returns them to review; only signals matching one rank",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "family": {
      -              "enum": [
      -                "hiring",
      -                "company_events",
      -                "product_site",
      -                "news_compliance",
      -                "tools",
      -                "people_moves",
      -                "competitor_events",
      -                "public_intent"
      -              ],
      -              "type": "string"
      -            },
      -            "need": {
      -              "maxLength": 160,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "proof": {
      -              "maxLength": 300,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "where": {
      -              "items": {
      -                "enum": [
      -                  "jobs",
      -                  "tools",
      -                  "news",
      -                  "site",
      -                  "ai_adoption"
      -                ],
      -                "type": "string"
      -              },
      -              "maxItems": 5,
      -              "minItems": 1,
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "need",
      -            "where",
      -            "proof"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 24,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "notes": {
      -        "description": "Anything else the user said that should shape the list",
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "openDeals": {
      -        "description": "Companies in an open deal (domains): left out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "product": {
      -        "description": "What the seller sells, in a sentence or two",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "regions": {
      -        "description": "Regions or countries the seller sells into",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "segments": {
      -        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "signalFamilies": {
      -        "description": "The signal families the user switched on (the families of `signals.addMore`, by id). Discover drafts 2 or 3 need patterns for each, worded for the seller's offer, and drops patterns in a family switched off; left out, it drafts 5 to 8 across all",
      -        "items": {
      -          "enum": [
      -            "hiring",
      -            "company_events",
      -            "product_site",
      -            "news_compliance",
      -            "tools",
      -            "people_moves",
      -            "competitor_events",
      -            "public_intent"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 8,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "signalTypes": {
      -        "description": "Catalog signal types the user added from the \"add more\" list (s97), by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      -        "items": {
      -          "enum": [
      -            "job_posting_buyer_role",
      -            "job_posting_mentions_tool",
      -            "hiring_surge_function",
      -            "headcount_growth",
      -            "role_reopened",
      -            "layoffs",
      -            "hiring_freeze",
      -            "function_attrition",
      -            "employee_sentiment_drop",
      -            "funding_round",
      -            "funding_use_of_funds_match",
      -            "debt_financing",
      -            "ipo_filing",
      -            "acquires_company",
      -            "company_acquired",
      -            "spin_off_carve_out",
      -            "geo_expansion",
      -            "partnership_announced",
      -            "partnership_ended",
      -            "prospect_loses_client",
      -            "revenue_decline",
      -            "distress_bankruptcy",
      -            "earnings_call_mention",
      -            "annual_report_insight",
      -            "company_register_change",
      -            "product_launch",
      -            "website_relaunch",
      -            "site_section_added",
      -            "pricing_change",
      -            "legal_page_change",
      -            "new_public_repo_by_topic",
      -            "own_incident_spike",
      -            "public_symptom_visible",
      -            "own_customer_reviews_negative",
      -            "event_sponsorship",
      -            "compliance_pursuit",
      -            "regulation_deadline",
      -            "regulatory_exposure",
      -            "platform_policy_change",
      -            "data_breach",
      -            "peer_company_incident",
      -            "litigation",
      -            "positive_media",
      -            "negative_media",
      -            "award_recognition",
      -            "tech_adoption_adjacent",
      -            "competitor_installed",
      -            "competitor_newly_adopted",
      -            "overlapping_tools_in_category",
      -            "recent_software_purchases",
      -            "outbound_domains_registered",
      -            "mcp_server_published",
      -            "hf_org_paid_plan",
      -            "bug_bounty_ai_scope",
      -            "new_exec_buyer_role",
      -            "exec_departure",
      -            "first_hire_in_function",
      -            "competitor_outage_deprecation",
      -            "competitor_acquired_closed",
      -            "competitor_logo_removed",
      -            "competitor_positioning_change",
      -            "competitor_banned_or_sanctioned",
      -            "social_post_about_problem",
      -            "podcast_or_talk_appearance",
      -            "exec_public_appearance",
      -            "named_project_underway",
      -            "customer_peer_reference"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 15,
      -        "type": "array"
      -      },
      -      "user": {
      -        "additionalProperties": false,
      -        "description": "Who the user is: their name, role at the seller and LinkedIn profile URL",
      -        "properties": {
      -          "linkedinUrl": {
      -            "description": "s99: the user's own LinkedIn profile URL. In paid mode the playbook reads their past jobs and schools from it once (treg's hosted API) and matches them with its buyers' in code for shared-history paths; kept in the workspace, never sent to a model",
      -            "pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
      -            "type": "string"
      -          },
      -          "name": {
      -            "maxLength": 120,
      -            "type": "string"
      -          },
      -          "role": {
      -            "maxLength": 120,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "warmPaths": {
      -        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "company": {
      -              "maxLength": 200,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "confirmedAt": {
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "path": {
      -              "maxLength": 300,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "company",
      -            "path"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "won": {
      -        "description": "Deals won (domains or names): the pattern to find more of",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "ycBatch": {
      -        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      -        "maxLength": 40,
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "buyerRoles": {
      +        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "company": {
      +        "description": "The seller company's name",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "competitors": {
      +        "description": "Competitors, as domains or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "customers": {
      +        "description": "Current customers, as domains (acme.com) or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "doNotContact": {
      +        "description": "Companies the user said never to contact (domains)",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "employees": {
      +        "additionalProperties": false,
      +        "description": "Headcount band the seller can close, when the user has said",
      +        "properties": {
      +          "max": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "min": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "exclusions": {
      +        "description": "Companies or kinds of company to leave out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "hard": {
      +        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      +        "items": {
      +          "enum": [
      +            "size",
      +            "fit",
      +            "intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 3,
      +        "type": "array"
      +      },
      +      "icp": {
      +        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "investors": {
      +        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "lost": {
      +        "description": "Deals lost or churned (domains or names), with why if known",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "needPatterns": {
      +        "description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words (s97). Discover drafts them when left out and returns them to review; only signals matching one rank",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "family": {
      +              "enum": [
      +                "hiring",
      +                "company_events",
      +                "product_site",
      +                "news_compliance",
      +                "tools",
      +                "people_moves",
      +                "competitor_events",
      +                "public_intent"
      +              ],
      +              "type": "string"
      +            },
      +            "need": {
      +              "maxLength": 160,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "proof": {
      +              "maxLength": 300,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "where": {
      +              "items": {
      +                "enum": [
      +                  "jobs",
      +                  "tools",
      +                  "news",
      +                  "site",
      +                  "ai_adoption"
      +                ],
      +                "type": "string"
      +              },
      +              "maxItems": 5,
      +              "minItems": 1,
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "need",
      +            "where",
      +            "proof"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 24,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "notes": {
      +        "description": "Anything else the user said that should shape the list",
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "openDeals": {
      +        "description": "Companies in an open deal (domains): left out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "product": {
      +        "description": "What the seller sells, in a sentence or two",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "regions": {
      +        "description": "Regions or countries the seller sells into",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "segments": {
      +        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "signalFamilies": {
      +        "description": "The signal families the user switched on (the families of `signals.addMore`, by id). Discover drafts 2 or 3 need patterns for each, worded for the seller's offer, and drops patterns in a family switched off; left out, it drafts 5 to 8 across all",
      +        "items": {
      +          "enum": [
      +            "hiring",
      +            "company_events",
      +            "product_site",
      +            "news_compliance",
      +            "tools",
      +            "people_moves",
      +            "competitor_events",
      +            "public_intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 8,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "signalTypes": {
      +        "description": "Catalog signal types the user added from the \"add more\" list (s97), by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      +        "items": {
      +          "enum": [
      +            "job_posting_buyer_role",
      +            "job_posting_mentions_tool",
      +            "hiring_surge_function",
      +            "headcount_growth",
      +            "role_reopened",
      +            "layoffs",
      +            "hiring_freeze",
      +            "function_attrition",
      +            "employee_sentiment_drop",
      +            "funding_round",
      +            "funding_use_of_funds_match",
      +            "debt_financing",
      +            "ipo_filing",
      +            "acquires_company",
      +            "company_acquired",
      +            "spin_off_carve_out",
      +            "geo_expansion",
      +            "partnership_announced",
      +            "partnership_ended",
      +            "prospect_loses_client",
      +            "revenue_decline",
      +            "distress_bankruptcy",
      +            "earnings_call_mention",
      +            "annual_report_insight",
      +            "company_register_change",
      +            "product_launch",
      +            "website_relaunch",
      +            "site_section_added",
      +            "pricing_change",
      +            "legal_page_change",
      +            "new_public_repo_by_topic",
      +            "own_incident_spike",
      +            "public_symptom_visible",
      +            "own_customer_reviews_negative",
      +            "event_sponsorship",
      +            "compliance_pursuit",
      +            "regulation_deadline",
      +            "regulatory_exposure",
      +            "platform_policy_change",
      +            "data_breach",
      +            "peer_company_incident",
      +            "litigation",
      +            "positive_media",
      +            "negative_media",
      +            "award_recognition",
      +            "tech_adoption_adjacent",
      +            "competitor_installed",
      +            "competitor_newly_adopted",
      +            "overlapping_tools_in_category",
      +            "recent_software_purchases",
      +            "outbound_domains_registered",
      +            "mcp_server_published",
      +            "hf_org_paid_plan",
      +            "bug_bounty_ai_scope",
      +            "new_exec_buyer_role",
      +            "exec_departure",
      +            "first_hire_in_function",
      +            "competitor_outage_deprecation",
      +            "competitor_acquired_closed",
      +            "competitor_logo_removed",
      +            "competitor_positioning_change",
      +            "competitor_banned_or_sanctioned",
      +            "social_post_about_problem",
      +            "podcast_or_talk_appearance",
      +            "exec_public_appearance",
      +            "named_project_underway",
      +            "customer_peer_reference"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 15,
      +        "type": "array"
      +      },
      +      "user": {
      +        "additionalProperties": false,
      +        "description": "Who the user is: their name, role at the seller and LinkedIn profile URL",
      +        "properties": {
      +          "linkedinUrl": {
      +            "description": "The user's own LinkedIn profile URL; kept in the workspace, never sent to a model",
      +            "pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
      +            "type": "string"
      +          },
      +          "name": {
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "role": {
      +            "maxLength": 120,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "warmPaths": {
      +        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "company": {
      +              "maxLength": 200,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "confirmedAt": {
      +              "format": "date",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +              "type": "string"
      +            },
      +            "path": {
      +              "maxLength": 300,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "company",
      +            "path"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "won": {
      +        "description": "Deals won (domains or names): the pattern to find more of",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "ycBatch": {
      +        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      +        "maxLength": 40,
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  6. Changed5 schema fields changed
    • addedInput schema / properties / context / properties / needPatterns / items / properties / family
      Added value: +{
      +  "enum": [
      +    "hiring",
      +    "company_events",
      +    "product_site",
      +    "news_compliance",
      +    "tools",
      +    "people_moves",
      +    "competitor_events",
      +    "public_intent"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / context / properties / needPatterns / maxItems
      Previous value: -12New value: +24
    • addedInput schema / properties / context / properties / signalFamilies
      Added value: +{
      +  "description": "The signal families the user switched on (the families of `signals.addMore`, by id). Discover drafts 2 or 3 need patterns for each, worded for the seller's offer, and drops patterns in a family switched off; left out, it drafts 5 to 8 across all",
      +  "items": {
      +    "enum": [
      +      "hiring",
      +      "company_events",
      +      "product_site",
      +      "news_compliance",
      +      "tools",
      +      "people_moves",
      +      "competitor_events",
      +      "public_intent"
      +    ],
      +    "type": "string"
      +  },
      +  "maxItems": 8,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • changedOutput schema / properties / profile / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "buyerRoles": {
      -        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "company": {
      -        "description": "The seller company's name",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "competitors": {
      -        "description": "Competitors, as domains or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "customers": {
      -        "description": "Current customers, as domains (acme.com) or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "doNotContact": {
      -        "description": "Companies the user said never to contact (domains)",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "employees": {
      -        "additionalProperties": false,
      -        "description": "Headcount band the seller can close, when the user has said",
      -        "properties": {
      -          "max": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "min": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "exclusions": {
      -        "description": "Companies or kinds of company to leave out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "hard": {
      -        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      -        "items": {
      -          "enum": [
      -            "size",
      -            "fit",
      -            "intent"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 3,
      -        "type": "array"
      -      },
      -      "icp": {
      -        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "investors": {
      -        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "lost": {
      -        "description": "Deals lost or churned (domains or names), with why if known",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "needPatterns": {
      -        "description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words (s97). Discover drafts them when left out and returns them to review; only signals matching one rank",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "need": {
      -              "maxLength": 160,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "proof": {
      -              "maxLength": 300,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "where": {
      -              "items": {
      -                "enum": [
      -                  "jobs",
      -                  "tools",
      -                  "news",
      -                  "site",
      -                  "ai_adoption"
      -                ],
      -                "type": "string"
      -              },
      -              "maxItems": 5,
      -              "minItems": 1,
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "need",
      -            "where",
      -            "proof"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 12,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "notes": {
      -        "description": "Anything else the user said that should shape the list",
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "openDeals": {
      -        "description": "Companies in an open deal (domains): left out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "product": {
      -        "description": "What the seller sells, in a sentence or two",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "regions": {
      -        "description": "Regions or countries the seller sells into",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "segments": {
      -        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "signalTypes": {
      -        "description": "Catalog signal types the user added from the \"add more\" list (s97), by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      -        "items": {
      -          "enum": [
      -            "job_posting_buyer_role",
      -            "job_posting_mentions_tool",
      -            "hiring_surge_function",
      -            "headcount_growth",
      -            "role_reopened",
      -            "layoffs",
      -            "hiring_freeze",
      -            "function_attrition",
      -            "employee_sentiment_drop",
      -            "funding_round",
      -            "funding_use_of_funds_match",
      -            "debt_financing",
      -            "ipo_filing",
      -            "acquires_company",
      -            "company_acquired",
      -            "spin_off_carve_out",
      -            "geo_expansion",
      -            "partnership_announced",
      -            "partnership_ended",
      -            "prospect_loses_client",
      -            "revenue_decline",
      -            "distress_bankruptcy",
      -            "earnings_call_mention",
      -            "annual_report_insight",
      -            "company_register_change",
      -            "product_launch",
      -            "website_relaunch",
      -            "site_section_added",
      -            "pricing_change",
      -            "legal_page_change",
      -            "new_public_repo_by_topic",
      -            "own_incident_spike",
      -            "public_symptom_visible",
      -            "own_customer_reviews_negative",
      -            "event_sponsorship",
      -            "compliance_pursuit",
      -            "regulation_deadline",
      -            "regulatory_exposure",
      -            "platform_policy_change",
      -            "data_breach",
      -            "peer_company_incident",
      -            "litigation",
      -            "positive_media",
      -            "negative_media",
      -            "award_recognition",
      -            "tech_adoption_adjacent",
      -            "competitor_installed",
      -            "competitor_newly_adopted",
      -            "overlapping_tools_in_category",
      -            "recent_software_purchases",
      -            "outbound_domains_registered",
      -            "mcp_server_published",
      -            "hf_org_paid_plan",
      -            "bug_bounty_ai_scope",
      -            "new_exec_buyer_role",
      -            "exec_departure",
      -            "first_hire_in_function",
      -            "competitor_outage_deprecation",
      -            "competitor_acquired_closed",
      -            "competitor_logo_removed",
      -            "competitor_positioning_change",
      -            "competitor_banned_or_sanctioned",
      -            "social_post_about_problem",
      -            "podcast_or_talk_appearance",
      -            "exec_public_appearance",
      -            "named_project_underway",
      -            "customer_peer_reference"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 15,
      -        "type": "array"
      -      },
      -      "user": {
      -        "additionalProperties": false,
      -        "description": "Who the user is: their name, role at the seller and LinkedIn profile URL",
      -        "properties": {
      -          "linkedinUrl": {
      -            "description": "s99: the user's own LinkedIn profile URL. In paid mode the playbook reads their past jobs and schools from it once (treg's hosted API) and matches them with its buyers' in code for shared-history paths; kept in the workspace, never sent to a model",
      -            "pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
      -            "type": "string"
      -          },
      -          "name": {
      -            "maxLength": 120,
      -            "type": "string"
      -          },
      -          "role": {
      -            "maxLength": 120,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "warmPaths": {
      -        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "company": {
      -              "maxLength": 200,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "confirmedAt": {
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "path": {
      -              "maxLength": 300,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "company",
      -            "path"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "won": {
      -        "description": "Deals won (domains or names): the pattern to find more of",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "ycBatch": {
      -        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      -        "maxLength": 40,
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "buyerRoles": {
      +        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "company": {
      +        "description": "The seller company's name",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "competitors": {
      +        "description": "Competitors, as domains or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "customers": {
      +        "description": "Current customers, as domains (acme.com) or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "doNotContact": {
      +        "description": "Companies the user said never to contact (domains)",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "employees": {
      +        "additionalProperties": false,
      +        "description": "Headcount band the seller can close, when the user has said",
      +        "properties": {
      +          "max": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "min": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "exclusions": {
      +        "description": "Companies or kinds of company to leave out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "hard": {
      +        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      +        "items": {
      +          "enum": [
      +            "size",
      +            "fit",
      +            "intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 3,
      +        "type": "array"
      +      },
      +      "icp": {
      +        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "investors": {
      +        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "lost": {
      +        "description": "Deals lost or churned (domains or names), with why if known",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "needPatterns": {
      +        "description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words (s97). Discover drafts them when left out and returns them to review; only signals matching one rank",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "family": {
      +              "enum": [
      +                "hiring",
      +                "company_events",
      +                "product_site",
      +                "news_compliance",
      +                "tools",
      +                "people_moves",
      +                "competitor_events",
      +                "public_intent"
      +              ],
      +              "type": "string"
      +            },
      +            "need": {
      +              "maxLength": 160,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "proof": {
      +              "maxLength": 300,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "where": {
      +              "items": {
      +                "enum": [
      +                  "jobs",
      +                  "tools",
      +                  "news",
      +                  "site",
      +                  "ai_adoption"
      +                ],
      +                "type": "string"
      +              },
      +              "maxItems": 5,
      +              "minItems": 1,
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "need",
      +            "where",
      +            "proof"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 24,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "notes": {
      +        "description": "Anything else the user said that should shape the list",
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "openDeals": {
      +        "description": "Companies in an open deal (domains): left out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "product": {
      +        "description": "What the seller sells, in a sentence or two",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "regions": {
      +        "description": "Regions or countries the seller sells into",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "segments": {
      +        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "signalFamilies": {
      +        "description": "The signal families the user switched on (the families of `signals.addMore`, by id). Discover drafts 2 or 3 need patterns for each, worded for the seller's offer, and drops patterns in a family switched off; left out, it drafts 5 to 8 across all",
      +        "items": {
      +          "enum": [
      +            "hiring",
      +            "company_events",
      +            "product_site",
      +            "news_compliance",
      +            "tools",
      +            "people_moves",
      +            "competitor_events",
      +            "public_intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 8,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "signalTypes": {
      +        "description": "Catalog signal types the user added from the \"add more\" list (s97), by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      +        "items": {
      +          "enum": [
      +            "job_posting_buyer_role",
      +            "job_posting_mentions_tool",
      +            "hiring_surge_function",
      +            "headcount_growth",
      +            "role_reopened",
      +            "layoffs",
      +            "hiring_freeze",
      +            "function_attrition",
      +            "employee_sentiment_drop",
      +            "funding_round",
      +            "funding_use_of_funds_match",
      +            "debt_financing",
      +            "ipo_filing",
      +            "acquires_company",
      +            "company_acquired",
      +            "spin_off_carve_out",
      +            "geo_expansion",
      +            "partnership_announced",
      +            "partnership_ended",
      +            "prospect_loses_client",
      +            "revenue_decline",
      +            "distress_bankruptcy",
      +            "earnings_call_mention",
      +            "annual_report_insight",
      +            "company_register_change",
      +            "product_launch",
      +            "website_relaunch",
      +            "site_section_added",
      +            "pricing_change",
      +            "legal_page_change",
      +            "new_public_repo_by_topic",
      +            "own_incident_spike",
      +            "public_symptom_visible",
      +            "own_customer_reviews_negative",
      +            "event_sponsorship",
      +            "compliance_pursuit",
      +            "regulation_deadline",
      +            "regulatory_exposure",
      +            "platform_policy_change",
      +            "data_breach",
      +            "peer_company_incident",
      +            "litigation",
      +            "positive_media",
      +            "negative_media",
      +            "award_recognition",
      +            "tech_adoption_adjacent",
      +            "competitor_installed",
      +            "competitor_newly_adopted",
      +            "overlapping_tools_in_category",
      +            "recent_software_purchases",
      +            "outbound_domains_registered",
      +            "mcp_server_published",
      +            "hf_org_paid_plan",
      +            "bug_bounty_ai_scope",
      +            "new_exec_buyer_role",
      +            "exec_departure",
      +            "first_hire_in_function",
      +            "competitor_outage_deprecation",
      +            "competitor_acquired_closed",
      +            "competitor_logo_removed",
      +            "competitor_positioning_change",
      +            "competitor_banned_or_sanctioned",
      +            "social_post_about_problem",
      +            "podcast_or_talk_appearance",
      +            "exec_public_appearance",
      +            "named_project_underway",
      +            "customer_peer_reference"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 15,
      +        "type": "array"
      +      },
      +      "user": {
      +        "additionalProperties": false,
      +        "description": "Who the user is: their name, role at the seller and LinkedIn profile URL",
      +        "properties": {
      +          "linkedinUrl": {
      +            "description": "s99: the user's own LinkedIn profile URL. In paid mode the playbook reads their past jobs and schools from it once (treg's hosted API) and matches them with its buyers' in code for shared-history paths; kept in the workspace, never sent to a model",
      +            "pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
      +            "type": "string"
      +          },
      +          "name": {
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "role": {
      +            "maxLength": 120,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "warmPaths": {
      +        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "company": {
      +              "maxLength": 200,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "confirmedAt": {
      +              "format": "date",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +              "type": "string"
      +            },
      +            "path": {
      +              "maxLength": 300,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "company",
      +            "path"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "won": {
      +        "description": "Deals won (domains or names): the pattern to find more of",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "ycBatch": {
      +        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      +        "maxLength": 40,
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / signals / properties / needPatterns / items / properties / family
      Added value: +{
      +  "enum": [
      +    "hiring",
      +    "company_events",
      +    "product_site",
      +    "news_compliance",
      +    "tools",
      +    "people_moves",
      +    "competitor_events",
      +    "public_intent"
      +  ],
      +  "type": "string"
      +}
  7. Changed3 schema fields changed
    • changedInput schema / properties / context / properties / user / description
      Previous value: -"Who the user is: their name and role at the seller"New value: +"Who the user is: their name, role at the seller and LinkedIn profile URL"
    • addedInput schema / properties / context / properties / user / properties / linkedinUrl
      Added value: +{
      +  "description": "s99: the user's own LinkedIn profile URL. In paid mode the playbook reads their past jobs and schools from it once (treg's hosted API) and matches them with its buyers' in code for shared-history paths; kept in the workspace, never sent to a model",
      +  "pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
      +  "type": "string"
      +}
    • changedOutput schema / properties / profile / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "buyerRoles": {
      -        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "company": {
      -        "description": "The seller company's name",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "competitors": {
      -        "description": "Competitors, as domains or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "customers": {
      -        "description": "Current customers, as domains (acme.com) or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "doNotContact": {
      -        "description": "Companies the user said never to contact (domains)",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "employees": {
      -        "additionalProperties": false,
      -        "description": "Headcount band the seller can close, when the user has said",
      -        "properties": {
      -          "max": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "min": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "exclusions": {
      -        "description": "Companies or kinds of company to leave out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "hard": {
      -        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      -        "items": {
      -          "enum": [
      -            "size",
      -            "fit",
      -            "intent"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 3,
      -        "type": "array"
      -      },
      -      "icp": {
      -        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "investors": {
      -        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "lost": {
      -        "description": "Deals lost or churned (domains or names), with why if known",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "needPatterns": {
      -        "description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words (s97). Discover drafts them when left out and returns them to review; only signals matching one rank",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "need": {
      -              "maxLength": 160,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "proof": {
      -              "maxLength": 300,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "where": {
      -              "items": {
      -                "enum": [
      -                  "jobs",
      -                  "tools",
      -                  "news",
      -                  "site",
      -                  "ai_adoption"
      -                ],
      -                "type": "string"
      -              },
      -              "maxItems": 5,
      -              "minItems": 1,
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "need",
      -            "where",
      -            "proof"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 12,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "notes": {
      -        "description": "Anything else the user said that should shape the list",
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "openDeals": {
      -        "description": "Companies in an open deal (domains): left out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "product": {
      -        "description": "What the seller sells, in a sentence or two",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "regions": {
      -        "description": "Regions or countries the seller sells into",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "segments": {
      -        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "signalTypes": {
      -        "description": "Catalog signal types the user added from the \"add more\" list (s97), by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      -        "items": {
      -          "enum": [
      -            "job_posting_buyer_role",
      -            "job_posting_mentions_tool",
      -            "hiring_surge_function",
      -            "headcount_growth",
      -            "role_reopened",
      -            "layoffs",
      -            "hiring_freeze",
      -            "function_attrition",
      -            "employee_sentiment_drop",
      -            "funding_round",
      -            "funding_use_of_funds_match",
      -            "debt_financing",
      -            "ipo_filing",
      -            "acquires_company",
      -            "company_acquired",
      -            "spin_off_carve_out",
      -            "geo_expansion",
      -            "partnership_announced",
      -            "partnership_ended",
      -            "prospect_loses_client",
      -            "revenue_decline",
      -            "distress_bankruptcy",
      -            "earnings_call_mention",
      -            "annual_report_insight",
      -            "company_register_change",
      -            "product_launch",
      -            "website_relaunch",
      -            "site_section_added",
      -            "pricing_change",
      -            "legal_page_change",
      -            "new_public_repo_by_topic",
      -            "own_incident_spike",
      -            "public_symptom_visible",
      -            "own_customer_reviews_negative",
      -            "event_sponsorship",
      -            "compliance_pursuit",
      -            "regulation_deadline",
      -            "regulatory_exposure",
      -            "platform_policy_change",
      -            "data_breach",
      -            "peer_company_incident",
      -            "litigation",
      -            "positive_media",
      -            "negative_media",
      -            "award_recognition",
      -            "tech_adoption_adjacent",
      -            "competitor_installed",
      -            "competitor_newly_adopted",
      -            "overlapping_tools_in_category",
      -            "recent_software_purchases",
      -            "outbound_domains_registered",
      -            "mcp_server_published",
      -            "hf_org_paid_plan",
      -            "bug_bounty_ai_scope",
      -            "new_exec_buyer_role",
      -            "exec_departure",
      -            "first_hire_in_function",
      -            "competitor_outage_deprecation",
      -            "competitor_acquired_closed",
      -            "competitor_logo_removed",
      -            "competitor_positioning_change",
      -            "competitor_banned_or_sanctioned",
      -            "social_post_about_problem",
      -            "podcast_or_talk_appearance",
      -            "exec_public_appearance",
      -            "named_project_underway",
      -            "customer_peer_reference"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 15,
      -        "type": "array"
      -      },
      -      "user": {
      -        "additionalProperties": false,
      -        "description": "Who the user is: their name and role at the seller",
      -        "properties": {
      -          "name": {
      -            "maxLength": 120,
      -            "type": "string"
      -          },
      -          "role": {
      -            "maxLength": 120,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "warmPaths": {
      -        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "company": {
      -              "maxLength": 200,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "confirmedAt": {
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "path": {
      -              "maxLength": 300,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "company",
      -            "path"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "won": {
      -        "description": "Deals won (domains or names): the pattern to find more of",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "ycBatch": {
      -        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      -        "maxLength": 40,
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "buyerRoles": {
      +        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "company": {
      +        "description": "The seller company's name",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "competitors": {
      +        "description": "Competitors, as domains or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "customers": {
      +        "description": "Current customers, as domains (acme.com) or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "doNotContact": {
      +        "description": "Companies the user said never to contact (domains)",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "employees": {
      +        "additionalProperties": false,
      +        "description": "Headcount band the seller can close, when the user has said",
      +        "properties": {
      +          "max": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "min": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "exclusions": {
      +        "description": "Companies or kinds of company to leave out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "hard": {
      +        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      +        "items": {
      +          "enum": [
      +            "size",
      +            "fit",
      +            "intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 3,
      +        "type": "array"
      +      },
      +      "icp": {
      +        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "investors": {
      +        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "lost": {
      +        "description": "Deals lost or churned (domains or names), with why if known",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "needPatterns": {
      +        "description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words (s97). Discover drafts them when left out and returns them to review; only signals matching one rank",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "need": {
      +              "maxLength": 160,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "proof": {
      +              "maxLength": 300,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "where": {
      +              "items": {
      +                "enum": [
      +                  "jobs",
      +                  "tools",
      +                  "news",
      +                  "site",
      +                  "ai_adoption"
      +                ],
      +                "type": "string"
      +              },
      +              "maxItems": 5,
      +              "minItems": 1,
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "need",
      +            "where",
      +            "proof"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 12,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "notes": {
      +        "description": "Anything else the user said that should shape the list",
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "openDeals": {
      +        "description": "Companies in an open deal (domains): left out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "product": {
      +        "description": "What the seller sells, in a sentence or two",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "regions": {
      +        "description": "Regions or countries the seller sells into",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "segments": {
      +        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "signalTypes": {
      +        "description": "Catalog signal types the user added from the \"add more\" list (s97), by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      +        "items": {
      +          "enum": [
      +            "job_posting_buyer_role",
      +            "job_posting_mentions_tool",
      +            "hiring_surge_function",
      +            "headcount_growth",
      +            "role_reopened",
      +            "layoffs",
      +            "hiring_freeze",
      +            "function_attrition",
      +            "employee_sentiment_drop",
      +            "funding_round",
      +            "funding_use_of_funds_match",
      +            "debt_financing",
      +            "ipo_filing",
      +            "acquires_company",
      +            "company_acquired",
      +            "spin_off_carve_out",
      +            "geo_expansion",
      +            "partnership_announced",
      +            "partnership_ended",
      +            "prospect_loses_client",
      +            "revenue_decline",
      +            "distress_bankruptcy",
      +            "earnings_call_mention",
      +            "annual_report_insight",
      +            "company_register_change",
      +            "product_launch",
      +            "website_relaunch",
      +            "site_section_added",
      +            "pricing_change",
      +            "legal_page_change",
      +            "new_public_repo_by_topic",
      +            "own_incident_spike",
      +            "public_symptom_visible",
      +            "own_customer_reviews_negative",
      +            "event_sponsorship",
      +            "compliance_pursuit",
      +            "regulation_deadline",
      +            "regulatory_exposure",
      +            "platform_policy_change",
      +            "data_breach",
      +            "peer_company_incident",
      +            "litigation",
      +            "positive_media",
      +            "negative_media",
      +            "award_recognition",
      +            "tech_adoption_adjacent",
      +            "competitor_installed",
      +            "competitor_newly_adopted",
      +            "overlapping_tools_in_category",
      +            "recent_software_purchases",
      +            "outbound_domains_registered",
      +            "mcp_server_published",
      +            "hf_org_paid_plan",
      +            "bug_bounty_ai_scope",
      +            "new_exec_buyer_role",
      +            "exec_departure",
      +            "first_hire_in_function",
      +            "competitor_outage_deprecation",
      +            "competitor_acquired_closed",
      +            "competitor_logo_removed",
      +            "competitor_positioning_change",
      +            "competitor_banned_or_sanctioned",
      +            "social_post_about_problem",
      +            "podcast_or_talk_appearance",
      +            "exec_public_appearance",
      +            "named_project_underway",
      +            "customer_peer_reference"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 15,
      +        "type": "array"
      +      },
      +      "user": {
      +        "additionalProperties": false,
      +        "description": "Who the user is: their name, role at the seller and LinkedIn profile URL",
      +        "properties": {
      +          "linkedinUrl": {
      +            "description": "s99: the user's own LinkedIn profile URL. In paid mode the playbook reads their past jobs and schools from it once (treg's hosted API) and matches them with its buyers' in code for shared-history paths; kept in the workspace, never sent to a model",
      +            "pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
      +            "type": "string"
      +          },
      +          "name": {
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "role": {
      +            "maxLength": 120,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "warmPaths": {
      +        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "company": {
      +              "maxLength": 200,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "confirmedAt": {
      +              "format": "date",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +              "type": "string"
      +            },
      +            "path": {
      +              "maxLength": 300,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "company",
      +            "path"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "won": {
      +        "description": "Deals won (domains or names): the pattern to find more of",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "ycBatch": {
      +        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      +        "maxLength": 40,
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  8. Changed5 schema fields changed
    • changedInput schema / properties / context / properties / needPatterns / description
      Previous value: -"What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. Discover drafts them when left out and returns them to review; only signals matching one rank"New value: +"What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words (s97). Discover drafts them when left out and returns them to review; only signals matching one rank"
    • changedInput schema / properties / context / properties / needPatterns / maxItems
      Previous value: -5New value: +12
    • addedInput schema / properties / context / properties / signalTypes
      Added value: +{
      +  "description": "Catalog signal types the user added from the \"add more\" list (s97), by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      +  "items": {
      +    "enum": [
      +      "job_posting_buyer_role",
      +      "job_posting_mentions_tool",
      +      "hiring_surge_function",
      +      "headcount_growth",
      +      "role_reopened",
      +      "layoffs",
      +      "hiring_freeze",
      +      "function_attrition",
      +      "employee_sentiment_drop",
      +      "funding_round",
      +      "funding_use_of_funds_match",
      +      "debt_financing",
      +      "ipo_filing",
      +      "acquires_company",
      +      "company_acquired",
      +      "spin_off_carve_out",
      +      "geo_expansion",
      +      "partnership_announced",
      +      "partnership_ended",
      +      "prospect_loses_client",
      +      "revenue_decline",
      +      "distress_bankruptcy",
      +      "earnings_call_mention",
      +      "annual_report_insight",
      +      "company_register_change",
      +      "product_launch",
      +      "website_relaunch",
      +      "site_section_added",
      +      "pricing_change",
      +      "legal_page_change",
      +      "new_public_repo_by_topic",
      +      "own_incident_spike",
      +      "public_symptom_visible",
      +      "own_customer_reviews_negative",
      +      "event_sponsorship",
      +      "compliance_pursuit",
      +      "regulation_deadline",
      +      "regulatory_exposure",
      +      "platform_policy_change",
      +      "data_breach",
      +      "peer_company_incident",
      +      "litigation",
      +      "positive_media",
      +      "negative_media",
      +      "award_recognition",
      +      "tech_adoption_adjacent",
      +      "competitor_installed",
      +      "competitor_newly_adopted",
      +      "overlapping_tools_in_category",
      +      "recent_software_purchases",
      +      "outbound_domains_registered",
      +      "mcp_server_published",
      +      "hf_org_paid_plan",
      +      "bug_bounty_ai_scope",
      +      "new_exec_buyer_role",
      +      "exec_departure",
      +      "first_hire_in_function",
      +      "competitor_outage_deprecation",
      +      "competitor_acquired_closed",
      +      "competitor_logo_removed",
      +      "competitor_positioning_change",
      +      "competitor_banned_or_sanctioned",
      +      "social_post_about_problem",
      +      "podcast_or_talk_appearance",
      +      "exec_public_appearance",
      +      "named_project_underway",
      +      "customer_peer_reference"
      +    ],
      +    "type": "string"
      +  },
      +  "maxItems": 15,
      +  "type": "array"
      +}
    • changedOutput schema / properties / profile / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "buyerRoles": {
      -        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "company": {
      -        "description": "The seller company's name",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "competitors": {
      -        "description": "Competitors, as domains or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "customers": {
      -        "description": "Current customers, as domains (acme.com) or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "doNotContact": {
      -        "description": "Companies the user said never to contact (domains)",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "employees": {
      -        "additionalProperties": false,
      -        "description": "Headcount band the seller can close, when the user has said",
      -        "properties": {
      -          "max": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "min": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "exclusions": {
      -        "description": "Companies or kinds of company to leave out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "hard": {
      -        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      -        "items": {
      -          "enum": [
      -            "size",
      -            "fit",
      -            "intent"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 3,
      -        "type": "array"
      -      },
      -      "icp": {
      -        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "investors": {
      -        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "lost": {
      -        "description": "Deals lost or churned (domains or names), with why if known",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "needPatterns": {
      -        "description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. Discover drafts them when left out and returns them to review; only signals matching one rank",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "need": {
      -              "maxLength": 160,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "proof": {
      -              "maxLength": 300,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "where": {
      -              "items": {
      -                "enum": [
      -                  "jobs",
      -                  "tools",
      -                  "news",
      -                  "site",
      -                  "ai_adoption"
      -                ],
      -                "type": "string"
      -              },
      -              "maxItems": 5,
      -              "minItems": 1,
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "need",
      -            "where",
      -            "proof"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 5,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "notes": {
      -        "description": "Anything else the user said that should shape the list",
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "openDeals": {
      -        "description": "Companies in an open deal (domains): left out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "product": {
      -        "description": "What the seller sells, in a sentence or two",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "regions": {
      -        "description": "Regions or countries the seller sells into",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "segments": {
      -        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "user": {
      -        "additionalProperties": false,
      -        "description": "Who the user is: their name and role at the seller",
      -        "properties": {
      -          "name": {
      -            "maxLength": 120,
      -            "type": "string"
      -          },
      -          "role": {
      -            "maxLength": 120,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "warmPaths": {
      -        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "company": {
      -              "maxLength": 200,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "confirmedAt": {
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "path": {
      -              "maxLength": 300,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "company",
      -            "path"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "won": {
      -        "description": "Deals won (domains or names): the pattern to find more of",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "ycBatch": {
      -        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      -        "maxLength": 40,
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "buyerRoles": {
      +        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "company": {
      +        "description": "The seller company's name",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "competitors": {
      +        "description": "Competitors, as domains or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "customers": {
      +        "description": "Current customers, as domains (acme.com) or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "doNotContact": {
      +        "description": "Companies the user said never to contact (domains)",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "employees": {
      +        "additionalProperties": false,
      +        "description": "Headcount band the seller can close, when the user has said",
      +        "properties": {
      +          "max": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "min": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "exclusions": {
      +        "description": "Companies or kinds of company to leave out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "hard": {
      +        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      +        "items": {
      +          "enum": [
      +            "size",
      +            "fit",
      +            "intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 3,
      +        "type": "array"
      +      },
      +      "icp": {
      +        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "investors": {
      +        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "lost": {
      +        "description": "Deals lost or churned (domains or names), with why if known",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "needPatterns": {
      +        "description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words (s97). Discover drafts them when left out and returns them to review; only signals matching one rank",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "need": {
      +              "maxLength": 160,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "proof": {
      +              "maxLength": 300,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "where": {
      +              "items": {
      +                "enum": [
      +                  "jobs",
      +                  "tools",
      +                  "news",
      +                  "site",
      +                  "ai_adoption"
      +                ],
      +                "type": "string"
      +              },
      +              "maxItems": 5,
      +              "minItems": 1,
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "need",
      +            "where",
      +            "proof"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 12,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "notes": {
      +        "description": "Anything else the user said that should shape the list",
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "openDeals": {
      +        "description": "Companies in an open deal (domains): left out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "product": {
      +        "description": "What the seller sells, in a sentence or two",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "regions": {
      +        "description": "Regions or countries the seller sells into",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "segments": {
      +        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "signalTypes": {
      +        "description": "Catalog signal types the user added from the \"add more\" list (s97), by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none",
      +        "items": {
      +          "enum": [
      +            "job_posting_buyer_role",
      +            "job_posting_mentions_tool",
      +            "hiring_surge_function",
      +            "headcount_growth",
      +            "role_reopened",
      +            "layoffs",
      +            "hiring_freeze",
      +            "function_attrition",
      +            "employee_sentiment_drop",
      +            "funding_round",
      +            "funding_use_of_funds_match",
      +            "debt_financing",
      +            "ipo_filing",
      +            "acquires_company",
      +            "company_acquired",
      +            "spin_off_carve_out",
      +            "geo_expansion",
      +            "partnership_announced",
      +            "partnership_ended",
      +            "prospect_loses_client",
      +            "revenue_decline",
      +            "distress_bankruptcy",
      +            "earnings_call_mention",
      +            "annual_report_insight",
      +            "company_register_change",
      +            "product_launch",
      +            "website_relaunch",
      +            "site_section_added",
      +            "pricing_change",
      +            "legal_page_change",
      +            "new_public_repo_by_topic",
      +            "own_incident_spike",
      +            "public_symptom_visible",
      +            "own_customer_reviews_negative",
      +            "event_sponsorship",
      +            "compliance_pursuit",
      +            "regulation_deadline",
      +            "regulatory_exposure",
      +            "platform_policy_change",
      +            "data_breach",
      +            "peer_company_incident",
      +            "litigation",
      +            "positive_media",
      +            "negative_media",
      +            "award_recognition",
      +            "tech_adoption_adjacent",
      +            "competitor_installed",
      +            "competitor_newly_adopted",
      +            "overlapping_tools_in_category",
      +            "recent_software_purchases",
      +            "outbound_domains_registered",
      +            "mcp_server_published",
      +            "hf_org_paid_plan",
      +            "bug_bounty_ai_scope",
      +            "new_exec_buyer_role",
      +            "exec_departure",
      +            "first_hire_in_function",
      +            "competitor_outage_deprecation",
      +            "competitor_acquired_closed",
      +            "competitor_logo_removed",
      +            "competitor_positioning_change",
      +            "competitor_banned_or_sanctioned",
      +            "social_post_about_problem",
      +            "podcast_or_talk_appearance",
      +            "exec_public_appearance",
      +            "named_project_underway",
      +            "customer_peer_reference"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 15,
      +        "type": "array"
      +      },
      +      "user": {
      +        "additionalProperties": false,
      +        "description": "Who the user is: their name and role at the seller",
      +        "properties": {
      +          "name": {
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "role": {
      +            "maxLength": 120,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "warmPaths": {
      +        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "company": {
      +              "maxLength": 200,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "confirmedAt": {
      +              "format": "date",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +              "type": "string"
      +            },
      +            "path": {
      +              "maxLength": 300,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "company",
      +            "path"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "won": {
      +        "description": "Deals won (domains or names): the pattern to find more of",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "ycBatch": {
      +        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      +        "maxLength": 40,
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / signals
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "addMore": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "family": {
      +            "type": "string"
      +          },
      +          "label": {
      +            "type": "string"
      +          },
      +          "types": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "family",
      +          "label",
      +          "types"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "draft": {
      +      "type": "string"
      +    },
      +    "needPatterns": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "need": {
      +            "maxLength": 160,
      +            "minLength": 3,
      +            "type": "string"
      +          },
      +          "proof": {
      +            "maxLength": 300,
      +            "minLength": 3,
      +            "type": "string"
      +          },
      +          "where": {
      +            "items": {
      +              "enum": [
      +                "jobs",
      +                "tools",
      +                "news",
      +                "site",
      +                "ai_adoption"
      +              ],
      +              "type": "string"
      +            },
      +            "maxItems": 5,
      +            "minItems": 1,
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "need",
      +          "where",
      +          "proof"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "signalTypes": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "name"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "addMore"
      +  ],
      +  "type": "object"
      +}
  9. Changed2 schema fields changed
    • addedInput schema / properties / context / properties / needPatterns
      Added value: +{
      +  "description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. Discover drafts them when left out and returns them to review; only signals matching one rank",
      +  "items": {
      +    "properties": {
      +      "need": {
      +        "maxLength": 160,
      +        "minLength": 3,
      +        "type": "string"
      +      },
      +      "proof": {
      +        "maxLength": 300,
      +        "minLength": 3,
      +        "type": "string"
      +      },
      +      "where": {
      +        "items": {
      +          "enum": [
      +            "jobs",
      +            "tools",
      +            "news",
      +            "site",
      +            "ai_adoption"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 5,
      +        "minItems": 1,
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "need",
      +      "where",
      +      "proof"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 5,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • changedOutput schema / properties / profile / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "buyerRoles": {
      -        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "company": {
      -        "description": "The seller company's name",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "competitors": {
      -        "description": "Competitors, as domains or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "customers": {
      -        "description": "Current customers, as domains (acme.com) or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "doNotContact": {
      -        "description": "Companies the user said never to contact (domains)",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "employees": {
      -        "additionalProperties": false,
      -        "description": "Headcount band the seller can close, when the user has said",
      -        "properties": {
      -          "max": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "min": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "exclusions": {
      -        "description": "Companies or kinds of company to leave out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "hard": {
      -        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      -        "items": {
      -          "enum": [
      -            "size",
      -            "fit",
      -            "intent"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 3,
      -        "type": "array"
      -      },
      -      "icp": {
      -        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "investors": {
      -        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "lost": {
      -        "description": "Deals lost or churned (domains or names), with why if known",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "notes": {
      -        "description": "Anything else the user said that should shape the list",
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "openDeals": {
      -        "description": "Companies in an open deal (domains): left out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "product": {
      -        "description": "What the seller sells, in a sentence or two",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "regions": {
      -        "description": "Regions or countries the seller sells into",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "segments": {
      -        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "user": {
      -        "additionalProperties": false,
      -        "description": "Who the user is: their name and role at the seller",
      -        "properties": {
      -          "name": {
      -            "maxLength": 120,
      -            "type": "string"
      -          },
      -          "role": {
      -            "maxLength": 120,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "warmPaths": {
      -        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "company": {
      -              "maxLength": 200,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "confirmedAt": {
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "path": {
      -              "maxLength": 300,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "company",
      -            "path"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "won": {
      -        "description": "Deals won (domains or names): the pattern to find more of",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "ycBatch": {
      -        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      -        "maxLength": 40,
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "buyerRoles": {
      +        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "company": {
      +        "description": "The seller company's name",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "competitors": {
      +        "description": "Competitors, as domains or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "customers": {
      +        "description": "Current customers, as domains (acme.com) or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "doNotContact": {
      +        "description": "Companies the user said never to contact (domains)",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "employees": {
      +        "additionalProperties": false,
      +        "description": "Headcount band the seller can close, when the user has said",
      +        "properties": {
      +          "max": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "min": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "exclusions": {
      +        "description": "Companies or kinds of company to leave out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "hard": {
      +        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      +        "items": {
      +          "enum": [
      +            "size",
      +            "fit",
      +            "intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 3,
      +        "type": "array"
      +      },
      +      "icp": {
      +        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "investors": {
      +        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "lost": {
      +        "description": "Deals lost or churned (domains or names), with why if known",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "needPatterns": {
      +        "description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. Discover drafts them when left out and returns them to review; only signals matching one rank",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "need": {
      +              "maxLength": 160,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "proof": {
      +              "maxLength": 300,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "where": {
      +              "items": {
      +                "enum": [
      +                  "jobs",
      +                  "tools",
      +                  "news",
      +                  "site",
      +                  "ai_adoption"
      +                ],
      +                "type": "string"
      +              },
      +              "maxItems": 5,
      +              "minItems": 1,
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "need",
      +            "where",
      +            "proof"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 5,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "notes": {
      +        "description": "Anything else the user said that should shape the list",
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "openDeals": {
      +        "description": "Companies in an open deal (domains): left out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "product": {
      +        "description": "What the seller sells, in a sentence or two",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "regions": {
      +        "description": "Regions or countries the seller sells into",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "segments": {
      +        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "user": {
      +        "additionalProperties": false,
      +        "description": "Who the user is: their name and role at the seller",
      +        "properties": {
      +          "name": {
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "role": {
      +            "maxLength": 120,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "warmPaths": {
      +        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "company": {
      +              "maxLength": 200,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "confirmedAt": {
      +              "format": "date",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +              "type": "string"
      +            },
      +            "path": {
      +              "maxLength": 300,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "company",
      +            "path"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "won": {
      +        "description": "Deals won (domains or names): the pattern to find more of",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "ycBatch": {
      +        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      +        "maxLength": 40,
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  10. Changed2 schema fields changed
    • addedInput schema / properties / context / properties / hard
      Added value: +{
      +  "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      +  "items": {
      +    "enum": [
      +      "size",
      +      "fit",
      +      "intent"
      +    ],
      +    "type": "string"
      +  },
      +  "maxItems": 3,
      +  "type": "array"
      +}
    • changedOutput schema / properties / profile / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "buyerRoles": {
      -        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "company": {
      -        "description": "The seller company's name",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "competitors": {
      -        "description": "Competitors, as domains or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "customers": {
      -        "description": "Current customers, as domains (acme.com) or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "doNotContact": {
      -        "description": "Companies the user said never to contact (domains)",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "employees": {
      -        "additionalProperties": false,
      -        "description": "Headcount band the seller can close, when the user has said",
      -        "properties": {
      -          "max": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "min": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "exclusions": {
      -        "description": "Companies or kinds of company to leave out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "icp": {
      -        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "investors": {
      -        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "lost": {
      -        "description": "Deals lost or churned (domains or names), with why if known",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "notes": {
      -        "description": "Anything else the user said that should shape the list",
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "openDeals": {
      -        "description": "Companies in an open deal (domains): left out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "product": {
      -        "description": "What the seller sells, in a sentence or two",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "regions": {
      -        "description": "Regions or countries the seller sells into",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "segments": {
      -        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "user": {
      -        "additionalProperties": false,
      -        "description": "Who the user is: their name and role at the seller",
      -        "properties": {
      -          "name": {
      -            "maxLength": 120,
      -            "type": "string"
      -          },
      -          "role": {
      -            "maxLength": 120,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "warmPaths": {
      -        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "company": {
      -              "maxLength": 200,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "confirmedAt": {
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "path": {
      -              "maxLength": 300,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "company",
      -            "path"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "won": {
      -        "description": "Deals won (domains or names): the pattern to find more of",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "ycBatch": {
      -        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      -        "maxLength": 40,
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "buyerRoles": {
      +        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "company": {
      +        "description": "The seller company's name",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "competitors": {
      +        "description": "Competitors, as domains or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "customers": {
      +        "description": "Current customers, as domains (acme.com) or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "doNotContact": {
      +        "description": "Companies the user said never to contact (domains)",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "employees": {
      +        "additionalProperties": false,
      +        "description": "Headcount band the seller can close, when the user has said",
      +        "properties": {
      +          "max": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "min": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "exclusions": {
      +        "description": "Companies or kinds of company to leave out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "hard": {
      +        "description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it",
      +        "items": {
      +          "enum": [
      +            "size",
      +            "fit",
      +            "intent"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 3,
      +        "type": "array"
      +      },
      +      "icp": {
      +        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "investors": {
      +        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "lost": {
      +        "description": "Deals lost or churned (domains or names), with why if known",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "notes": {
      +        "description": "Anything else the user said that should shape the list",
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "openDeals": {
      +        "description": "Companies in an open deal (domains): left out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "product": {
      +        "description": "What the seller sells, in a sentence or two",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "regions": {
      +        "description": "Regions or countries the seller sells into",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "segments": {
      +        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "user": {
      +        "additionalProperties": false,
      +        "description": "Who the user is: their name and role at the seller",
      +        "properties": {
      +          "name": {
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "role": {
      +            "maxLength": 120,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "warmPaths": {
      +        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "company": {
      +              "maxLength": 200,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "confirmedAt": {
      +              "format": "date",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +              "type": "string"
      +            },
      +            "path": {
      +              "maxLength": 300,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "company",
      +            "path"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "won": {
      +        "description": "Deals won (domains or names): the pattern to find more of",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "ycBatch": {
      +        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      +        "maxLength": 40,
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  11. Changed2 schema fields changed
    • changedInput schema / properties / context / properties / investors / description
      Previous value: -"The seller's own investors (firms or angels), e.g. \"Sequoia Capital\": matched in code against each account's pages and funding news, never sent to a model"New value: +"Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model"
    • changedOutput schema / properties / profile / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "buyerRoles": {
      -        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "company": {
      -        "description": "The seller company's name",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "competitors": {
      -        "description": "Competitors, as domains or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "customers": {
      -        "description": "Current customers, as domains (acme.com) or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "doNotContact": {
      -        "description": "Companies the user said never to contact (domains)",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "employees": {
      -        "additionalProperties": false,
      -        "description": "Headcount band the seller can close, when the user has said",
      -        "properties": {
      -          "max": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "min": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "exclusions": {
      -        "description": "Companies or kinds of company to leave out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "icp": {
      -        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "investors": {
      -        "description": "The seller's own investors (firms or angels), e.g. \"Sequoia Capital\": matched in code against each account's pages and funding news, never sent to a model",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "lost": {
      -        "description": "Deals lost or churned (domains or names), with why if known",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "notes": {
      -        "description": "Anything else the user said that should shape the list",
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "openDeals": {
      -        "description": "Companies in an open deal (domains): left out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "product": {
      -        "description": "What the seller sells, in a sentence or two",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "regions": {
      -        "description": "Regions or countries the seller sells into",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "segments": {
      -        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "user": {
      -        "additionalProperties": false,
      -        "description": "Who the user is: their name and role at the seller",
      -        "properties": {
      -          "name": {
      -            "maxLength": 120,
      -            "type": "string"
      -          },
      -          "role": {
      -            "maxLength": 120,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "warmPaths": {
      -        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "company": {
      -              "maxLength": 200,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "confirmedAt": {
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "path": {
      -              "maxLength": 300,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "company",
      -            "path"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "won": {
      -        "description": "Deals won (domains or names): the pattern to find more of",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "ycBatch": {
      -        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      -        "maxLength": 40,
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "buyerRoles": {
      +        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "company": {
      +        "description": "The seller company's name",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "competitors": {
      +        "description": "Competitors, as domains or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "customers": {
      +        "description": "Current customers, as domains (acme.com) or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "doNotContact": {
      +        "description": "Companies the user said never to contact (domains)",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "employees": {
      +        "additionalProperties": false,
      +        "description": "Headcount band the seller can close, when the user has said",
      +        "properties": {
      +          "max": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "min": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "exclusions": {
      +        "description": "Companies or kinds of company to leave out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "icp": {
      +        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "investors": {
      +        "description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "lost": {
      +        "description": "Deals lost or churned (domains or names), with why if known",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "notes": {
      +        "description": "Anything else the user said that should shape the list",
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "openDeals": {
      +        "description": "Companies in an open deal (domains): left out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "product": {
      +        "description": "What the seller sells, in a sentence or two",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "regions": {
      +        "description": "Regions or countries the seller sells into",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "segments": {
      +        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "user": {
      +        "additionalProperties": false,
      +        "description": "Who the user is: their name and role at the seller",
      +        "properties": {
      +          "name": {
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "role": {
      +            "maxLength": 120,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "warmPaths": {
      +        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "company": {
      +              "maxLength": 200,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "confirmedAt": {
      +              "format": "date",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +              "type": "string"
      +            },
      +            "path": {
      +              "maxLength": 300,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "company",
      +            "path"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "won": {
      +        "description": "Deals won (domains or names): the pattern to find more of",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "ycBatch": {
      +        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      +        "maxLength": 40,
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  12. Changed3 schema fields changed
    • addedInput schema / properties / context / properties / investors
      Added value: +{
      +  "description": "The seller's own investors (firms or angels), e.g. \"Sequoia Capital\": matched in code against each account's pages and funding news, never sent to a model",
      +  "items": {
      +    "maxLength": 200,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 500,
      +  "type": "array"
      +}
    • addedInput schema / properties / context / properties / ycBatch
      Added value: +{
      +  "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      +  "maxLength": 40,
      +  "type": "string"
      +}
    • changedOutput schema / properties / profile / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "buyerRoles": {
      -        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "company": {
      -        "description": "The seller company's name",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "competitors": {
      -        "description": "Competitors, as domains or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "customers": {
      -        "description": "Current customers, as domains (acme.com) or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "doNotContact": {
      -        "description": "Companies the user said never to contact (domains)",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "employees": {
      -        "additionalProperties": false,
      -        "description": "Headcount band the seller can close, when the user has said",
      -        "properties": {
      -          "max": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "min": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "exclusions": {
      -        "description": "Companies or kinds of company to leave out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "icp": {
      -        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "lost": {
      -        "description": "Deals lost or churned (domains or names), with why if known",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "notes": {
      -        "description": "Anything else the user said that should shape the list",
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "openDeals": {
      -        "description": "Companies in an open deal (domains): left out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "product": {
      -        "description": "What the seller sells, in a sentence or two",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "regions": {
      -        "description": "Regions or countries the seller sells into",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "segments": {
      -        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "user": {
      -        "additionalProperties": false,
      -        "description": "Who the user is: their name and role at the seller",
      -        "properties": {
      -          "name": {
      -            "maxLength": 120,
      -            "type": "string"
      -          },
      -          "role": {
      -            "maxLength": 120,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "warmPaths": {
      -        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "company": {
      -              "maxLength": 200,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "confirmedAt": {
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "path": {
      -              "maxLength": 300,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "company",
      -            "path"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "won": {
      -        "description": "Deals won (domains or names): the pattern to find more of",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "buyerRoles": {
      +        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "company": {
      +        "description": "The seller company's name",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "competitors": {
      +        "description": "Competitors, as domains or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "customers": {
      +        "description": "Current customers, as domains (acme.com) or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "doNotContact": {
      +        "description": "Companies the user said never to contact (domains)",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "employees": {
      +        "additionalProperties": false,
      +        "description": "Headcount band the seller can close, when the user has said",
      +        "properties": {
      +          "max": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "min": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "exclusions": {
      +        "description": "Companies or kinds of company to leave out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "icp": {
      +        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "investors": {
      +        "description": "The seller's own investors (firms or angels), e.g. \"Sequoia Capital\": matched in code against each account's pages and funding news, never sent to a model",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "lost": {
      +        "description": "Deals lost or churned (domains or names), with why if known",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "notes": {
      +        "description": "Anything else the user said that should shape the list",
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "openDeals": {
      +        "description": "Companies in an open deal (domains): left out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "product": {
      +        "description": "What the seller sells, in a sentence or two",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "regions": {
      +        "description": "Regions or countries the seller sells into",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "segments": {
      +        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "user": {
      +        "additionalProperties": false,
      +        "description": "Who the user is: their name and role at the seller",
      +        "properties": {
      +          "name": {
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "role": {
      +            "maxLength": 120,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "warmPaths": {
      +        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "company": {
      +              "maxLength": 200,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "confirmedAt": {
      +              "format": "date",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +              "type": "string"
      +            },
      +            "path": {
      +              "maxLength": 300,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "company",
      +            "path"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "won": {
      +        "description": "Deals won (domains or names): the pattern to find more of",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "ycBatch": {
      +        "description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out",
      +        "maxLength": 40,
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  13. Changed2 schema fields changed
    • changedInput schema / properties / context / properties / employees / properties / max / minimum
      Previous value: -2New value: +1
    • changedOutput schema / properties / profile / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "buyerRoles": {
      -        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "company": {
      -        "description": "The seller company's name",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "competitors": {
      -        "description": "Competitors, as domains or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "customers": {
      -        "description": "Current customers, as domains (acme.com) or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "doNotContact": {
      -        "description": "Companies the user said never to contact (domains)",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "employees": {
      -        "additionalProperties": false,
      -        "description": "Headcount band the seller can close, when the user has said",
      -        "properties": {
      -          "max": {
      -            "maximum": 9007199254740991,
      -            "minimum": 2,
      -            "type": "integer"
      -          },
      -          "min": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "exclusions": {
      -        "description": "Companies or kinds of company to leave out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "icp": {
      -        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "lost": {
      -        "description": "Deals lost or churned (domains or names), with why if known",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "notes": {
      -        "description": "Anything else the user said that should shape the list",
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "openDeals": {
      -        "description": "Companies in an open deal (domains): left out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "product": {
      -        "description": "What the seller sells, in a sentence or two",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "regions": {
      -        "description": "Regions or countries the seller sells into",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "segments": {
      -        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "user": {
      -        "additionalProperties": false,
      -        "description": "Who the user is: their name and role at the seller",
      -        "properties": {
      -          "name": {
      -            "maxLength": 120,
      -            "type": "string"
      -          },
      -          "role": {
      -            "maxLength": 120,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "warmPaths": {
      -        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "company": {
      -              "maxLength": 200,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "confirmedAt": {
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "path": {
      -              "maxLength": 300,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "company",
      -            "path"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "won": {
      -        "description": "Deals won (domains or names): the pattern to find more of",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "buyerRoles": {
      +        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "company": {
      +        "description": "The seller company's name",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "competitors": {
      +        "description": "Competitors, as domains or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "customers": {
      +        "description": "Current customers, as domains (acme.com) or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "doNotContact": {
      +        "description": "Companies the user said never to contact (domains)",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "employees": {
      +        "additionalProperties": false,
      +        "description": "Headcount band the seller can close, when the user has said",
      +        "properties": {
      +          "max": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "min": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "exclusions": {
      +        "description": "Companies or kinds of company to leave out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "icp": {
      +        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "lost": {
      +        "description": "Deals lost or churned (domains or names), with why if known",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "notes": {
      +        "description": "Anything else the user said that should shape the list",
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "openDeals": {
      +        "description": "Companies in an open deal (domains): left out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "product": {
      +        "description": "What the seller sells, in a sentence or two",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "regions": {
      +        "description": "Regions or countries the seller sells into",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "segments": {
      +        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "user": {
      +        "additionalProperties": false,
      +        "description": "Who the user is: their name and role at the seller",
      +        "properties": {
      +          "name": {
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "role": {
      +            "maxLength": 120,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "warmPaths": {
      +        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "company": {
      +              "maxLength": 200,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "confirmedAt": {
      +              "format": "date",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +              "type": "string"
      +            },
      +            "path": {
      +              "maxLength": 300,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "company",
      +            "path"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "won": {
      +        "description": "Deals won (domains or names): the pattern to find more of",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  14. Changed2 schema fields changed
    • changedInput schema / properties / context / properties / warmPaths / description
      Previous value: -"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". Saving replaces the list: pass the whole list. Stays local; never sent to a model"New value: +"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model"
    • changedOutput schema / properties / profile / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "buyerRoles": {
      -        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "company": {
      -        "description": "The seller company's name",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "competitors": {
      -        "description": "Competitors, as domains or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "customers": {
      -        "description": "Current customers, as domains (acme.com) or names: never targeted",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "doNotContact": {
      -        "description": "Companies the user said never to contact (domains)",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "employees": {
      -        "additionalProperties": false,
      -        "description": "Headcount band the seller can close, when the user has said",
      -        "properties": {
      -          "max": {
      -            "maximum": 9007199254740991,
      -            "minimum": 2,
      -            "type": "integer"
      -          },
      -          "min": {
      -            "maximum": 9007199254740991,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "exclusions": {
      -        "description": "Companies or kinds of company to leave out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "icp": {
      -        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "lost": {
      -        "description": "Deals lost or churned (domains or names), with why if known",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "notes": {
      -        "description": "Anything else the user said that should shape the list",
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "openDeals": {
      -        "description": "Companies in an open deal (domains): left out",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "product": {
      -        "description": "What the seller sells, in a sentence or two",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "regions": {
      -        "description": "Regions or countries the seller sells into",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "segments": {
      -        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "user": {
      -        "additionalProperties": false,
      -        "description": "Who the user is: their name and role at the seller",
      -        "properties": {
      -          "name": {
      -            "maxLength": 120,
      -            "type": "string"
      -          },
      -          "role": {
      -            "maxLength": 120,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "warmPaths": {
      -        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". Saving replaces the list: pass the whole list. Stays local; never sent to a model",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "company": {
      -              "maxLength": 200,
      -              "minLength": 3,
      -              "type": "string"
      -            },
      -            "confirmedAt": {
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "path": {
      -              "maxLength": 300,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "company",
      -            "path"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      },
      -      "won": {
      -        "description": "Deals won (domains or names): the pattern to find more of",
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 500,
      -        "type": "array"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "buyerRoles": {
      +        "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "company": {
      +        "description": "The seller company's name",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "competitors": {
      +        "description": "Competitors, as domains or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "customers": {
      +        "description": "Current customers, as domains (acme.com) or names: never targeted",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "doNotContact": {
      +        "description": "Companies the user said never to contact (domains)",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "employees": {
      +        "additionalProperties": false,
      +        "description": "Headcount band the seller can close, when the user has said",
      +        "properties": {
      +          "max": {
      +            "maximum": 9007199254740991,
      +            "minimum": 2,
      +            "type": "integer"
      +          },
      +          "min": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "exclusions": {
      +        "description": "Companies or kinds of company to leave out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "icp": {
      +        "description": "Who the ideal customer is: company type, industry, size, stage, region",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "lost": {
      +        "description": "Deals lost or churned (domains or names), with why if known",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "notes": {
      +        "description": "Anything else the user said that should shape the list",
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "openDeals": {
      +        "description": "Companies in an open deal (domains): left out",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "product": {
      +        "description": "What the seller sells, in a sentence or two",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "regions": {
      +        "description": "Regions or countries the seller sells into",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "segments": {
      +        "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "user": {
      +        "additionalProperties": false,
      +        "description": "Who the user is: their name and role at the seller",
      +        "properties": {
      +          "name": {
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "role": {
      +            "maxLength": 120,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "warmPaths": {
      +        "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "company": {
      +              "maxLength": 200,
      +              "minLength": 3,
      +              "type": "string"
      +            },
      +            "confirmedAt": {
      +              "format": "date",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +              "type": "string"
      +            },
      +            "path": {
      +              "maxLength": 300,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "company",
      +            "path"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "won": {
      +        "description": "Deals won (domains or names): the pattern to find more of",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  15. First observed

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnlyHint=false and destructiveHint=false; the description adds substantial context beyond that: the read mode ("Omit to read"), field-by-field merge semantics, what is returned (missing fields plus a question each), that quoted page text is normalized and instruction-like quotes are flagged in `<field>Flags` with an attack family, and that the tool is free. It does not, however, state what a merge does to unspecified fields beyond "field by field" or how conflicts resolve, so the mutation profile is not fully pinned down.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded and nearly every clause is substantive, but the middle paragraph is a single ~90-word sentence with nested parentheticals that is hard to scan, and the leading "Price: free." is commercial framing rather than task guidance. Density here costs readability without much waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, deeply nested tool with an output schema, the description covers everything an agent needs to call it correctly: read vs write mode, merge behavior, the missing-field/question return, the signals sub-object, and the safety flagging of quoted text. Return values need not be detailed further because an output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description nonetheless adds cross-field meaning the schema can't, notably the `signalFamilies` vs `signalTypes` decision (save switched-on families so discover drafts 2–3 signals each, or save a type by id), the `signals.addMore` catalog reference, and the `draft` prompt that appears only when ICP and buyer roles are known with no patterns saved. The top-level `seller` vs `context` split is implied rather than stated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (saves and reads) plus the exact resource: the user's own company facts, one entry per seller site, scoped to the SalesMap workspace. It also draws the boundary with `discover` ("discover starts from it") and with prospect-company questions, so an agent can distinguish it from siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit "Use when" list with quoted user utterances ("remember that we sell to …", "our competitors are …", "what do you know about my company") and an explicit "Skip when" that routes prospect-company and closed-lost-watch questions elsewhere. Both when and when-not are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.