changedOutput schema / properties / query_interpretation / anyOf
Previous value: -[
- {
- "description": "How ``alphai_news_search`` read a free-text ``query`` — the echo that makes\na resolver miss legible. Before it, a query read as the wrong company or\ndiscarded entirely came back indistinguishable from a hit\n(issues/2026-08-16-freetext-query-resolves-jane-street-to-janl.md).\n\n``mode``: ``resolved`` — at least one query word became a filter that is\napplied to the items; ``overridden`` — the query resolved, but explicit\n``tickers``/``category`` replaced every filter it produced; ``unresolved`` —\nno query word matched a ticker, company name or topic word, so the items\nare NOT matches for the query (``note`` says what they are instead).\n``ignored_terms`` lists the content words that matched nothing; stopwords\nare dropped silently. ``note`` is one or two plain sentences an agent can act\non, same role as ``ticker_note``.",
- "properties": {
- "category": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "default": null
- },
- "category_term": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "default": null
- },
- "ignored_terms": {
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "mode": {
- "enum": [
- "resolved",
- "overridden",
- "unresolved"
- ],
- "type": "string"
- },
- "note": {
- "default": "",
- "type": "string"
- },
- "search": {
- "anyOf": [
- {
- "description": "How the text search read the query (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 2): ``strict`` = every term required; ``broadened`` = fewer strict\nmatches than the threshold, so any rare term plus at least two of the\nterms; ``no_match``; ``no_terms``. ``sort`` is ``published`` when every\nterm is a very common word (newest matches, not best). ``terms`` are the\nnormalized (stemmed) lexemes the index holds. ``matched`` counts the\nvisible matches inside the bounded candidate set, never a global total.",
- "properties": {
- "engine": {
- "default": "postgres",
- "enum": [
- "postgres",
- "meilisearch"
- ],
- "type": "string"
- },
- "matched": {
- "default": 0,
- "type": "integer"
- },
- "mode": {
- "enum": [
- "strict",
- "broadened",
- "no_match",
- "no_terms"
- ],
- "type": "string"
- },
- "optional_terms": {
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "required_terms": {
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "sort": {
- "enum": [
- "relevance",
- "published"
- ],
- "type": "string"
- },
- "terms": {
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "window_from": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "default": null
- }
- },
- "required": [
- "mode",
- "sort"
- ],
- "type": "object"
- },
- {
- "type": "null"
- }
- ],
- "default": null
- },
- "tickers": {
- "items": {
- "description": "One ticker a free-text ``query`` resolved to (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 1). ``name`` is the issuer's registered name, so an agent can see that\n\"PMI\" was read as Picard Medical rather than the ISM purchasing-managers\nindex; ``term`` is the query word that produced it (share-class siblings\ninherit the seed word's term).",
- "properties": {
- "name": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "default": null
- },
- "term": {
- "type": "string"
- },
- "ticker": {
- "type": "string"
- }
- },
- "required": [
- "ticker",
- "term"
- ],
- "type": "object"
- },
- "type": "array"
- }
- },
- "required": [
- "mode"
- ],
- "type": "object"
- },
- {
- "type": "null"
- }
-]New value: +[
+ {
+ "description": "How ``alphai_news_search`` read a free-text ``query`` — the echo that makes\na resolver miss legible. Before it, a query read as the wrong company or\ndiscarded entirely came back indistinguishable from a hit\n(issues/2026-08-16-freetext-query-resolves-jane-street-to-janl.md).\n\n``mode``: ``searched`` — the text search served the items\n(``NEWS_SEARCH_MODE=on``, the normal state since 2026-09-23): ``search``\nsays what selected them, ``tickers``/``category`` only say what the words\nwere ALSO read as (reference, never a filter) and ``ignored_terms`` is\nempty, because nothing was ignored — the whole text was searched. Before\nthis (review finding 1a/1b, 2026-09-23) the text path echoed the\nresolver's ``resolved`` + its ``ignored_terms`` next to a ``search`` block\nwhose ``terms`` were those very words, and a read category looked applied\nwhile nothing but the text filtered the items. The resolver modes describe\nthe fallback when the text search is switched off: ``resolved`` — at least\none query word became a filter that is applied to the items;\n``overridden`` — the query resolved, but explicit ``tickers``/``category``\nreplaced every filter it produced; ``unresolved`` — no query word matched a\nticker, company name or topic word, so the items are NOT matches for the\nquery (``note`` says what they are instead). ``ignored_terms`` then lists\nthe content words that matched nothing; stopwords are dropped silently.\n``note`` is one or two plain sentences an agent can act on, same role as\n``ticker_note``.",
+ "properties": {
+ "category": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "category_term": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "ignored_terms": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "mode": {
+ "enum": [
+ "searched",
+ "resolved",
+ "overridden",
+ "unresolved"
+ ],
+ "type": "string"
+ },
+ "note": {
+ "default": "",
+ "type": "string"
+ },
+ "search": {
+ "anyOf": [
+ {
+ "description": "How the text search read the query (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 2): ``strict`` = every term required; ``broadened`` = fewer strict\nmatches than the threshold, so the most common words were dropped first\nand every item carries at least two of the terms; ``no_match``;\n``no_terms``. ``sort`` is ``published`` when every term is a very common\nword (newest matches, not best). ``terms`` are the normalized words that\nwere searched. ``required_terms`` is filled only when the search reports\nwhich words every broadened row had to carry (the Postgres path does, the\nengine does not) — ``search_match.terms_matched`` on each item is the\ncount to trust. ``matched`` counts the visible matches inside the bounded\ncandidate set, never a global total. Which engine answered is NOT part of\nthe contract: it goes to the search log (``ranking_version``). The\n``engine`` field that shipped with 1.41.0 was read by an external review\nas an implementation leak, and it was one — a client has no action on\n\"meilisearch\" (issues/2026-09-23-news-search-review-triage.md).",
+ "properties": {
+ "matched": {
+ "default": 0,
+ "type": "integer"
+ },
+ "mode": {
+ "enum": [
+ "strict",
+ "broadened",
+ "no_match",
+ "no_terms"
+ ],
+ "type": "string"
+ },
+ "optional_terms": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "required_terms": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "sort": {
+ "enum": [
+ "relevance",
+ "published"
+ ],
+ "type": "string"
+ },
+ "terms": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "window_from": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ }
+ },
+ "required": [
+ "mode",
+ "sort"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "tickers": {
+ "items": {
+ "description": "One ticker a free-text ``query`` resolved to (docs/HYBRID_NEWS_SEARCH_PLAN.md\nstep 1). ``name`` is the issuer's registered name, so an agent can see that\n\"PMI\" was read as Picard Medical rather than the ISM purchasing-managers\nindex; ``term`` is the query word that produced it (share-class siblings\ninherit the seed word's term).",
+ "properties": {
+ "name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "term": {
+ "type": "string"
+ },
+ "ticker": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ticker",
+ "term"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "mode"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+]