Skip to main content
Glama

Server Details

Financial news for AI agents: search, trending, insider, earnings reads, macro, scored 1-10.

Ownership verified
Status
Healthy
Uptime
83.6% over 82 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
makeev/alphai-mcp
GitHub Stars
3
Server Listing
alphai-news
ChatGPT
–
Claude
–

TDQS

A4.1/5.0

Scored across 22 tools

Disambiguation4/5

Descriptions are unusually thorough and explicitly route between similar tools ("for tickerless macro use alphai_macro", "compared with alphai_trending, which ranks single articles...", "for precise filtered queries prefer alphai_news_search"), so most boundaries are learnable. However, there is genuine redundancy: trending vs actionable_now vs radar are all ranked-feed tools with subtle differences, stories vs story differ only by list/get, and the generic search/fetch pair duplicates alphai_news_search/alphai_article.

Naming Consistency4/5

The alphai_ prefix plus snake_case noun/verb_noun pattern holds across 20 of 22 tools, and singular/plural (story/stories) sensibly encodes get-vs-list. The two ChatGPT-connector tools, `search` and `fetch`, break the pattern entirely with bare generic verbs, creating a visible inconsistency.

Tool Count3/5

22 tools for a financial-news platform spanning news, alerts, earnings, macro/earnings calendars, insider data, watchlist and stories is defensible, but it sits in the heavy band and carries removable duplication (search/fetch shadow news_search/article; three overlapping ranked feeds). The surface could be tightened without losing capability.

Completeness4/5

Coverage is broad and lifecycle-aware: alerts have list/subscribe/unsubscribe with partial-update semantics, articles are expandable from every feed, and earnings/macro/insider/calendar domains each have both forward-looking and retrospective tools. The main gap is watchlist management, which is read-only here and deferred to the website, plus no way to create or delete a watchlist server-side.

Available Tools

22 tools
alphai_actionable_nowActionable-now feedA
Read-onlyIdempotent
Inspect

Urgent financial news, ranked novelty-first. Default min_actionability='high' excludes medium-actionability stories even when novelty is high; widen the floor or hours for a broader tape. Empty quiet-period results are normal. The window uses article publication time, not the event date; min_novelty helps filter recaps. Macro events qualify without tickers. Reprints collapse by story by default (dedupe=false keeps all), with story_id, sources_count and sources. AI-generated context, not investment advice. Use detail='compact' for headlines, sources, times, tickers, scores and story/search metadata without summary, analysis or SEC detail blocks. Expand uids with alphai_article. detail='full' is default; selection, order, cursors and page metadata are identical.

NameRequiredDescriptionDefault
hoursNoLook-back window in hours; default 6.
limitNoStories; capped at 20 Free/Basic, 50 Pro.
dedupeNoCollapse coverage of one event (reprints and independent write-ups) by story (default true).
detailNofull (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.full
min_noveltyNoMin information_novelty 1-10; default 7.
min_actionabilityNoActionability floor. 'high' (default) = only act-today items; 'medium' also includes stories that shape a position over days/weeks.high

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it discloses that the default high floor silently excludes medium-actionability stories even at high novelty, that empty results during quiet periods are expected, that the window is publication-time based rather than event-time, that macro events appear without tickers, and that reprints collapse by default. It also preempts an obvious agent confusion by stating that compact vs full share identical selection, ordering, cursors and page metadata.

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

Conciseness4/5

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

The ranking premise and the most consequential default (min_actionability='high') are front-loaded, and nearly every clause carries operational meaning. Density is high and a few semicolon-linked clauses bundle two ideas at once, but there is little outright 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?

With six optional params, an output schema, and a large sibling set, the description covers what an agent needs: default filtering behavior, result-shape tradeoffs, dedupe semantics, empty-result expectations, and the expansion path via alphai_article. Return-value structure is appropriately left to the output schema.

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 still adds value by explaining the interaction between min_actionability and novelty ('excludes medium-actionability stories even when novelty is high'), the publication-time semantics of hours, and the dedupe=false escape hatch. It does not cover limit caps or numeric ranges, but those are already in the schema.

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

Purpose4/5

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

Opens with a precise framing: 'Urgent financial news, ranked novelty-first,' which names both the resource and the ordering logic, distinguishing it from alphai_news_search or alphai_ticker_news. It does not explicitly name a sibling to contrast against, so an agent must infer the boundary from the actionability/novelty framing rather than being told.

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

Usage Guidelines4/5

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

Gives concrete adjustment guidance — widen the floor or hours for a broader tape, use min_novelty to filter recaps, use detail='compact' for polling, and expand items with alphai_article. It stops short of explicitly stating when to prefer a sibling tool (e.g., alphai_news_search for targeted lookups) instead of this feed.

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

alphai_alerts_listList my alert subscriptionsA
Read-onlyIdempotent
Inspect

List the caller's active ticker news-alert subscriptions, including per-subscription filters (category whitelist, minimum relevance score, delivery mode).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
tierYes
limitYes
alertsNo
currentYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful behavioral context beyond annotations by specifying that only the caller's active subscriptions are returned and that per-subscription filters are included, which clarifies the scope and content of the response.

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

Conciseness5/5

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

The description is a single, tight sentence that front-loads the primary action and resource, then adds the relevant detail about included filters. There is no redundancy with the title or schema, and every word contributes meaning.

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 zero-parameter, read-only list tool with an output schema present, the description is complete: it states whose subscriptions are returned, that they are active, and what fields are included. The output schema covers return-value structure, so nothing essential is missing.

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?

The tool has zero parameters and the schema is empty, so the description has no parameter-level responsibility. Per the rubric baseline for 0-param tools, a score of 4 is appropriate; the description does not need to add parameter meaning that does not exist.

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?

The description states a specific verb ('List'), a clear resource ('the caller's active ticker news-alert subscriptions'), and the kind of data included ('filters: category whitelist, minimum relevance score, delivery mode'). It clearly differentiates this from sibling tools like alphai_alerts_subscribe and alphai_alerts_unsubscribe by focusing on read-only listing.

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

Usage Guidelines3/5

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

The intended use is implied strongly by the verb and noun phrase: use this when the agent needs to see the caller's existing alert subscriptions. However, there is no explicit guidance about when not to use it or how it compares to related alert-management tools, so the agent must infer usage from the name and context.

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

alphai_alerts_subscribeSubscribe to ticker alertsA
DestructiveIdempotent
Inspect

WRITE operation (creates/updates a saved subscription in the caller's account). Subscribe the caller to ticker news alerts. Optional category_filter (e.g. ['earnings','insider']) restricts which categories trigger; min_relevance_score raises the threshold. This is a partial update: omitting either field on an existing subscription preserves its current value, and a brand-new subscription defaults min_relevance_score to 7. Note the threshold applies to email and telegram delivery; a Pro webhook receives the full matched stream and filters on its own. Raises tier_not_paid / unknown_ticker / limit_reached. Crypto alerts use the -USD ticker (BTC-USD); subscribing to a collider string like BTC binds the stock/ETF that owns it and the response's note field says so. OAuth connections need the alerts.write scope (raises insufficient_scope otherwise); API keys have it.

NameRequiredDescriptionDefault
tickerYesTicker to subscribe to (active symbol).
category_filterNoCategories that trigger alerts.
min_relevance_scoreNoMin relevance to alert on.

Output Schema

NameRequiredDescription
noteNo
tickerYes
is_activeYes
created_atYes
delivery_modeYes
category_filterNo
min_relevance_scoreYes

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses partial-update preservation semantics, the backend default of 7 for new subscriptions, that the threshold applies only to email/telegram while Pro webhooks filter downstream, the specific error conditions (tier_not_paid, unknown_ticker, limit_reached, insufficient_scope), and required OAuth scope. It also explains the collider-string edge case (BTC binding the stock/ETF) and the note field, which no structured field conveys.

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

Conciseness4/5

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

Front-loads the critical WRITE classification and keeps every subsequent sentence load-bearing (defaults, delivery channel nuance, errors, ticker format). It is dense but no sentence is filler; slightly long for a three-parameter tool.

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?

Given a mutation tool with a fully covered schema and an existing output schema, the description supplies exactly what structured fields cannot: auth scope, error surface, update semantics, and ticker-format caveats. An agent has everything needed to invoke it correctly.

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 3 is the baseline, but the description adds real meaning: examples of category_filter values, what min_relevance_score actually controls, and the fact that omitting a field preserves the existing value while new subscriptions default to 7. That is more than the schema's 'default: null' communicates.

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 and resource ('Subscribe the caller to ticker news alerts') and explicitly frames it as a WRITE operation creating/updating a saved subscription. This clearly separates it from siblings like alphai_alerts_list and alphai_alerts_unsubscribe without needing their schemas.

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

Usage Guidelines4/5

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

Explains the subscription semantics and distinguishes setup (creation defaults) from partial update, giving the agent enough context to know how to call it. It does not explicitly say when *not* to use it or name the alternative tools by name, so it lands just short of 5.

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

alphai_alerts_unsubscribeUnsubscribe from ticker alertsA
DestructiveIdempotent
Inspect

WRITE operation (deactivates a saved subscription in the caller's account). Soft-disable the caller's news-alert subscription for the given ticker. Idempotent — returns {removed: false} if the alert was already inactive. Raises unknown_ticker for an unrecognized symbol. OAuth connections need the alerts.write scope (raises insufficient_scope otherwise); API keys have it.

NameRequiredDescriptionDefault
tickerYesTicker to unsubscribe from.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds real value on top: it clarifies the operation is a soft-disable rather than a hard delete, gives the concrete idempotent return shape {removed: false}, and spells out the required alerts.write scope for OAuth vs API keys. This is meaningful behavioral context that annotations alone do not convey.

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

Conciseness5/5

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

Four short sentences, front-loaded with the operation type and effect, followed by idempotency, errors, and auth. Every sentence carries distinct information with no redundancy.

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 one-parameter mutation with an output schema, this covers everything an agent needs: effect, idempotency, failure modes, and auth requirements. Return values need not be explained since an output schema exists, yet the description still flags the key branch.

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

Parameters3/5

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

Schema coverage is 100% and the single ticker parameter is fully documented with a pattern and maxLength in the schema. The description only restates 'for the given ticker' and adds no format or edge-case detail beyond what the schema provides, so the baseline 3 applies.

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 and resource: soft-disables the caller's news-alert subscription for a given ticker. It is immediately distinguishable from the sibling alphai_alerts_subscribe, and the 'WRITE operation' prefix frames the operation type up front.

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

Usage Guidelines4/5

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

Clearly scoped to the caller's own account and to an existing subscription, with the errors (unknown_ticker, insufficient_scope) telling the agent what preconditions matter. It does not explicitly name the subscribe sibling as the inverse action, so routing guidance is implied rather than stated.

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

alphai_articleFetch article by uidA
Read-onlyIdempotent
Inspect

Load one article by its uid, with full enrichment (per-ticker analysis, context, key entities). Use it to expand an item from any feed requested with detail='compact', a condensed *_recent item from alphai_pair_analysis, or a uid from the user, connector search or alphai_insider_clusters. Feeds using detail='full' already carry the news analysis inline. SEC rows also carry insider on a Form 4 (shares, avg_price_usd, is_10b5_1, filed_at...) and filing on an 8-K. On an SEC earnings filing (source_type sec_form8k or sec_form6k), this tool adds earnings, AlphAI's LLM-written structured read of the filing with every figure checked against the filing text; feed tools never populate it. To go from a ticker straight to those reads, use alphai_earnings instead. The full article body is intentionally not served (copyright). Raises not_found for an unknown uid.

NameRequiredDescriptionDefault
uidYesThe article uid from any feed response.

Output Schema

NameRequiredDescription
uidYes
urlYes
titleYes
filingNo
sourceYes
insiderNo
sourcesNo
summaryYes
tickersNo
analysisNo
categoryYes
earningsNo
story_idNo
created_atYes
source_typeNo
banner_imageNo
search_matchNo
source_domainYes
sources_countNo
ownership_formNo
time_publishedYes
relevance_scoreYes
read_time_minutesNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely non-obvious behavior: SEC rows surface insider Form 4 fields and filing data, SEC earnings filings gain an LLM-written structured read with figures checked against filing text, and the article body is deliberately withheld for copyright. It even documents the not_found error for an unknown uid.

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

Conciseness4/5

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

Well front-loaded: the core action and the when-to-use routing come before the SEC edge cases. It is on the long side, with the SEC/earnings passage carrying the most weight, but nearly every clause adds distinct information rather than restating the schema.

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?

An output schema exists, so return shape need not be spelled out, and the description still covers the notable content variations (insider fields on Form 4, earnings reads on 6-K/8-K), the copyright limitation, and the failure mode. Nothing an agent needs to select or call this tool correctly is missing.

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% and the single uid parameter is already described, so the baseline is 3. The description earns above baseline by telling the agent where valid uids come from (feed responses, pair_analysis condensed items, connector search, insider_clusters), which is meaning the schema does not supply.

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 and resource ("Load one article by its uid") and immediately scopes what 'full enrichment' means (per-ticker analysis, context, key entities). It also carves out boundaries against siblings, notably that feeds with detail='full' already carry the analysis and that alphai_earnings is the ticker-first path to the same reads.

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?

Explicitly enumerates the trigger cases: expanding a compact feed item, a condensed *_recent item from alphai_pair_analysis, a uid from the user, connector search, or alphai_insider_clusters. It also states the when-not condition (feeds using detail='full' already have the analysis) and redirects to alphai_earnings for ticker-first access.

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

alphai_calendarEconomic calendar (US macro releases)A
Read-onlyIdempotent
Inspect

US MACRO only: for who reports when use alphai_earnings_calendar, for one company's next date read next_report_date on alphai_tickers, and for its earnings reads use alphai_earnings. The forward half of the macro loop: the official US economic calendar — scheduled FOMC decisions (with SEP and press-conference markers) and minutes, CPI, PPI, the jobs report, GDP estimates, PCE, retail sales, weekly jobless claims and JOLTS, from the agencies' own schedules. Ask it 'what macro releases are coming this week', then read alphai_macro for what a release meant once it is out. Each occurrence carries a stable uid that survives reschedules, plus phase: 'elapsed' means the scheduled moment passed (NOT that the agency published — check schedule_status; schedule_basis='inferred' marks dates derived from the release cadence rather than printed by the agency). Elapsed SCHEDULED occurrences include coverage: the top feed stories about that release (uid + relevance score) — fetch depth per story via alphai_article; cancelled/postponed rows return coverage=null. days_back counts from today's UTC midnight, so the default 0 still includes today's already-released prints with their coverage. Informational and AI-generated — not investment advice.

NameRequiredDescriptionDefault
days_backNoDays back from today's UTC midnight; default 0 still includes today's releases. Also capped by your archive depth.
days_aheadNoDays forward from now; default 7.
event_keysNoNarrow to specific series; default all.
importanceNoFilter by importance tier.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only cover read-only/idempotent safety, so the description carries the real burden and does: stable uid surviving reschedules, phase='elapsed' explicitly NOT meaning published, schedule_status and schedule_basis='inferred' caveats for cadence-derived dates, coverage attached only to elapsed scheduled occurrences and null for cancelled/postponed, and days_back anchored to UTC midnight. That is behavioral context an agent cannot get from the structured fields.

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

Conciseness4/5

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

Front-loads the most decision-relevant content (US MACRO only, sibling routing) before the mechanics, and every clause is substantive rather than filler. It runs long and dense with parenthetical caveats, which hurts skimmability slightly, but nothing is truly redundant.

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?

An output schema exists, so return values need not be explained, yet the description still discloses the field-level semantics an agent must interpret (phase, schedule_status, schedule_basis, coverage, stable uid). For a read-only calendar tool with full schema coverage and annotations, nothing needed to call or interpret it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and already documents days_back's UTC-midnight anchor, the 0/7 defaults, and the importance/event_keys filters. The description's note that the default 0 'still includes today's already-released prints with their coverage' restates the schema almost verbatim, so it adds only marginal meaning — baseline 3 is appropriate when the schema does the work.

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+resource+scope up front: 'US MACRO only ... the official US economic calendar' with the enumerated release types (FOMC, CPI, PPI, NFP, GDP, PCE, retail sales, claims, JOLTS). It explicitly walls itself off from three siblings (alphai_earnings_calendar, alphai_tickers/next_report_date, alphai_earnings), so an agent can separate it from neighbors without opening any 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?

Gives an explicit routing rule for the confusable siblings ('for who reports when use alphai_earnings_calendar', 'for one company's next date read next_report_date'), and names the when-to-use vs. when-not pairing with alphai_macro: this tool for forward-looking releases, alphai_macro once a release is out and you need its meaning. It even provides a natural-language query pattern to recognize ('what macro releases are coming this week').

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

alphai_earningsEarnings reads for a tickerA
Read-onlyIdempotent
Inspect

Structured reads of a company's earnings reports, newest first, plus its next confirmed report date. Reads are generated from SEC filings: 8-K item 2.02 for US filers and 6-K earnings releases for foreign private issuers. Carries reported metrics with year-over-year and sequential comparisons, segments, guidance, drivers, concerns and management quotes; each key_metrics and segments row also carries numeric, unit and scale next to the printed value (scale is null when the filing does not say), and table_scale names the unit of the filing's tables, which is the unit of any figure the notes and analysis quote bare. Reports can be returned across share classes; each row identifies the filing's share class. Depth is shallow: AlphAI's reads begin with filings from late July 2026 and reports are quarterly, so most tickers carry one or two reads and an empty list is a normal answer, not an error. An LLM writes each read: every figure is checked against the filing text. A key_metrics or segments row with a figure the filing does not print, or a key_metrics row whose value, prior and change do not add up, is dropped, and numbers_verified_from_document is false when another figure could not be matched. A figure can still be misread, so cite the filing for decisions. Informational, not investment advice.

NameRequiredDescriptionDefault
tickerYesTicker symbol, e.g. 'NVDA'.

Output Schema

NameRequiredDescription
tickerYes
reportsNo
unknown_tickerNo
next_report_dateNo

TDQS

A4/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: the upstream source (8-K item 2.02 for US filers, 6-K for FPIs), the shallow historical depth, empty-result semantics, multi-share-class rows, the LLM-authored verification pipeline with row-dropping and the numbers_verified_from_document flag. It also warns that figures can still be misread and declines to be investment advice – unusually complete behavioral disclosure.

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 first sentence is well front-loaded and the caveats earn their place, but the long middle section on key_metrics/segments row structure, numeric/unit/scale fields and table_scale restates return-value detail that an output schema already exists to carry. For a one-parameter read tool the definition is over-long and would benefit from trimming the return-format exposition.

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?

Given the real complexity here – LLM-authored reads, filing-derived data, sparse coverage, multi-share-class output – the description covers sources, limits, error semantics, verification caveats and a disclaimer. Nothing an agent needs in order to call it once and interpret the response correctly is missing.

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% and there is only one parameter, so the baseline would be 3; the description earns above baseline by clarifying that a single ticker can return reports across multiple share classes and that each row identifies the filing's share class. That is meaning beyond the schema's bare "Ticker symbol, e.g. 'NVDA'."

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

Purpose4/5

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

"Structured reads of a company's earnings reports, newest first, plus its next confirmed report date" names a specific verb and resource and even fixes the sort order, so the agent knows exactly what comes back. It does not name the sibling it competes with (alphai_earnings_calendar / alphai_calendar), so the boundary between 'next report date here' and 'calendar elsewhere' must be inferred.

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

Usage Guidelines3/5

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

There is real usage guidance of a defensive kind: an empty list is a normal answer, results are shallow (coverage starts late July 2026, quarterly cadence), and the agent should cite the filing rather than the read. What is missing is tool-selection guidance – no statement of when to prefer this over alphai_earnings_calendar, alphai_ticker_news, or alphai_stories for earnings-related questions.

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

alphai_earnings_calendarEarnings calendarA
Read-onlyIdempotent
Inspect

Who reports when and who just reported: companies with a report date the source marks as confirmed, by day, in New York market days. Use it for 'who reports today, tomorrow or this week', and with days_back for 'who reported this week': past days list the companies whose filing we have read, up to 7 days back. Estimated dates are left out, so later days fill in as companies announce, and a company missing here may still report. Covers large and actively followed names, not every listing. Days are in order, and within a day the companies with the most recent news come first. session is the expected session (before_open, after_close, or null when unknown), never an exact time. status turns to reported once the SEC filing lands. detail='full' adds previous_read: guidance and what_to_watch from our read of the company's previous report, AI-generated, not an analyst estimate, and report_read: the uid, listing, period and verdict of our read of the report the row is about. For the reads themselves use alphai_earnings; for macro releases, alphai_calendar. total counts every match; page with limit and offset. Informational, not investment advice.

NameRequiredDescriptionDefault
limitNoRows per page, default 100.
detailNofull adds previous_read and report_read to each row; default compact.compact
offsetNoRows to skip.
sectorNoOnly this sector, as alphai_tickers spells it.
tickersNoOnly these companies; another share class of a company matches too.
days_backNoDays before today to include, listing companies we read; default 0.
days_aheadNoDays after today to include; 0 is today only, default 7.

Output Schema

NameRequiredDescription
itemsYes
totalYes
to_dateYes
from_dateYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/openWorld safety, yet the description still adds substantial behavior: past days only list companies whose filing has been read (capped at 7), missing rows may still report, ordering is by day then by most recent news, session is an expected session never an exact time, and status flips to reported once the SEC filing lands. It also flags previous_read as AI-generated rather than an analyst estimate, which is the kind of caveat an agent needs before quoting it.

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

Conciseness4/5

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

It is front-loaded with the core definition and then proceeds in a logical order: inclusion rules, use cases, ordering, field semantics, sibling routing, pagination. The single dense paragraph runs long and the closing 'Informational, not investment advice' is boilerplate, but nearly every clause carries distinct information.

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?

With an output schema present the description need not document return shapes, and it correctly focuses on inclusion rules, ordering, field meaning, and pagination via total/limit/offset. For a 7-parameter read tool with rich annotations, nothing an agent needs in order to call it correctly is missing.

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 still earns a bump by explaining what days_back actually returns (companies whose filing we have read) and by spelling out the contents of detail='full' (previous_read: guidance and what_to_watch; report_read: uid, listing, period, verdict). It says less about sector and tickers than the schema already does, so it stops short of a 5.

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?

The opening sentence names the specific resource (companies with a confirmed report date, by day, in New York market days) and the filtering rule that defines it (estimated dates excluded). It explicitly contrasts itself with alphai_earnings (the reads) and alphai_calendar (macro releases), so an agent can separate 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?

It gives concrete when-to-use phrasing ('who reports today, tomorrow or this week') and a second mode tied to a parameter ('with days_back for who reported this week'). It also names the two alternatives and the conditions that route to them, and states a scope exclusion (covers large and actively followed names, not every listing).

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

alphai_insider_clustersInsider cluster buysA
Read-onlyIdempotent
Inspect

Find issuers where several different insiders bought on the open market in one run of purchases (SEC Form 4, purchase dates chained while at most 10 days apart, an episode capped at 30 days). Every purchase is examined before a buyer counts: an IPO or PIPE allocation — by its price shape or by the filing's own footnote saying the shares came from the issuer, an offering or a negotiated block (buyer reason: placement, offering, private) — ESPP / DRIP / director-plan lots, units and note exchanges without a price, and the same transaction reported through two owners are labeled per buyer (role: independent, plan_like, unpriced, duplicate_of) and hidden from the default open_market list; ask pattern=plan_or_offering, holders_only or all to see them. buyers counts independent buyers, buyers_total everyone who bought. days is measured on known_at, the moment the episode's latest filing reached EDGAR, so 'what became known this month' is one call; a Free account reaches 30 days, Basic and Pro 90. Sort recent (default, newest known first), buyers or value; follow next_cursor with the same sort. Each result links every filing (accession number, EDGAR URL) and the news uids to open with alphai_article. Descriptive screen, not point-in-time and not a return forecast; coverage starts at meta.coverage_since (the table begins in August 2025).

NameRequiredDescriptionDefault
daysNoLookback in days over known_at (latest filing); default 30.
sortNorecent = newest known first.recent
limitNoRows per page, default 10; above 20 needs Pro.
cursorNoOpaque next_cursor, unchanged.
symbolNoOne ticker; former names and share-class siblings match too. Empty for the whole market.
min_usdNoDrop episodes whose known total is below this many dollars.
patternNoWhich verdicts to return; open_market by default.open_market
min_buyersNoMinimum independent buyers for open_market rows (everyone who bought for plan rows).

Output Schema

NameRequiredDescription
metaYes
resultsNo
next_cursorNo

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already cover readOnly/non-destructive/idempotent, and the description adds substantial behavioral context: buyer-role labeling (independent/plan_like/unpriced/duplicate_of), which records are hidden by default and how to reveal them, the known_at measurement basis, coverage_since, and pagination via next_cursor. This is rich, non-redundant disclosure.

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?

Purpose is front-loaded, but the body is one dense paragraph cramming exclusion rules, counting semantics, tier limits, sorting, and disclaimer into a stream that is hard to parse. The content largely earns its place, but the structure could be broken up for readability.

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?

Given an output schema exists (so return shape needn't be explained), the description still covers the critical operational facts: coverage start, account-tier reach, pagination, exclusion defaults, and result links to filings/news uids. An agent has everything needed to call it correctly.

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, but the description genuinely adds meaning: buyers counts independent buyers vs buyers_total counting everyone, days measured on known_at, and min_buyers behaving differently for plan rows. It augments the enum/param docs rather than restating them.

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

Purpose4/5

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

The description states a precise verb+resource+scope: issuers where multiple distinct insiders made open-market purchases within a chained episode, with the mechanical definition (<=10 days apart, 30-day cap, SEC Form 4). It clearly signals it is a descriptive screen, not point-in-time or forecast, though it doesn't explicitly name a sibling tool to contrast with.

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

Usage Guidelines4/5

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

It gives clear usage context: 'what became known this month is one call' via the days/known_at semantics, guidance on when to switch to pattern=plan_or_offering/holders_only/all, and tier limits (Free 30, Basic/Pro 90). It stops short of naming alternative tools or explicit when-not-to-use-this conditions beyond the 'not point-in-time' caveat.

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

alphai_insider_newsInsider & ownership newsA
Read-onlyIdempotent
Inspect

SEC Form 4 trades by company officers, directors and 10% owners. Filter ticker, date, score or is_10b5_1; false keeps discretionary trades, true keeps planned trades. Full items carry structured insider details. Prefer ingested mode for new filings: they can arrive days after the transaction. Delisted symbols retain history; delisted/renamed_to and ticker_note explain lifecycle or stock/crypto collisions. unknown_ticker means unrecognized. Use detail='compact' for headlines, sources, times, tickers, scores and story/search metadata without summary, analysis or SEC detail blocks. Expand uids with alphai_article. detail='full' is default; selection, order, cursors and page metadata are identical. In ingested mode, prime may be partial/empty and starts at the feed head. Resume until empty success; short pages can continue. Empty pages still spend quota: back off after one and filter (min_relevance, symbol). Errors are JSON: delta_scan_incomplete means use extra.next_cursor with unchanged filters/sort; delta_candidates_changed means retry the original request.

NameRequiredDescriptionDefault
sortNopublished (default): newest first. ingested: delta polling — only Form 4 events added since your cursor, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later). Prefer this for watching insider activity: a filing arrives days after its transaction date, so it can land below the newest page of a publish-ordered feed. A cursor only works with the sort mode that issued it. With ingested, to_date must not be in the past.
limitNoAlias for page_size.
cursorNoOpaque cursor from a prior next_cursor.
detailNofull (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.full
tickerNoRestrict to one ticker, e.g. 'AAPL'.
to_dateNoOn/before this ISO time (UTC if naive); a bare date covers that whole day. Bounds when the filing reached the feed, not the insider's transaction_date.
from_dateNoOn/after this ISO time (UTC if naive); a bare date means that day's midnight.
is_10b5_1NoRule 10b5-1 filter, on the same field each item's insider block reports. Omit for every event; false = discretionary trades only (a 10b5-1 ladder was scheduled months earlier, so it carries no timing decision); true = plan events only. Event-level: a filing mixing plan and discretionary tranches counts as a plan event.
page_sizeNoItems/page; capped at 20 Free/Basic, 50 Pro.
min_relevanceNoMinimum AI relevance score, 1-10. Default 4 leaves out low-relevance items; 1-3 adds them.

Output Schema

NameRequiredDescription
countNo
itemsNo
delistedNo
renamed_toNo
next_cursorNo
ticker_noteNo
unknown_tickerNo
query_interpretationNo

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, open-world, non-destructive, but the description adds genuinely non-inferable behavior: empty pages still spend quota, ingested primes may be partial and start at the feed head, short pages can continue, and two named JSON error codes (delta_scan_incomplete, delta_candidates_changed) with the exact recovery action for each. It also explains delisted/renamed_to/ticker_note and unknown_ticker semantics.

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

Conciseness4/5

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

Front-loaded with the resource definition, then grouped by filter semantics, detail modes, pagination/quota, lifecycle fields and errors — an agent can scan it. It is dense and a few clauses duplicate the schema's own parameter descriptions, costing it a perfect score.

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?

With an output schema present the description need not explain return shapes, and everything else an agent needs is covered: filter semantics, detail modes, cursor/quota discipline, lifecycle and collision fields, and structured error recovery. For a 10-parameter polling endpoint this is complete.

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, and the description largely restates the is_10b5_1 and detail semantics already documented in the schema. It does add value the schema does not: that detail='full' and 'compact' return identical selection, order, cursors and page metadata, and that ingested mode starts at the feed head with a possibly partial prime.

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

Purpose4/5

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

Opens with a specific verb+resource: 'SEC Form 4 trades by company officers, directors and 10% owners,' which an agent can map to insider-filing data without opening the schema. It distinguishes itself from the article-expansion sibling ('Expand uids with alphai_article') but never contrasts with alphai_insider_clusters or alphai_ticker_news, leaving one sibling ambiguity unresolved.

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

Usage Guidelines4/5

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

Gives clear conditional guidance: prefer ingested mode for new filings because they arrive days after the transaction, use detail='compact' for polling, back off after one empty page, and resume until an empty success. It stops short of saying when to choose this tool over the insider_clusters or ticker_news siblings, so sibling-level routing is left to inference.

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

alphai_macroMacro tape (market-wide)A
Read-onlyIdempotent
Inspect

Market-wide central-bank, inflation/jobs, commodity and geopolitical news, ranked novelty-first. Macro stories often have no tickers. Filter categories or min_relevance; dedupe=false keeps reprints, otherwise items carry story_id and distinct-source counts. result contains stories; releases contains scheduled US releases in the same window and the next 24h, with coverage. For 'did the jobs report come out', inspect releases first. Elapsed with empty coverage means stories have not arrived yet: poll later, and check schedule_status for postponements. Use alphai_calendar for future dates beyond 24h. AI-generated context, not investment advice. Use detail='compact' for headlines, sources, times, tickers, scores and story/search metadata without summary, analysis or SEC detail blocks. Expand uids with alphai_article. detail='full' is default; selection, order, cursors and page metadata are identical.

NameRequiredDescriptionDefault
hoursNoLook-back window in hours; default 24.
limitNoItems; capped at 20 Free/Basic, 50 Pro.
dedupeNoCollapse coverage of one event (reprints and independent write-ups) by story (default true).
detailNofull (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.full
categoriesNoSubset of the macro categories; default all three.
min_relevanceNoMin AI relevance 1-10; default 4. 7+ keeps release-day events.

Output Schema

NameRequiredDescription
resultNo
releasesNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive, open-world, so the safety bar is met; the description then adds genuinely new behavior: dedupe=false preserves reprints vs deduped items carrying story_id and distinct-source counts, and the elapsed/empty-coverage condition means stories have not arrived yet. It also explains schedule_status for postponements and that selection, order and cursors are identical across detail modes.

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

Conciseness4/5

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

Dense but front-loaded: purpose first, then filtering, then the releases/stories split, then polling guidance, then detail modes. A couple of clauses duplicate the schema almost verbatim (the compact/full explanation), and the sentence count is high, but nothing is pure filler.

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?

The tool has an output schema and rich annotations, so the description needn't explain return values; instead it spends its budget on the non-obvious parts: that result holds stories while releases holds scheduled US releases in-window plus next 24h, and what an empty coverage with elapsed time means. Nothing an agent needs to call it correctly is missing.

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 baseline is 3. The description still adds meaning: dedupe=false keeps reprints while default collapses coverage by story, and detail='compact' is spelled out as headlines/sources/times/tickers/scores and metadata without summary or analysis. That is a modest but real lift above the schema text, which largely repeats the same content.

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?

Opens with a specific verb-and-resource framing: market-wide central-bank, inflation/jobs, commodity and geopolitical news, ranked novelty-first. It distinguishes itself from ticker-scoped siblings by noting macro stories often have no tickers, and explicitly routes article expansion to alphai_article.

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?

Gives concrete routing rules: use releases first for 'did the jobs report come out', use alphai_calendar for dates beyond 24h, poll later when coverage is empty. It also names the filter knobs (categories, min_relevance) and the dedupe trade-off, so the agent knows when to reach for each.

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

alphai_pair_analysisTwo-ticker read-acrossA
Read-onlyIdempotent
Inspect

Compare two tickers (e.g. NVDA and AMD). Returns news naming BOTH companies — where the cross-ticker read-across lives (a peer's print resetting the other's setup, a shared supplier/customer) — plus each ticker's own recent news for context. The two recent lists are condensed (headline + scalar signals; the full analysis is on BOTH — fetch alphai_article(uid) for a recent item's full write-up). Pair analysis covers active tickers only: any symbol that isn't a recognized active ticker is listed in unknown_tickers and contributes no rows (delisted-symbol history lives in alphai_ticker_news). Informational and AI-generated — not investment advice. Use detail='compact' for headlines, sources, times, tickers, scores and story/search metadata without summary, analysis or SEC detail blocks. Expand uids with alphai_article. detail='full' is default; selection, order, cursors and page metadata are identical.

NameRequiredDescriptionDefault
limitNoMax rows per list (both / each ticker).
detailNofull (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.full
ticker_aYesFirst ticker, e.g. 'NVDA'.
ticker_bYesSecond ticker, e.g. 'AMD'.
min_relevanceNoMinimum AI relevance score, 1-10. Default 4 leaves out low-relevance items; 1-3 adds them.

Output Schema

NameRequiredDescription
bothNo
a_recentNo
b_recentNo
ticker_aYes
ticker_bYes
unknown_tickersNo

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial behavior beyond annotations: active-ticker-only coverage, unknown_tickers reporting, condensed recent lists, identical selection/order/cursors regardless of detail mode, and AI-generated non-advice status. Annotations already confirm read-only/idempotent behavior, and the description does not contradict them.

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

Conciseness4/5

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

The purpose is front-loaded and most sentences carry useful information about return shape, active ticker constraints, and expansion. It is dense and long, but the length is mostly justified by the tool's multi-part behavior.

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?

With an output schema, full parameter descriptions, and annotations already covering safety, the description supplies the remaining operational context an agent needs: what is returned, active ticker limits, unknown_tickers, compact mode, and expansion path.

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, but the description adds useful semantics for detail and uid expansion through alphai_article. It does not add much for limit or min_relevance beyond the schema, but the extra mode behavior is meaningful.

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 and resource: compare two tickers and return cross-company news plus each ticker's own news. It clearly distinguishes the tool from alphai_article expansion and delisted-symbol history in alphai_ticker_news.

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

Usage Guidelines4/5

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

Gives clear usage guidance for detail='compact' versus default full mode, and points to alphai_article for expanding uids. It also routes delisted-symbol history to alphai_ticker_news, though it does not explicitly compare against alphai_news_search or other sibling search tools.

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

alphai_radarNews RadarA
Read-onlyIdempotent
Inspect

Rank news activity across the market or your saved AlphAI watchlist. Returns total story counts, model counts versus market-adjusted expectations, news tone and linked supporting headlines. Default: 20 tickers, 24h window, highest activity first. Use sentiment=negative or sort=sentiment_change with order=asc to find deteriorating news tone. Exact tickers intersect the selected scope; no alias expansion. Plans change added delay: Free 60 minutes, Basic 15 minutes, Pro none. Read as_of and freshness before describing recency; historical_preview means a fixed historical dataset, never a live reading. Only tickers with news in the chosen window appear. Missing metrics are null with a reason, not neutral. Scores describe observed news, not price forecasts or confirmed alerts. Follow next_cursor with identical filters and limit to keep the same snapshot; restart without cursor after snapshot_expired. Open a news evidence uid with alphai_article for the full enriched article. event_context adds separate issuer-CIK observations: 7-day 8-K/selected earnings 6-K filings and 30-day open-market insider clusters by latest SEC filing time, with sec_url links. For filings with has_article=true, open news_uid with alphai_article; news_title and news_published build its AlphAI URL. Article availability is frozen at the context cutoff; older snapshots default to false with null title/publication metadata. Read top-level event_context status/as_of and each row's event_context status before using counts. Null means unavailable, not zero; available does not certify complete SEC coverage. Context follows the same snapshot delay and cursors. It does not change news scores or row eligibility.

NameRequiredDescriptionDefault
sortNoRanking metric; stories means total stories; sentiment_change is current minus prior tone.score
limitNoRows per page, default 20; not a ticker entitlement.
min_zNoOptional minimum descriptive activity score.
orderNoSort direction; null metrics always last.desc
scopeNoMarket discovery or the authenticated caller's saved watchlist.market
cursorNoOpaque next_cursor or previous_cursor, unchanged.
marketNoMarket filter within the selected scope.all
windowNoNews window ending at as_of.24h
tickersNoOptional comma-separated exact symbols, e.g. AAPL,MSFT,BTC-USD; no tier ticker cap.
sentimentNoPositive >0.15, negative <−0.15, mixed within those bounds. Null matches only all.all

Output Schema

NameRequiredDescription
as_ofYes
totalYes
accessYes
offsetYes
windowYes
resultsYes
freshnessYes
limitationsYes
next_cursorYes
snapshot_idYes
event_contextNo
point_in_timeYes
research_onlyYes
previous_cursorYes
watchlist_coverageYes
methodology_versionYes
preview_reference_atYes

TDQS

A4.2/5.0
Behavior5/5

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

Goes well past the annotations (readOnly/openWorld/idempotent) by disclosing plan-based staleness (Free 60 min, Basic 15, Pro none), snapshot semantics with cursor pinning and snapshot_expired, the meaning of historical_preview, the rule that only tickers with news in the window appear, that missing metrics are null-with-reason rather than neutral, and that scores are observed news, not forecasts or alerts. These are exactly the traits an agent cannot recover from the schema.

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

Conciseness4/5

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

Purpose, return contents and defaults are front-loaded, and nearly every sentence carries operational weight (delays, null semantics, cursor rules). It is dense and somewhat run-on, with the event_context block reading as an appendix whose trigger is unclear, which costs it a point.

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

Completeness4/5

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

For a 10-parameter, zero-required discovery tool with an output schema, the description covers freshness, pagination, null handling and filter composition thoroughly. The only real hole is the event_context discussion that is not anchored to any parameter, so the agent cannot tell whether it is always returned or opt-in.

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 still adds value by pairing parameters operationally ('sort=sentiment_change with order=asc', tickers intersect the selected scope with no alias expansion) rather than restating enums. One weakness: it discusses an event_context feature that does not correspond to any of the ten declared parameters, leaving the agent unsure how to enable or suppress it.

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

Purpose4/5

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

Opens with a specific verb and resource ('Rank news activity across the market or your saved AlphAI watchlist') and enumerates what comes back (story counts, model vs. market-adjusted expectations, tone, linked headlines). The ranking/discovery framing is distinguishable from search-oriented siblings like alphai_news_search, but it never explicitly contrasts itself with alphai_ticker_news or alphai_stories, so an agent must infer the boundary.

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

Usage Guidelines4/5

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

Gives concrete operating recipes: 'Use sentiment=negative or sort=sentiment_change with order=asc to find deteriorating news tone', the default 20-ticker/24h/highest-activity posture, exact-ticker semantics with no alias expansion, and the pagination rule (same filters and limit with next_cursor; restart after snapshot_expired). What is missing is explicit when-not-to-use guidance and routing to sibling tools beyond the one handoff to alphai_article.

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

alphai_storiesStories (top or latest)A
Read-onlyIdempotent
Inspect

Stories: market events that two or more publishers reported, each summarised by AlphAI from its articles. list=top (default) ranks the last 48 hours — importance (the feed's 1-10 scale, 7 and above) plus a coverage bonus, minus one point per 12 hours since the facts last changed, one slot per ticker — use it for 'what matters today'. list=latest pages every story newest-first by its latest article; follow next_cursor. Each card carries story_id, the summary's title and lead, importance, publishers, materials (articles) and summary_state (published / stale = new articles since the summary / preparing = no summary yet, texts are the lead article's). Call alphai_story with a story_id for the full summary — key facts with their sources, why it matters, the per-ticker read, open questions — and the articles behind it. Compared with alphai_trending, which ranks single articles, this ranks events and only those with independent coverage; most feed items are carried by one outlet and never become a story. Summaries are AI-generated financial information for research, not investment advice.

NameRequiredDescriptionDefault
listNotop = ranked last 48 hours (default); latest = newest-first, paginated.top
limitNoStories per page, 1-50; default 10.
cursorNoOpaque next_cursor from a latest page, unchanged.

Output Schema

NameRequiredDescription
listYes
as_ofNo
resultsYes
next_cursorNo
research_onlyNo
ranking_versionNo

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnly/openWorld/idempotent/non-destructive annotations, the description explains the ranking formula, the 48-hour window, pagination behavior, summary_state meanings, and that texts are the lead article's when no summary exists. It also discloses that summaries are AI-generated financial information for research rather than investment advice.

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

Conciseness4/5

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

The description is front-loaded with the core definition and then moves through modes, card fields, and sibling routing. It is dense but mostly earns its length given the tool's complexity; the long parenthetical ranking formula makes it slightly harder to scan than ideal.

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?

The description covers the two listing modes, ranking logic, pagination, returned card fields, summary states, and the follow-up path to alphai_story. With an output schema and annotations present, this is complete enough for an agent to call the tool correctly.

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 enum and defaults are already documented. The description still adds useful semantic detail for list=top versus list=latest and explains that cursor is the next_cursor from a latest page, though it does not add much beyond the schema for limit.

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?

The description states a specific verb and resource: it lists market-event stories that have independent publisher coverage. It distinguishes itself from alphai_trending, which ranks single articles, and from alphai_story, which retrieves a full summary by story_id. An agent can identify both what the tool returns and how it differs from its closest siblings.

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?

It explicitly says to use list=top for 'what matters today' and list=latest for newest-first pagination, including following next_cursor. It names alphai_story as the follow-up for full summaries and explains that alphai_trending ranks articles rather than independently covered events.

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

alphai_storyStory summary and sourcesA
Read-onlyIdempotent
Inspect

One story by story_id — the value every news item carries, or an id from alphai_stories. Returns the summary AlphAI wrote from the articles (title, lead, why_it_matters, up to six key_facts each with the publisher and the source_uid of the article it was read from, ticker_takes with a direction per ticker, uncertainties the sources leave open), the story's importance and publisher count, and the first page of its articles (materials: uid, publisher, time, URL, relevance) — open any of them with alphai_article. status tells you what the id is: found (a story), merged (folded into another story; call again with redirect_to), not_a_story (one publisher carried this event, so there is no summary; article names the row for alphai_article — the normal answer for most feed items). summary_state published / stale (new_materials articles joined since the summary; AlphAI rewrites it on its own schedule, this call changes nothing) / preparing (no summary yet; texts are the lead article's). Every figure in the summary appears in a source article; it is AI-generated financial information for research, not investment advice. Article bodies are never returned.

NameRequiredDescriptionDefault
story_idYesstory_id of a news item or story.
materials_limitNoArticles to include, oldest first; default 20, 0 for none.

Output Schema

NameRequiredDescription
storyNo
statusYes
articleNo
materialsNo
redirect_toNo
research_onlyNo
materials_next_cursorNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely new behavioral context: summary_state semantics including that 'stale' means the call changes nothing, that 'preparing' texts come from the lead article, that every figure traces to a source article, and that 'Article bodies are never returned'. That last constraint is the kind of boundary an agent would otherwise waste a call discovering.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause and nothing is padding, but the body is a single dense run-on with nested parentheticals and slashes ('summary_state published / stale (...) / preparing (...)') that force re-reading. The content earns its place; the structure could be broken into lines per status for faster scanning.

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 read-only lookup with a 2-param schema and an output schema, this is more than complete: it covers id provenance, all three status branches, all three summary_states, the recursive follow-up path, and the AI-generated-content disclaimer. Nothing an agent needs to invoke it correctly or interpret a non-obvious result is missing.

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, but the description earns an extra point by explaining the provenance of story_id (any news item's value, or an id from alphai_stories) and by characterizing the materials return as 'the first page' of articles, which implies the default-limited window that materials_limit controls. It never names materials_limit or its 0-for-none option, leaving that entirely to the schema.

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?

Opens with a specific verb+resource pair ('One story by story_id') and immediately scopes what it returns: an AlphAI-written summary plus the first page of source articles. It distinguishes itself from siblings by pointing to alphai_stories for ids and alphai_article for full article bodies, so an agent can pick it without opening any 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?

It tells the agent exactly where story_id comes from ('the value every news item carries, or an id from alphai_stories'), what to do on each status ('merged ... call again with redirect_to'; 'not_a_story ... article names the row for alphai_article'), and names the follow-up sibling for opening materials. It even flags that not_a_story is 'the normal answer for most feed items', preventing the agent from treating it as an error.

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

alphai_ticker_newsTicker news feedA
Read-onlyIdempotent
Inspect

News for one ticker, including SEC Form 4 trades by default. Use include_insider=false to omit those trades. Published mode serves older history; ingested mode polls new arrivals. collapse_stories=true selects story roots, not later member updates. Delisted symbols retain history with delisted/renamed_to metadata; unknown_ticker means unrecognized. Rename aliases and issuer share classes are included. Coins use -USD; ticker_note flags stock/ETF collisions. Use detail='compact' for headlines, sources, times, tickers, scores and story/search metadata without summary, analysis or SEC detail blocks. Expand uids with alphai_article. detail='full' is default; selection, order, cursors and page metadata are identical. In ingested mode, prime may be partial/empty and starts at the feed head. Resume until empty success; short pages can continue. Empty pages still spend quota: back off after one and filter (min_relevance, symbol). Errors are JSON: delta_scan_incomplete means use extra.next_cursor with unchanged filters/sort; delta_candidates_changed means retry the original request.

NameRequiredDescriptionDefault
sortNopublished (default): newest first. ingested: delta polling — only rows added since your cursor, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later). A cursor only works with the sort mode that issued it.
limitNoAlias for page_size.
cursorNoOpaque cursor from a prior next_cursor.
detailNofull (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.full
tickerYesTicker symbol, e.g. 'AAPL'.
page_sizeNoItems/page; capped at 20 Free/Basic, 50 Pro.
min_relevanceNoMinimum AI relevance score, 1-10. Default 4 leaves out low-relevance items; 1-3 adds them.
include_insiderNoInclude SEC Form 4 insider news; default true.
collapse_storiesNoCollapse coverage of the same event — syndicated reprints and independently written articles — to one representative per story and populate story_id/sources_count/sources (default false).

Output Schema

NameRequiredDescription
countNo
itemsNo
delistedNo
renamed_toNo
next_cursorNo
ticker_noteNo
unknown_tickerNo
query_interpretationNo

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the read-only/idempotent annotations, it discloses quota consumption on empty pages, cursor-mode coupling, partial/empty ingested primes, delisted and renamed ticker handling, coin symbol format, and concrete JSON error recovery semantics. This is exactly the behavioral context an agent needs before polling a feed.

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

Conciseness4/5

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

It is dense and front-loads the core identity and mode selection before pagination and error details. Almost every sentence carries useful information, though the single paragraph would be easier to scan with light segmentation by topic.

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?

Given nine parameters, two sort modes, cursor behavior, output expansion via alphai_article, quota constraints, and an output schema, the description covers the operational model completely. An agent can select the correct mode, filter, and recover from the named errors without further documentation.

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, but the description adds operational meaning: ingested vs. published cursor incompatibility, compact contents, story-root selection, and insider inclusion defaults. It mostly restates schema semantics, but the acquisition-mode and error-recovery nuances go beyond the field descriptions.

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

Purpose4/5

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

The opening sentence states a specific verb and resource: news for one ticker, with SEC Form 4 trades by default. It distinguishes scope from broader news search, but never names the sibling tools (e.g., alphai_news_search or alphai_insider_news) an agent might otherwise choose.

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

Usage Guidelines4/5

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

It gives operational guidance for when to use published vs. ingested mode, when to set include_insider=false, when collapse_stories=true is appropriate, and when to prefer detail='compact'. It lacks explicit routing against alternative tools such as alphai_news_search, which is the main remaining ambiguity.

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

alphai_tickersList supported tickersA
Read-onlyIdempotent
Inspect

List supported tickers (US stocks/ETFs, crypto, and foreign listings). Optionally filter by query (prefix on ticker, substring on name, or the company's brand name where that differs from its registered one — q='spacex' finds SPCX, registered as SPACE EXPLORATION TECHNOLOGIES CORP) or by sector. currency is the trading currency (USD for US listings and crypto pairs, the local currency for foreign ones); country is the ISO alpha-2 country of domicile and is null for crypto, which has no jurisdiction of incorporation. Also answers 'when does X next report': next_report_date is the date of the next earnings report the source marks as confirmed, in America/New_York; a company can still move it. It is NEVER an estimate — null means AlphAI holds no confirmed date, which is not the same as the company not reporting. A confirmed date typically surfaces about five weeks ahead, so a null this far out is normal. When the report lands, alphai_earnings(ticker) returns AlphAI's read of it.

NameRequiredDescriptionDefault
qNoTicker-prefix matches first, then company-name substring matches.
limitNoMax rows to return.
offsetNoPagination offset.
sectorNoFilter by sector (case-insensitive).

Output Schema

NameRequiredDescription
itemsNo
totalYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover readOnly/idempotent/non-destructive, and the description adds genuinely new behavioral context: currency conventions per listing type, country being null for crypto because there is no jurisdiction of incorporation, and a careful explanation of next_report_date (confirmed-only, never an estimate, null ≠ no report, ~5 weeks lead time, company may move it). That is exactly the kind of caveat an agent needs to avoid misreporting.

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

Conciseness5/5

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

Purpose and coverage are front-loaded, then filtering semantics, then the next_report_date caveat. Every clause carries information an agent would otherwise have to guess; the SPCX example is the only slightly indulgent flourish, and it is justified by illustrating non-obvious alias matching.

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 four-param, read-only listing tool with a full output schema, this covers everything needed: what universe it spans, how q and sector behave, and how to interpret the fields most likely to be misread (currency, country, next_report_date). Nothing material is left for the agent to infer.

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 earns above that by explaining that q also matches a company's brand name when it differs from the registered name, with a concrete SPCX/'spacex' example that the schema does not convey. The sector parameter gets no added meaning beyond the schema's case-insensitive note.

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 and resource ('List supported tickers') and immediately scopes coverage to 'US stocks/ETFs, crypto, and foreign listings'. It also names a downstream sibling ('alphai_earnings(ticker)'), so an agent knows this is the universe/discovery tool rather than a news or analysis tool.

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

Usage Guidelines4/5

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

Gives concrete usage contexts: resolving a company or brand name to a ticker via q, filtering by sector, and answering 'when does X next report'. However, it never names an alternative tool (e.g. search, fetch) or states when NOT to use it, so routing guidance is implied rather than explicit.

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

alphai_watchlist_briefMy watchlist briefA
Read-onlyIdempotent
Inspect

Summarize the caller's saved AlphAI watchlist in one read. Returns recent news grouped by story, a separate SEC filings section and the next confirmed earnings dates. Manage tickers at https://alphai.io/account/watchlist. Each story names the watched tickers it affects, carries a short summary and links to the article and its original source. Windows use article publication timestamps, not ingestion time; this is a ranked snapshot, not a changes cursor. Events and filings each contain up to limit items, with explicit truncation flags when more exist. Each section groups the newest 500 matching articles, then ranks by relevance, novelty and recency. Narrow hours or open the ticker feed when a section is truncated. Unknown tickers are listed separately. An empty tickers list means the caller has not saved a watchlist. A missing earnings date means no confirmed date is held, not that the company will not report. Available on every tier.

NameRequiredDescriptionDefault
hoursNoPublication look-back in hours; default 24.
limitNoMaximum stories per section (news and filings).

Output Schema

NameRequiredDescription
hoursYes
eventsYes
filingsYes
tickersYes
window_endYes
generated_atYes
window_startYes
unknown_tickersYes
events_truncatedNo
filings_truncatedNo
upcoming_earningsYes

TDQS

A4.6/5.0
Behavior5/5

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

The description adds substantial behavior beyond the annotations: returns are grouped by story with affected watched tickers, summaries, and links; windows use publication timestamps rather than ingestion time; this is a ranked snapshot, not a changes cursor; sections group the newest 500 matching articles before ranking; truncation flags are explicit; unknown tickers are listed separately; empty watchlists and missing earnings dates have defined meanings. These details let an agent interpret results correctly, which is exactly what a read-only, open-world, idempotent tool needs.

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

Conciseness4/5

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

The description is front-loaded with the core purpose and return shape, and every sentence adds operational value. It is fairly long, but the length is justified by the number of caveats and edge cases for a rich multi-section brief. Slightly tighter grouping could improve scanability, but there is little wasted text.

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?

Given the tool's complexity, the description is complete: it explains sections, ranking behavior, truncation, timestamps, watchlist-edge cases, earnings-date semantics, and tier availability. An output schema exists, so return values need not be exhaustively documented, but the description still provides enough framing to interpret the result correctly.

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 schema already defines hours and limit. The description still adds useful meaning by clarifying that time windows use article publication timestamps rather than ingestion time, and that limit applies per section with explicit truncation flags when more items exist. It does not add value on every parameter detail beyond the schema, but it does more than restate the schema.

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?

The first sentence states a specific verb, resource, and scope: summarize the caller's saved AlphAI watchlist in one read. It then specifies the returned sections (news by story, SEC filings, next confirmed earnings dates), which distinguishes it from general news or ticker-feed siblings. The reference to opening 'the ticker feed' when truncated further differentiates it from alphai_ticker_news.

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

Usage Guidelines4/5

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

Usage is clear from context: this is the brief for the caller's saved watchlist, and the description explicitly says to narrow hours or open the ticker feed when a section is truncated. It also points to the watchlist management URL. It does not explicitly state when not to use it versus general siblings like alphai_stories, but the watchlist scoping is strong.

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

fetchFetch article (ChatGPT connector)A
Read-onlyIdempotent
Inspect

ChatGPT connector contract: fetch one article by the id returned from search. Returns the enriched digest (summary, per-ticker analysis, category, relevance) — not the full article body — plus the canonical alphai.io URL for citation. When the article has a published SEC earnings read, text also includes its reported metrics with year-over-year and sequential comparisons, segments, guidance, concerns and missing items. Raises not_found for an unknown id.

NameRequiredDescriptionDefault
idYesArticle id from a search result.

Output Schema

NameRequiredDescription
idYes
urlYes
textYes
titleYes
metadataNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent and non-destructive, but the description goes further: it discloses that the payload is an enriched digest rather than the article body, that a canonical alphai.io URL is included for citation, what the SEC earnings read adds, and that an unknown id raises not_found. That is exactly the behavioral context annotations cannot convey.

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

Conciseness5/5

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

Three sentences, front-loaded with the contract, then the return shape, then the error case. Each sentence carries distinct information with no repetition of the title or annotations.

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?

Despite an output schema existing, the description still characterizes the response shape and gives the failure mode, and the single required parameter is fully covered. Nothing an agent needs in order to call this correctly is missing.

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% and there is only one parameter, so the baseline is already satisfied. The description still adds value by tying the id to a prior search result and by defining the error outcome for an invalid id, which the schema does not state.

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?

The description uses a specific verb and resource ('fetch one article by the id') and pins the id's provenance to a search result, which is what separates it from the search sibling. An agent can tell immediately that this is a single-item retrieval keyed on a token it already holds.

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

Usage Guidelines4/5

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

The phrase 'by the id returned from search' establishes the intended workflow (search first, then fetch) and implicitly excludes bulk or query-based use. It never explicitly names an alternative such as alphai_article or says when not to use it, so it falls short of full routing guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedalphai_earnings_calendar3 fields changed
      • addedInput schema / properties / days_back
        Added value: +{
        +  "default": 0,
        +  "description": "Days before today to include, listing companies we read; default 0.",
        +  "maximum": 7,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / detail / description
        Previous value: -"full adds previous_read to each row; default compact."New value: +"full adds previous_read and report_read to each row; default compact."
      • addedOutput schema / properties / items / items / properties / report_read
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "fiscal_period": {
        +          "type": "string"
        +        },
        +        "published_at": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "ticker": {
        +          "type": "string"
        +        },
        +        "uid": {
        +          "type": "string"
        +        },
        +        "verdict": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        }
        +      },
        +      "required": [
        +        "uid",
        +        "ticker",
        +        "fiscal_period",
        +        "published_at"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
  2. 1 tool update
    • Addedalphai_earnings_calendar
  3. 3 tool updates
    • Changedalphai_insider_news1 field changed
      • 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``: ``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"
        -  }
        -]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 current engine does\nnot) — ``search_match.terms_matched`` on each item is the count to trust.\n``matched`` is the engine's capped estimate of matching rows, counted\nbefore the visibility strip, 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"
        +  }
        +]
    • Changedalphai_news_search1 field changed
      • 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``: ``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"
        -  }
        -]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 current engine does\nnot) — ``search_match.terms_matched`` on each item is the count to trust.\n``matched`` is the engine's capped estimate of matching rows, counted\nbefore the visibility strip, 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"
        +  }
        +]
    • Changedalphai_ticker_news1 field changed
      • 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``: ``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"
        -  }
        -]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 current engine does\nnot) — ``search_match.terms_matched`` on each item is the count to trust.\n``matched`` is the engine's capped estimate of matching rows, counted\nbefore the visibility strip, 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"
        +  }
        +]
  4. 5 tool updates
    • Changedalphai_actionable_now1 field changed
      • changedInput schema / properties / dedupe / description
        Previous value: -"Collapse syndicated reprints by story (default true)."New value: +"Collapse coverage of one event (reprints and independent write-ups) by story (default true)."
    • Changedalphai_macro1 field changed
      • changedInput schema / properties / dedupe / description
        Previous value: -"Collapse syndicated reprints by story (default true)."New value: +"Collapse coverage of one event (reprints and independent write-ups) by story (default true)."
    • Changedalphai_news_search1 field changed
      • changedInput schema / properties / collapse_stories / description
        Previous value: -"Collapse syndicated reprints to one representative per story and populate story_id/sources_count/sources (default false)."New value: +"Collapse coverage of the same event — syndicated reprints and independently written articles — to one representative per story and populate story_id/sources_count/sources (default false)."
    • Changedalphai_ticker_news1 field changed
      • changedInput schema / properties / collapse_stories / description
        Previous value: -"Collapse syndicated reprints to one representative per story and populate story_id/sources_count/sources (default false)."New value: +"Collapse coverage of the same event — syndicated reprints and independently written articles — to one representative per story and populate story_id/sources_count/sources (default false)."
    • Changedalphai_trending1 field changed
      • changedInput schema / properties / dedupe / description
        Previous value: -"Collapse syndicated reprints by story (default true)."New value: +"Collapse coverage of one event (reprints and independent write-ups) by story (default true)."
  5. 4 tool updates
    • Changedalphai_insider_news1 field changed
      • changedInput schema / properties / min_relevance / description
        Previous value: -"Minimum AI relevance score, 1-10."New value: +"Minimum AI relevance score, 1-10. Default 4 leaves out low-relevance items; 1-3 adds them."
    • Changedalphai_news_search1 field changed
      • changedInput schema / properties / min_relevance / description
        Previous value: -"Minimum AI relevance score, 1-10."New value: +"Minimum AI relevance score, 1-10. Default 4 leaves out low-relevance items; 1-3 adds them."
    • Changedalphai_pair_analysis1 field changed
      • changedInput schema / properties / min_relevance / description
        Previous value: -"Minimum AI relevance score, 1-10."New value: +"Minimum AI relevance score, 1-10. Default 4 leaves out low-relevance items; 1-3 adds them."
    • Changedalphai_ticker_news1 field changed
      • changedInput schema / properties / min_relevance / description
        Previous value: -"Minimum AI relevance score, 1-10."New value: +"Minimum AI relevance score, 1-10. Default 4 leaves out low-relevance items; 1-3 adds them."
  6. 1 tool update
    • Changedalphai_story1 field changed
      • changedOutput schema / properties / story / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "based_on": {
        -        "type": "integer"
        -      },
        -      "category": {
        -        "type": "string"
        -      },
        -      "first_published_at": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "importance": {
        -        "type": "integer"
        -      },
        -      "indexable": {
        -        "type": "boolean"
        -      },
        -      "key_facts": {
        -        "items": {
        -          "properties": {
        -            "publisher": {
        -              "type": "string"
        -            },
        -            "source_uid": {
        -              "type": "string"
        -            },
        -            "text": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "text",
        -            "source_uid",
        -            "publisher"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "last_material_at": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "materials": {
        -        "type": "integer"
        -      },
        -      "materials_at_build": {
        -        "type": "integer"
        -      },
        -      "model": {
        -        "type": "string"
        -      },
        -      "new_materials": {
        -        "type": "integer"
        -      },
        -      "publishers": {
        -        "type": "integer"
        -      },
        -      "revision_generated_at": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "story_id": {
        -        "type": "string"
        -      },
        -      "summary": {
        -        "type": "string"
        -      },
        -      "summary_state": {
        -        "enum": [
        -          "published",
        -          "preparing",
        -          "stale"
        -        ],
        -        "type": "string"
        -      },
        -      "ticker_takes": {
        -        "items": {
        -          "properties": {
        -            "impact": {
        -              "enum": [
        -                "positive",
        -                "negative",
        -                "neutral"
        -              ],
        -              "type": "string"
        -            },
        -            "note": {
        -              "type": "string"
        -            },
        -            "ticker": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "ticker",
        -            "impact",
        -            "note"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "tickers": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "title": {
        -        "type": "string"
        -      },
        -      "uncertainties": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "updated_at": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "why_it_matters": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "story_id",
        -      "title",
        -      "summary",
        -      "importance",
        -      "category",
        -      "tickers",
        -      "publishers",
        -      "materials",
        -      "first_published_at",
        -      "last_material_at",
        -      "updated_at",
        -      "summary_state",
        -      "why_it_matters",
        -      "key_facts",
        -      "ticker_takes",
        -      "uncertainties",
        -      "based_on",
        -      "materials_at_build",
        -      "new_materials",
        -      "revision_generated_at",
        -      "model",
        -      "indexable"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "based_on": {
        +        "type": "integer"
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "first_published_at": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "importance": {
        +        "type": "integer"
        +      },
        +      "indexable": {
        +        "type": "boolean"
        +      },
        +      "key_facts": {
        +        "items": {
        +          "properties": {
        +            "publisher": {
        +              "type": "string"
        +            },
        +            "source_uid": {
        +              "type": "string"
        +            },
        +            "text": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "text",
        +            "source_uid",
        +            "publisher"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "last_material_at": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "materials": {
        +        "type": "integer"
        +      },
        +      "materials_at_build": {
        +        "type": "integer"
        +      },
        +      "new_materials": {
        +        "type": "integer"
        +      },
        +      "publishers": {
        +        "type": "integer"
        +      },
        +      "revision_generated_at": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "story_id": {
        +        "type": "string"
        +      },
        +      "summary": {
        +        "type": "string"
        +      },
        +      "summary_state": {
        +        "enum": [
        +          "published",
        +          "preparing",
        +          "stale"
        +        ],
        +        "type": "string"
        +      },
        +      "ticker_takes": {
        +        "items": {
        +          "properties": {
        +            "impact": {
        +              "enum": [
        +                "positive",
        +                "negative",
        +                "neutral"
        +              ],
        +              "type": "string"
        +            },
        +            "note": {
        +              "type": "string"
        +            },
        +            "ticker": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "ticker",
        +            "impact",
        +            "note"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uncertainties": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "updated_at": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "why_it_matters": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "story_id",
        +      "title",
        +      "summary",
        +      "importance",
        +      "category",
        +      "tickers",
        +      "publishers",
        +      "materials",
        +      "first_published_at",
        +      "last_material_at",
        +      "updated_at",
        +      "summary_state",
        +      "why_it_matters",
        +      "key_facts",
        +      "ticker_takes",
        +      "uncertainties",
        +      "based_on",
        +      "materials_at_build",
        +      "new_materials",
        +      "revision_generated_at",
        +      "indexable"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  7. 2 tool updates
    • Changedalphai_insider_news1 field changed
      • changedInput schema / properties / sort / description
        Previous value: -"published (default): newest first. ingested: delta polling — only Form 4 events added since your cursor, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later). Prefer this for watching insider activity: a filing arrives days after its transaction date, so it can land below the newest page of a publish-ordered feed. A cursor only works with the sort mode that issued it."New value: +"published (default): newest first. ingested: delta polling — only Form 4 events added since your cursor, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later). Prefer this for watching insider activity: a filing arrives days after its transaction date, so it can land below the newest page of a publish-ordered feed. A cursor only works with the sort mode that issued it. With ingested, to_date must not be in the past."
    • Changedalphai_news_search1 field changed
      • changedInput schema / properties / sort / description
        Previous value: -"published (default): newest first, next_cursor pages into older history. ingested: delta polling — rows in the order they became available, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later); time_published is not monotonic within a page. A cursor only works with the sort mode that issued it."New value: +"published (default): newest first, next_cursor pages into older history. ingested: delta polling — rows in the order they became available, ascending; next_cursor is always returned (empty items = caught up, keep the cursor and poll later); time_published is not monotonic within a page. A cursor only works with the sort mode that issued it. With ingested, to_date must not be in the past."
  8. 7 tool updates
    • Changedalphai_actionable_now5 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "full",
        +  "description": "full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.",
        +  "enum": [
        +    "full",
        +    "compact"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "analysis": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "actionability": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "alternative_perspectives": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "contrarian_view": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "overlooked_factors": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "background_context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "indirect_market_effects": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "global_market_relevance": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "regional_market_impact": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "sector_implications": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "information_novelty": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "key_entities": {
        +                "items": {
        +                  "properties": {
        +                    "description": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "entity_type": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "name": {
        +                      "default": "",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "market_relevance_summary": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "market_sentiment_alignment": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "ticker_analysis": {
        +                "items": {
        +                  "properties": {
        +                    "confidence": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "price_impact_prediction": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "reasoning": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "relevance_context": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "sentiment": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "ticker": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "ticker"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "timing_relevance": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "banner_image": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "earnings": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "filing": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        +            "properties": {
        +              "accession_number": {
        +                "type": "string"
        +              },
        +              "event_date": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "exhibit_url": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "items": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "primary_item": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "items",
        +              "accession_number",
        +              "filed_at"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "insider": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        +            "properties": {
        +              "avg_price_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "insider_name": {
        +                "type": "string"
        +              },
        +              "insider_title": {
        +                "type": "string"
        +              },
        +              "is_10b5_1": {
        +                "type": "boolean"
        +              },
        +              "is_director": {
        +                "type": "boolean"
        +              },
        +              "is_officer": {
        +                "type": "boolean"
        +              },
        +              "is_ten_percent_owner": {
        +                "type": "boolean"
        +              },
        +              "late_filing": {
        +                "type": "boolean"
        +              },
        +              "shares": {
        +                "type": "string"
        +              },
        +              "side": {
        +                "type": "string"
        +              },
        +              "total_value_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "transaction_code": {
        +                "type": "string"
        +              },
        +              "transaction_date": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "side",
        +              "transaction_code",
        +              "shares",
        +              "is_10b5_1",
        +              "insider_name",
        +              "insider_title",
        +              "is_officer",
        +              "is_director",
        +              "is_ten_percent_owner",
        +              "transaction_date",
        +              "filed_at",
        +              "late_filing"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "read_time_minutes": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "default": "",
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "summary": {
        +        "type": "string"
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "summary",
        +      "category",
        +      "relevance_score",
        +      "time_published",
        +      "created_at"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.",
        +    "properties": {
        +      "actionability": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "information_novelty": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "source_type",
        +      "time_published",
        +      "created_at",
        +      "tickers",
        +      "category",
        +      "relevance_score",
        +      "actionability",
        +      "information_novelty",
        +      "story_id",
        +      "sources_count",
        +      "sources",
        +      "ownership_form",
        +      "search_match"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / result / items / properties
        Removed value: -{
        -  "analysis": {
        -    "anyOf": [
        -      {
        -        "properties": {
        -          "actionability": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "alternative_perspectives": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "contrarian_view": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "overlooked_factors": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "background_context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "indirect_market_effects": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "global_market_relevance": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "regional_market_impact": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "sector_implications": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "information_novelty": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "key_entities": {
        -            "items": {
        -              "properties": {
        -                "description": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "entity_type": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "name": {
        -                  "default": "",
        -                  "type": "string"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "market_relevance_summary": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "market_sentiment_alignment": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "ticker_analysis": {
        -            "items": {
        -              "properties": {
        -                "confidence": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "price_impact_prediction": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "reasoning": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "relevance_context": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "sentiment": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "ticker": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "ticker"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "timing_relevance": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "banner_image": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "category": {
        -    "type": "string"
        -  },
        -  "created_at": {
        -    "type": "string"
        -  },
        -  "earnings": {
        -    "anyOf": [
        -      {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "filing": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        -        "properties": {
        -          "accession_number": {
        -            "type": "string"
        -          },
        -          "event_date": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "exhibit_url": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "items": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "primary_item": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "items",
        -          "accession_number",
        -          "filed_at"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "insider": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        -        "properties": {
        -          "avg_price_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "insider_name": {
        -            "type": "string"
        -          },
        -          "insider_title": {
        -            "type": "string"
        -          },
        -          "is_10b5_1": {
        -            "type": "boolean"
        -          },
        -          "is_director": {
        -            "type": "boolean"
        -          },
        -          "is_officer": {
        -            "type": "boolean"
        -          },
        -          "is_ten_percent_owner": {
        -            "type": "boolean"
        -          },
        -          "late_filing": {
        -            "type": "boolean"
        -          },
        -          "shares": {
        -            "type": "string"
        -          },
        -          "side": {
        -            "type": "string"
        -          },
        -          "total_value_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "transaction_code": {
        -            "type": "string"
        -          },
        -          "transaction_date": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "side",
        -          "transaction_code",
        -          "shares",
        -          "is_10b5_1",
        -          "insider_name",
        -          "insider_title",
        -          "is_officer",
        -          "is_director",
        -          "is_ten_percent_owner",
        -          "transaction_date",
        -          "filed_at",
        -          "late_filing"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "ownership_form": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "read_time_minutes": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "relevance_score": {
        -    "type": "integer"
        -  },
        -  "search_match": {
        -    "anyOf": [
        -      {
        -        "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        -        "properties": {
        -          "context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "score": {
        -            "type": "number"
        -          },
        -          "terms_matched": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "score"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "source": {
        -    "type": "string"
        -  },
        -  "source_domain": {
        -    "type": "string"
        -  },
        -  "source_type": {
        -    "default": "",
        -    "type": "string"
        -  },
        -  "sources": {
        -    "anyOf": [
        -      {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "sources_count": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "story_id": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "summary": {
        -    "type": "string"
        -  },
        -  "tickers": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "time_published": {
        -    "type": "string"
        -  },
        -  "title": {
        -    "type": "string"
        -  },
        -  "uid": {
        -    "type": "string"
        -  },
        -  "url": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / result / items / required
        Removed value: -[
        -  "uid",
        -  "title",
        -  "url",
        -  "source",
        -  "source_domain",
        -  "summary",
        -  "category",
        -  "relevance_score",
        -  "time_published",
        -  "created_at"
        -]
      • removedOutput schema / properties / result / items / type
        Removed value: -"object"
    • Changedalphai_insider_news5 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "full",
        +  "description": "full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.",
        +  "enum": [
        +    "full",
        +    "compact"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / items / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "analysis": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "actionability": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "alternative_perspectives": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "contrarian_view": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "overlooked_factors": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "background_context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "indirect_market_effects": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "global_market_relevance": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "regional_market_impact": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "sector_implications": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "information_novelty": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "key_entities": {
        +                "items": {
        +                  "properties": {
        +                    "description": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "entity_type": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "name": {
        +                      "default": "",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "market_relevance_summary": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "market_sentiment_alignment": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "ticker_analysis": {
        +                "items": {
        +                  "properties": {
        +                    "confidence": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "price_impact_prediction": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "reasoning": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "relevance_context": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "sentiment": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "ticker": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "ticker"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "timing_relevance": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "banner_image": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "earnings": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "filing": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        +            "properties": {
        +              "accession_number": {
        +                "type": "string"
        +              },
        +              "event_date": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "exhibit_url": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "items": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "primary_item": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "items",
        +              "accession_number",
        +              "filed_at"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "insider": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        +            "properties": {
        +              "avg_price_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "insider_name": {
        +                "type": "string"
        +              },
        +              "insider_title": {
        +                "type": "string"
        +              },
        +              "is_10b5_1": {
        +                "type": "boolean"
        +              },
        +              "is_director": {
        +                "type": "boolean"
        +              },
        +              "is_officer": {
        +                "type": "boolean"
        +              },
        +              "is_ten_percent_owner": {
        +                "type": "boolean"
        +              },
        +              "late_filing": {
        +                "type": "boolean"
        +              },
        +              "shares": {
        +                "type": "string"
        +              },
        +              "side": {
        +                "type": "string"
        +              },
        +              "total_value_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "transaction_code": {
        +                "type": "string"
        +              },
        +              "transaction_date": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "side",
        +              "transaction_code",
        +              "shares",
        +              "is_10b5_1",
        +              "insider_name",
        +              "insider_title",
        +              "is_officer",
        +              "is_director",
        +              "is_ten_percent_owner",
        +              "transaction_date",
        +              "filed_at",
        +              "late_filing"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "read_time_minutes": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "default": "",
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "summary": {
        +        "type": "string"
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "summary",
        +      "category",
        +      "relevance_score",
        +      "time_published",
        +      "created_at"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.",
        +    "properties": {
        +      "actionability": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "information_novelty": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "source_type",
        +      "time_published",
        +      "created_at",
        +      "tickers",
        +      "category",
        +      "relevance_score",
        +      "actionability",
        +      "information_novelty",
        +      "story_id",
        +      "sources_count",
        +      "sources",
        +      "ownership_form",
        +      "search_match"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / items / items / properties
        Removed value: -{
        -  "analysis": {
        -    "anyOf": [
        -      {
        -        "properties": {
        -          "actionability": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "alternative_perspectives": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "contrarian_view": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "overlooked_factors": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "background_context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "indirect_market_effects": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "global_market_relevance": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "regional_market_impact": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "sector_implications": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "information_novelty": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "key_entities": {
        -            "items": {
        -              "properties": {
        -                "description": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "entity_type": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "name": {
        -                  "default": "",
        -                  "type": "string"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "market_relevance_summary": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "market_sentiment_alignment": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "ticker_analysis": {
        -            "items": {
        -              "properties": {
        -                "confidence": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "price_impact_prediction": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "reasoning": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "relevance_context": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "sentiment": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "ticker": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "ticker"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "timing_relevance": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "banner_image": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "category": {
        -    "type": "string"
        -  },
        -  "created_at": {
        -    "type": "string"
        -  },
        -  "earnings": {
        -    "anyOf": [
        -      {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "filing": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        -        "properties": {
        -          "accession_number": {
        -            "type": "string"
        -          },
        -          "event_date": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "exhibit_url": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "items": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "primary_item": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "items",
        -          "accession_number",
        -          "filed_at"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "insider": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        -        "properties": {
        -          "avg_price_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "insider_name": {
        -            "type": "string"
        -          },
        -          "insider_title": {
        -            "type": "string"
        -          },
        -          "is_10b5_1": {
        -            "type": "boolean"
        -          },
        -          "is_director": {
        -            "type": "boolean"
        -          },
        -          "is_officer": {
        -            "type": "boolean"
        -          },
        -          "is_ten_percent_owner": {
        -            "type": "boolean"
        -          },
        -          "late_filing": {
        -            "type": "boolean"
        -          },
        -          "shares": {
        -            "type": "string"
        -          },
        -          "side": {
        -            "type": "string"
        -          },
        -          "total_value_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "transaction_code": {
        -            "type": "string"
        -          },
        -          "transaction_date": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "side",
        -          "transaction_code",
        -          "shares",
        -          "is_10b5_1",
        -          "insider_name",
        -          "insider_title",
        -          "is_officer",
        -          "is_director",
        -          "is_ten_percent_owner",
        -          "transaction_date",
        -          "filed_at",
        -          "late_filing"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "ownership_form": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "read_time_minutes": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "relevance_score": {
        -    "type": "integer"
        -  },
        -  "search_match": {
        -    "anyOf": [
        -      {
        -        "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        -        "properties": {
        -          "context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "score": {
        -            "type": "number"
        -          },
        -          "terms_matched": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "score"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "source": {
        -    "type": "string"
        -  },
        -  "source_domain": {
        -    "type": "string"
        -  },
        -  "source_type": {
        -    "default": "",
        -    "type": "string"
        -  },
        -  "sources": {
        -    "anyOf": [
        -      {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "sources_count": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "story_id": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "summary": {
        -    "type": "string"
        -  },
        -  "tickers": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "time_published": {
        -    "type": "string"
        -  },
        -  "title": {
        -    "type": "string"
        -  },
        -  "uid": {
        -    "type": "string"
        -  },
        -  "url": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / items / items / required
        Removed value: -[
        -  "uid",
        -  "title",
        -  "url",
        -  "source",
        -  "source_domain",
        -  "summary",
        -  "category",
        -  "relevance_score",
        -  "time_published",
        -  "created_at"
        -]
      • removedOutput schema / properties / items / items / type
        Removed value: -"object"
    • Changedalphai_macro5 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "full",
        +  "description": "full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.",
        +  "enum": [
        +    "full",
        +    "compact"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "analysis": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "actionability": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "alternative_perspectives": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "contrarian_view": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "overlooked_factors": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "background_context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "indirect_market_effects": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "global_market_relevance": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "regional_market_impact": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "sector_implications": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "information_novelty": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "key_entities": {
        +                "items": {
        +                  "properties": {
        +                    "description": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "entity_type": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "name": {
        +                      "default": "",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "market_relevance_summary": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "market_sentiment_alignment": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "ticker_analysis": {
        +                "items": {
        +                  "properties": {
        +                    "confidence": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "price_impact_prediction": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "reasoning": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "relevance_context": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "sentiment": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "ticker": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "ticker"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "timing_relevance": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "banner_image": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "earnings": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "filing": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        +            "properties": {
        +              "accession_number": {
        +                "type": "string"
        +              },
        +              "event_date": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "exhibit_url": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "items": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "primary_item": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "items",
        +              "accession_number",
        +              "filed_at"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "insider": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        +            "properties": {
        +              "avg_price_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "insider_name": {
        +                "type": "string"
        +              },
        +              "insider_title": {
        +                "type": "string"
        +              },
        +              "is_10b5_1": {
        +                "type": "boolean"
        +              },
        +              "is_director": {
        +                "type": "boolean"
        +              },
        +              "is_officer": {
        +                "type": "boolean"
        +              },
        +              "is_ten_percent_owner": {
        +                "type": "boolean"
        +              },
        +              "late_filing": {
        +                "type": "boolean"
        +              },
        +              "shares": {
        +                "type": "string"
        +              },
        +              "side": {
        +                "type": "string"
        +              },
        +              "total_value_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "transaction_code": {
        +                "type": "string"
        +              },
        +              "transaction_date": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "side",
        +              "transaction_code",
        +              "shares",
        +              "is_10b5_1",
        +              "insider_name",
        +              "insider_title",
        +              "is_officer",
        +              "is_director",
        +              "is_ten_percent_owner",
        +              "transaction_date",
        +              "filed_at",
        +              "late_filing"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "read_time_minutes": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "default": "",
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "summary": {
        +        "type": "string"
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "summary",
        +      "category",
        +      "relevance_score",
        +      "time_published",
        +      "created_at"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.",
        +    "properties": {
        +      "actionability": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "information_novelty": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "source_type",
        +      "time_published",
        +      "created_at",
        +      "tickers",
        +      "category",
        +      "relevance_score",
        +      "actionability",
        +      "information_novelty",
        +      "story_id",
        +      "sources_count",
        +      "sources",
        +      "ownership_form",
        +      "search_match"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / result / items / properties
        Removed value: -{
        -  "analysis": {
        -    "anyOf": [
        -      {
        -        "properties": {
        -          "actionability": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "alternative_perspectives": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "contrarian_view": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "overlooked_factors": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "background_context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "indirect_market_effects": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "global_market_relevance": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "regional_market_impact": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "sector_implications": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "information_novelty": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "key_entities": {
        -            "items": {
        -              "properties": {
        -                "description": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "entity_type": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "name": {
        -                  "default": "",
        -                  "type": "string"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "market_relevance_summary": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "market_sentiment_alignment": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "ticker_analysis": {
        -            "items": {
        -              "properties": {
        -                "confidence": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "price_impact_prediction": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "reasoning": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "relevance_context": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "sentiment": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "ticker": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "ticker"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "timing_relevance": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "banner_image": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "category": {
        -    "type": "string"
        -  },
        -  "created_at": {
        -    "type": "string"
        -  },
        -  "earnings": {
        -    "anyOf": [
        -      {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "filing": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        -        "properties": {
        -          "accession_number": {
        -            "type": "string"
        -          },
        -          "event_date": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "exhibit_url": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "items": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "primary_item": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "items",
        -          "accession_number",
        -          "filed_at"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "insider": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        -        "properties": {
        -          "avg_price_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "insider_name": {
        -            "type": "string"
        -          },
        -          "insider_title": {
        -            "type": "string"
        -          },
        -          "is_10b5_1": {
        -            "type": "boolean"
        -          },
        -          "is_director": {
        -            "type": "boolean"
        -          },
        -          "is_officer": {
        -            "type": "boolean"
        -          },
        -          "is_ten_percent_owner": {
        -            "type": "boolean"
        -          },
        -          "late_filing": {
        -            "type": "boolean"
        -          },
        -          "shares": {
        -            "type": "string"
        -          },
        -          "side": {
        -            "type": "string"
        -          },
        -          "total_value_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "transaction_code": {
        -            "type": "string"
        -          },
        -          "transaction_date": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "side",
        -          "transaction_code",
        -          "shares",
        -          "is_10b5_1",
        -          "insider_name",
        -          "insider_title",
        -          "is_officer",
        -          "is_director",
        -          "is_ten_percent_owner",
        -          "transaction_date",
        -          "filed_at",
        -          "late_filing"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "ownership_form": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "read_time_minutes": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "relevance_score": {
        -    "type": "integer"
        -  },
        -  "search_match": {
        -    "anyOf": [
        -      {
        -        "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        -        "properties": {
        -          "context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "score": {
        -            "type": "number"
        -          },
        -          "terms_matched": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "score"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "source": {
        -    "type": "string"
        -  },
        -  "source_domain": {
        -    "type": "string"
        -  },
        -  "source_type": {
        -    "default": "",
        -    "type": "string"
        -  },
        -  "sources": {
        -    "anyOf": [
        -      {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "sources_count": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "story_id": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "summary": {
        -    "type": "string"
        -  },
        -  "tickers": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "time_published": {
        -    "type": "string"
        -  },
        -  "title": {
        -    "type": "string"
        -  },
        -  "uid": {
        -    "type": "string"
        -  },
        -  "url": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / result / items / required
        Removed value: -[
        -  "uid",
        -  "title",
        -  "url",
        -  "source",
        -  "source_domain",
        -  "summary",
        -  "category",
        -  "relevance_score",
        -  "time_published",
        -  "created_at"
        -]
      • removedOutput schema / properties / result / items / type
        Removed value: -"object"
    • Changedalphai_news_search5 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "full",
        +  "description": "full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.",
        +  "enum": [
        +    "full",
        +    "compact"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / items / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "analysis": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "actionability": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "alternative_perspectives": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "contrarian_view": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "overlooked_factors": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "background_context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "indirect_market_effects": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "global_market_relevance": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "regional_market_impact": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "sector_implications": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "information_novelty": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "key_entities": {
        +                "items": {
        +                  "properties": {
        +                    "description": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "entity_type": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "name": {
        +                      "default": "",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "market_relevance_summary": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "market_sentiment_alignment": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "ticker_analysis": {
        +                "items": {
        +                  "properties": {
        +                    "confidence": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "price_impact_prediction": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "reasoning": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "relevance_context": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "sentiment": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "ticker": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "ticker"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "timing_relevance": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "banner_image": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "earnings": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "filing": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        +            "properties": {
        +              "accession_number": {
        +                "type": "string"
        +              },
        +              "event_date": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "exhibit_url": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "items": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "primary_item": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "items",
        +              "accession_number",
        +              "filed_at"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "insider": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        +            "properties": {
        +              "avg_price_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "insider_name": {
        +                "type": "string"
        +              },
        +              "insider_title": {
        +                "type": "string"
        +              },
        +              "is_10b5_1": {
        +                "type": "boolean"
        +              },
        +              "is_director": {
        +                "type": "boolean"
        +              },
        +              "is_officer": {
        +                "type": "boolean"
        +              },
        +              "is_ten_percent_owner": {
        +                "type": "boolean"
        +              },
        +              "late_filing": {
        +                "type": "boolean"
        +              },
        +              "shares": {
        +                "type": "string"
        +              },
        +              "side": {
        +                "type": "string"
        +              },
        +              "total_value_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "transaction_code": {
        +                "type": "string"
        +              },
        +              "transaction_date": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "side",
        +              "transaction_code",
        +              "shares",
        +              "is_10b5_1",
        +              "insider_name",
        +              "insider_title",
        +              "is_officer",
        +              "is_director",
        +              "is_ten_percent_owner",
        +              "transaction_date",
        +              "filed_at",
        +              "late_filing"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "read_time_minutes": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "default": "",
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "summary": {
        +        "type": "string"
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "summary",
        +      "category",
        +      "relevance_score",
        +      "time_published",
        +      "created_at"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.",
        +    "properties": {
        +      "actionability": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "information_novelty": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "source_type",
        +      "time_published",
        +      "created_at",
        +      "tickers",
        +      "category",
        +      "relevance_score",
        +      "actionability",
        +      "information_novelty",
        +      "story_id",
        +      "sources_count",
        +      "sources",
        +      "ownership_form",
        +      "search_match"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / items / items / properties
        Removed value: -{
        -  "analysis": {
        -    "anyOf": [
        -      {
        -        "properties": {
        -          "actionability": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "alternative_perspectives": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "contrarian_view": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "overlooked_factors": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "background_context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "indirect_market_effects": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "global_market_relevance": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "regional_market_impact": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "sector_implications": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "information_novelty": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "key_entities": {
        -            "items": {
        -              "properties": {
        -                "description": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "entity_type": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "name": {
        -                  "default": "",
        -                  "type": "string"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "market_relevance_summary": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "market_sentiment_alignment": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "ticker_analysis": {
        -            "items": {
        -              "properties": {
        -                "confidence": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "price_impact_prediction": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "reasoning": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "relevance_context": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "sentiment": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "ticker": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "ticker"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "timing_relevance": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "banner_image": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "category": {
        -    "type": "string"
        -  },
        -  "created_at": {
        -    "type": "string"
        -  },
        -  "earnings": {
        -    "anyOf": [
        -      {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "filing": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        -        "properties": {
        -          "accession_number": {
        -            "type": "string"
        -          },
        -          "event_date": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "exhibit_url": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "items": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "primary_item": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "items",
        -          "accession_number",
        -          "filed_at"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "insider": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        -        "properties": {
        -          "avg_price_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "insider_name": {
        -            "type": "string"
        -          },
        -          "insider_title": {
        -            "type": "string"
        -          },
        -          "is_10b5_1": {
        -            "type": "boolean"
        -          },
        -          "is_director": {
        -            "type": "boolean"
        -          },
        -          "is_officer": {
        -            "type": "boolean"
        -          },
        -          "is_ten_percent_owner": {
        -            "type": "boolean"
        -          },
        -          "late_filing": {
        -            "type": "boolean"
        -          },
        -          "shares": {
        -            "type": "string"
        -          },
        -          "side": {
        -            "type": "string"
        -          },
        -          "total_value_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "transaction_code": {
        -            "type": "string"
        -          },
        -          "transaction_date": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "side",
        -          "transaction_code",
        -          "shares",
        -          "is_10b5_1",
        -          "insider_name",
        -          "insider_title",
        -          "is_officer",
        -          "is_director",
        -          "is_ten_percent_owner",
        -          "transaction_date",
        -          "filed_at",
        -          "late_filing"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "ownership_form": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "read_time_minutes": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "relevance_score": {
        -    "type": "integer"
        -  },
        -  "search_match": {
        -    "anyOf": [
        -      {
        -        "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        -        "properties": {
        -          "context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "score": {
        -            "type": "number"
        -          },
        -          "terms_matched": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "score"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "source": {
        -    "type": "string"
        -  },
        -  "source_domain": {
        -    "type": "string"
        -  },
        -  "source_type": {
        -    "default": "",
        -    "type": "string"
        -  },
        -  "sources": {
        -    "anyOf": [
        -      {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "sources_count": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "story_id": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "summary": {
        -    "type": "string"
        -  },
        -  "tickers": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "time_published": {
        -    "type": "string"
        -  },
        -  "title": {
        -    "type": "string"
        -  },
        -  "uid": {
        -    "type": "string"
        -  },
        -  "url": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / items / items / required
        Removed value: -[
        -  "uid",
        -  "title",
        -  "url",
        -  "source",
        -  "source_domain",
        -  "summary",
        -  "category",
        -  "relevance_score",
        -  "time_published",
        -  "created_at"
        -]
      • removedOutput schema / properties / items / items / type
        Removed value: -"object"
    • Changedalphai_pair_analysis13 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "full",
        +  "description": "full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.",
        +  "enum": [
        +    "full",
        +    "compact"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / a_recent / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "analysis": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "actionability": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "alternative_perspectives": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "contrarian_view": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "overlooked_factors": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "background_context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "indirect_market_effects": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "global_market_relevance": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "regional_market_impact": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "sector_implications": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "information_novelty": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "key_entities": {
        +                "items": {
        +                  "properties": {
        +                    "description": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "entity_type": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "name": {
        +                      "default": "",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "market_relevance_summary": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "market_sentiment_alignment": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "ticker_analysis": {
        +                "items": {
        +                  "properties": {
        +                    "confidence": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "price_impact_prediction": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "reasoning": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "relevance_context": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "sentiment": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "ticker": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "ticker"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "timing_relevance": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "banner_image": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "earnings": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "filing": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        +            "properties": {
        +              "accession_number": {
        +                "type": "string"
        +              },
        +              "event_date": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "exhibit_url": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "items": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "primary_item": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "items",
        +              "accession_number",
        +              "filed_at"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "insider": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        +            "properties": {
        +              "avg_price_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "insider_name": {
        +                "type": "string"
        +              },
        +              "insider_title": {
        +                "type": "string"
        +              },
        +              "is_10b5_1": {
        +                "type": "boolean"
        +              },
        +              "is_director": {
        +                "type": "boolean"
        +              },
        +              "is_officer": {
        +                "type": "boolean"
        +              },
        +              "is_ten_percent_owner": {
        +                "type": "boolean"
        +              },
        +              "late_filing": {
        +                "type": "boolean"
        +              },
        +              "shares": {
        +                "type": "string"
        +              },
        +              "side": {
        +                "type": "string"
        +              },
        +              "total_value_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "transaction_code": {
        +                "type": "string"
        +              },
        +              "transaction_date": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "side",
        +              "transaction_code",
        +              "shares",
        +              "is_10b5_1",
        +              "insider_name",
        +              "insider_title",
        +              "is_officer",
        +              "is_director",
        +              "is_ten_percent_owner",
        +              "transaction_date",
        +              "filed_at",
        +              "late_filing"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "read_time_minutes": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "default": "",
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "summary": {
        +        "type": "string"
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "summary",
        +      "category",
        +      "relevance_score",
        +      "time_published",
        +      "created_at"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.",
        +    "properties": {
        +      "actionability": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "information_novelty": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "source_type",
        +      "time_published",
        +      "created_at",
        +      "tickers",
        +      "category",
        +      "relevance_score",
        +      "actionability",
        +      "information_novelty",
        +      "story_id",
        +      "sources_count",
        +      "sources",
        +      "ownership_form",
        +      "search_match"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / a_recent / items / properties
        Removed value: -{
        -  "analysis": {
        -    "anyOf": [
        -      {
        -        "properties": {
        -          "actionability": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "alternative_perspectives": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "contrarian_view": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "overlooked_factors": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "background_context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "indirect_market_effects": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "global_market_relevance": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "regional_market_impact": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "sector_implications": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "information_novelty": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "key_entities": {
        -            "items": {
        -              "properties": {
        -                "description": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "entity_type": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "name": {
        -                  "default": "",
        -                  "type": "string"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "market_relevance_summary": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "market_sentiment_alignment": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "ticker_analysis": {
        -            "items": {
        -              "properties": {
        -                "confidence": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "price_impact_prediction": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "reasoning": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "relevance_context": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "sentiment": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "ticker": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "ticker"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "timing_relevance": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "banner_image": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "category": {
        -    "type": "string"
        -  },
        -  "created_at": {
        -    "type": "string"
        -  },
        -  "earnings": {
        -    "anyOf": [
        -      {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "filing": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        -        "properties": {
        -          "accession_number": {
        -            "type": "string"
        -          },
        -          "event_date": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "exhibit_url": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "items": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "primary_item": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "items",
        -          "accession_number",
        -          "filed_at"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "insider": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        -        "properties": {
        -          "avg_price_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "insider_name": {
        -            "type": "string"
        -          },
        -          "insider_title": {
        -            "type": "string"
        -          },
        -          "is_10b5_1": {
        -            "type": "boolean"
        -          },
        -          "is_director": {
        -            "type": "boolean"
        -          },
        -          "is_officer": {
        -            "type": "boolean"
        -          },
        -          "is_ten_percent_owner": {
        -            "type": "boolean"
        -          },
        -          "late_filing": {
        -            "type": "boolean"
        -          },
        -          "shares": {
        -            "type": "string"
        -          },
        -          "side": {
        -            "type": "string"
        -          },
        -          "total_value_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "transaction_code": {
        -            "type": "string"
        -          },
        -          "transaction_date": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "side",
        -          "transaction_code",
        -          "shares",
        -          "is_10b5_1",
        -          "insider_name",
        -          "insider_title",
        -          "is_officer",
        -          "is_director",
        -          "is_ten_percent_owner",
        -          "transaction_date",
        -          "filed_at",
        -          "late_filing"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "ownership_form": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "read_time_minutes": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "relevance_score": {
        -    "type": "integer"
        -  },
        -  "search_match": {
        -    "anyOf": [
        -      {
        -        "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        -        "properties": {
        -          "context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "score": {
        -            "type": "number"
        -          },
        -          "terms_matched": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "score"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "source": {
        -    "type": "string"
        -  },
        -  "source_domain": {
        -    "type": "string"
        -  },
        -  "source_type": {
        -    "default": "",
        -    "type": "string"
        -  },
        -  "sources": {
        -    "anyOf": [
        -      {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "sources_count": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "story_id": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "summary": {
        -    "type": "string"
        -  },
        -  "tickers": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "time_published": {
        -    "type": "string"
        -  },
        -  "title": {
        -    "type": "string"
        -  },
        -  "uid": {
        -    "type": "string"
        -  },
        -  "url": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / a_recent / items / required
        Removed value: -[
        -  "uid",
        -  "title",
        -  "url",
        -  "source",
        -  "source_domain",
        -  "summary",
        -  "category",
        -  "relevance_score",
        -  "time_published",
        -  "created_at"
        -]
      • removedOutput schema / properties / a_recent / items / type
        Removed value: -"object"
      • addedOutput schema / properties / b_recent / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "analysis": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "actionability": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "alternative_perspectives": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "contrarian_view": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "overlooked_factors": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "background_context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "indirect_market_effects": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "global_market_relevance": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "regional_market_impact": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "sector_implications": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "information_novelty": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "key_entities": {
        +                "items": {
        +                  "properties": {
        +                    "description": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "entity_type": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "name": {
        +                      "default": "",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "market_relevance_summary": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "market_sentiment_alignment": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "ticker_analysis": {
        +                "items": {
        +                  "properties": {
        +                    "confidence": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "price_impact_prediction": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "reasoning": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "relevance_context": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "sentiment": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "ticker": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "ticker"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "timing_relevance": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "banner_image": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "earnings": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "filing": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        +            "properties": {
        +              "accession_number": {
        +                "type": "string"
        +              },
        +              "event_date": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "exhibit_url": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "items": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "primary_item": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "items",
        +              "accession_number",
        +              "filed_at"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "insider": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        +            "properties": {
        +              "avg_price_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "insider_name": {
        +                "type": "string"
        +              },
        +              "insider_title": {
        +                "type": "string"
        +              },
        +              "is_10b5_1": {
        +                "type": "boolean"
        +              },
        +              "is_director": {
        +                "type": "boolean"
        +              },
        +              "is_officer": {
        +                "type": "boolean"
        +              },
        +              "is_ten_percent_owner": {
        +                "type": "boolean"
        +              },
        +              "late_filing": {
        +                "type": "boolean"
        +              },
        +              "shares": {
        +                "type": "string"
        +              },
        +              "side": {
        +                "type": "string"
        +              },
        +              "total_value_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "transaction_code": {
        +                "type": "string"
        +              },
        +              "transaction_date": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "side",
        +              "transaction_code",
        +              "shares",
        +              "is_10b5_1",
        +              "insider_name",
        +              "insider_title",
        +              "is_officer",
        +              "is_director",
        +              "is_ten_percent_owner",
        +              "transaction_date",
        +              "filed_at",
        +              "late_filing"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "read_time_minutes": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "default": "",
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "summary": {
        +        "type": "string"
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "summary",
        +      "category",
        +      "relevance_score",
        +      "time_published",
        +      "created_at"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.",
        +    "properties": {
        +      "actionability": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "information_novelty": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "source_type",
        +      "time_published",
        +      "created_at",
        +      "tickers",
        +      "category",
        +      "relevance_score",
        +      "actionability",
        +      "information_novelty",
        +      "story_id",
        +      "sources_count",
        +      "sources",
        +      "ownership_form",
        +      "search_match"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / b_recent / items / properties
        Removed value: -{
        -  "analysis": {
        -    "anyOf": [
        -      {
        -        "properties": {
        -          "actionability": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "alternative_perspectives": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "contrarian_view": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "overlooked_factors": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "background_context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "indirect_market_effects": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "global_market_relevance": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "regional_market_impact": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "sector_implications": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "information_novelty": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "key_entities": {
        -            "items": {
        -              "properties": {
        -                "description": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "entity_type": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "name": {
        -                  "default": "",
        -                  "type": "string"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "market_relevance_summary": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "market_sentiment_alignment": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "ticker_analysis": {
        -            "items": {
        -              "properties": {
        -                "confidence": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "price_impact_prediction": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "reasoning": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "relevance_context": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "sentiment": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "ticker": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "ticker"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "timing_relevance": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "banner_image": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "category": {
        -    "type": "string"
        -  },
        -  "created_at": {
        -    "type": "string"
        -  },
        -  "earnings": {
        -    "anyOf": [
        -      {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "filing": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        -        "properties": {
        -          "accession_number": {
        -            "type": "string"
        -          },
        -          "event_date": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "exhibit_url": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "items": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "primary_item": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "items",
        -          "accession_number",
        -          "filed_at"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "insider": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        -        "properties": {
        -          "avg_price_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "insider_name": {
        -            "type": "string"
        -          },
        -          "insider_title": {
        -            "type": "string"
        -          },
        -          "is_10b5_1": {
        -            "type": "boolean"
        -          },
        -          "is_director": {
        -            "type": "boolean"
        -          },
        -          "is_officer": {
        -            "type": "boolean"
        -          },
        -          "is_ten_percent_owner": {
        -            "type": "boolean"
        -          },
        -          "late_filing": {
        -            "type": "boolean"
        -          },
        -          "shares": {
        -            "type": "string"
        -          },
        -          "side": {
        -            "type": "string"
        -          },
        -          "total_value_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "transaction_code": {
        -            "type": "string"
        -          },
        -          "transaction_date": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "side",
        -          "transaction_code",
        -          "shares",
        -          "is_10b5_1",
        -          "insider_name",
        -          "insider_title",
        -          "is_officer",
        -          "is_director",
        -          "is_ten_percent_owner",
        -          "transaction_date",
        -          "filed_at",
        -          "late_filing"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "ownership_form": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "read_time_minutes": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "relevance_score": {
        -    "type": "integer"
        -  },
        -  "search_match": {
        -    "anyOf": [
        -      {
        -        "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        -        "properties": {
        -          "context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "score": {
        -            "type": "number"
        -          },
        -          "terms_matched": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "score"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "source": {
        -    "type": "string"
        -  },
        -  "source_domain": {
        -    "type": "string"
        -  },
        -  "source_type": {
        -    "default": "",
        -    "type": "string"
        -  },
        -  "sources": {
        -    "anyOf": [
        -      {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "sources_count": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "story_id": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "summary": {
        -    "type": "string"
        -  },
        -  "tickers": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "time_published": {
        -    "type": "string"
        -  },
        -  "title": {
        -    "type": "string"
        -  },
        -  "uid": {
        -    "type": "string"
        -  },
        -  "url": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / b_recent / items / required
        Removed value: -[
        -  "uid",
        -  "title",
        -  "url",
        -  "source",
        -  "source_domain",
        -  "summary",
        -  "category",
        -  "relevance_score",
        -  "time_published",
        -  "created_at"
        -]
      • removedOutput schema / properties / b_recent / items / type
        Removed value: -"object"
      • addedOutput schema / properties / both / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "analysis": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "actionability": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "alternative_perspectives": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "contrarian_view": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "overlooked_factors": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "background_context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "indirect_market_effects": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "global_market_relevance": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "regional_market_impact": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "sector_implications": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "information_novelty": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "key_entities": {
        +                "items": {
        +                  "properties": {
        +                    "description": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "entity_type": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "name": {
        +                      "default": "",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "market_relevance_summary": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "market_sentiment_alignment": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "ticker_analysis": {
        +                "items": {
        +                  "properties": {
        +                    "confidence": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "price_impact_prediction": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "reasoning": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "relevance_context": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "sentiment": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "ticker": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "ticker"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "timing_relevance": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "banner_image": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "earnings": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "filing": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        +            "properties": {
        +              "accession_number": {
        +                "type": "string"
        +              },
        +              "event_date": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "exhibit_url": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "items": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "primary_item": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "items",
        +              "accession_number",
        +              "filed_at"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "insider": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        +            "properties": {
        +              "avg_price_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "insider_name": {
        +                "type": "string"
        +              },
        +              "insider_title": {
        +                "type": "string"
        +              },
        +              "is_10b5_1": {
        +                "type": "boolean"
        +              },
        +              "is_director": {
        +                "type": "boolean"
        +              },
        +              "is_officer": {
        +                "type": "boolean"
        +              },
        +              "is_ten_percent_owner": {
        +                "type": "boolean"
        +              },
        +              "late_filing": {
        +                "type": "boolean"
        +              },
        +              "shares": {
        +                "type": "string"
        +              },
        +              "side": {
        +                "type": "string"
        +              },
        +              "total_value_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "transaction_code": {
        +                "type": "string"
        +              },
        +              "transaction_date": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "side",
        +              "transaction_code",
        +              "shares",
        +              "is_10b5_1",
        +              "insider_name",
        +              "insider_title",
        +              "is_officer",
        +              "is_director",
        +              "is_ten_percent_owner",
        +              "transaction_date",
        +              "filed_at",
        +              "late_filing"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "read_time_minutes": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "default": "",
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "summary": {
        +        "type": "string"
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "summary",
        +      "category",
        +      "relevance_score",
        +      "time_published",
        +      "created_at"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.",
        +    "properties": {
        +      "actionability": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "information_novelty": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "source_type",
        +      "time_published",
        +      "created_at",
        +      "tickers",
        +      "category",
        +      "relevance_score",
        +      "actionability",
        +      "information_novelty",
        +      "story_id",
        +      "sources_count",
        +      "sources",
        +      "ownership_form",
        +      "search_match"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / both / items / properties
        Removed value: -{
        -  "analysis": {
        -    "anyOf": [
        -      {
        -        "properties": {
        -          "actionability": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "alternative_perspectives": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "contrarian_view": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "overlooked_factors": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "background_context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "indirect_market_effects": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "global_market_relevance": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "regional_market_impact": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "sector_implications": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "information_novelty": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "key_entities": {
        -            "items": {
        -              "properties": {
        -                "description": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "entity_type": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "name": {
        -                  "default": "",
        -                  "type": "string"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "market_relevance_summary": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "market_sentiment_alignment": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "ticker_analysis": {
        -            "items": {
        -              "properties": {
        -                "confidence": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "price_impact_prediction": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "reasoning": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "relevance_context": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "sentiment": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "ticker": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "ticker"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "timing_relevance": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "banner_image": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "category": {
        -    "type": "string"
        -  },
        -  "created_at": {
        -    "type": "string"
        -  },
        -  "earnings": {
        -    "anyOf": [
        -      {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "filing": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        -        "properties": {
        -          "accession_number": {
        -            "type": "string"
        -          },
        -          "event_date": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "exhibit_url": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "items": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "primary_item": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "items",
        -          "accession_number",
        -          "filed_at"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "insider": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        -        "properties": {
        -          "avg_price_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "insider_name": {
        -            "type": "string"
        -          },
        -          "insider_title": {
        -            "type": "string"
        -          },
        -          "is_10b5_1": {
        -            "type": "boolean"
        -          },
        -          "is_director": {
        -            "type": "boolean"
        -          },
        -          "is_officer": {
        -            "type": "boolean"
        -          },
        -          "is_ten_percent_owner": {
        -            "type": "boolean"
        -          },
        -          "late_filing": {
        -            "type": "boolean"
        -          },
        -          "shares": {
        -            "type": "string"
        -          },
        -          "side": {
        -            "type": "string"
        -          },
        -          "total_value_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "transaction_code": {
        -            "type": "string"
        -          },
        -          "transaction_date": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "side",
        -          "transaction_code",
        -          "shares",
        -          "is_10b5_1",
        -          "insider_name",
        -          "insider_title",
        -          "is_officer",
        -          "is_director",
        -          "is_ten_percent_owner",
        -          "transaction_date",
        -          "filed_at",
        -          "late_filing"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "ownership_form": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "read_time_minutes": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "relevance_score": {
        -    "type": "integer"
        -  },
        -  "search_match": {
        -    "anyOf": [
        -      {
        -        "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        -        "properties": {
        -          "context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "score": {
        -            "type": "number"
        -          },
        -          "terms_matched": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "score"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "source": {
        -    "type": "string"
        -  },
        -  "source_domain": {
        -    "type": "string"
        -  },
        -  "source_type": {
        -    "default": "",
        -    "type": "string"
        -  },
        -  "sources": {
        -    "anyOf": [
        -      {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "sources_count": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "story_id": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "summary": {
        -    "type": "string"
        -  },
        -  "tickers": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "time_published": {
        -    "type": "string"
        -  },
        -  "title": {
        -    "type": "string"
        -  },
        -  "uid": {
        -    "type": "string"
        -  },
        -  "url": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / both / items / required
        Removed value: -[
        -  "uid",
        -  "title",
        -  "url",
        -  "source",
        -  "source_domain",
        -  "summary",
        -  "category",
        -  "relevance_score",
        -  "time_published",
        -  "created_at"
        -]
      • removedOutput schema / properties / both / items / type
        Removed value: -"object"
    • Changedalphai_ticker_news5 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "full",
        +  "description": "full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.",
        +  "enum": [
        +    "full",
        +    "compact"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / items / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "analysis": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "actionability": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "alternative_perspectives": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "contrarian_view": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "overlooked_factors": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "background_context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "indirect_market_effects": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "global_market_relevance": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "regional_market_impact": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "sector_implications": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "information_novelty": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "key_entities": {
        +                "items": {
        +                  "properties": {
        +                    "description": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "entity_type": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "name": {
        +                      "default": "",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "market_relevance_summary": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "market_sentiment_alignment": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "ticker_analysis": {
        +                "items": {
        +                  "properties": {
        +                    "confidence": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "price_impact_prediction": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "reasoning": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "relevance_context": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "sentiment": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "ticker": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "ticker"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "timing_relevance": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "banner_image": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "earnings": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "filing": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        +            "properties": {
        +              "accession_number": {
        +                "type": "string"
        +              },
        +              "event_date": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "exhibit_url": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "items": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "primary_item": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "items",
        +              "accession_number",
        +              "filed_at"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "insider": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        +            "properties": {
        +              "avg_price_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "insider_name": {
        +                "type": "string"
        +              },
        +              "insider_title": {
        +                "type": "string"
        +              },
        +              "is_10b5_1": {
        +                "type": "boolean"
        +              },
        +              "is_director": {
        +                "type": "boolean"
        +              },
        +              "is_officer": {
        +                "type": "boolean"
        +              },
        +              "is_ten_percent_owner": {
        +                "type": "boolean"
        +              },
        +              "late_filing": {
        +                "type": "boolean"
        +              },
        +              "shares": {
        +                "type": "string"
        +              },
        +              "side": {
        +                "type": "string"
        +              },
        +              "total_value_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "transaction_code": {
        +                "type": "string"
        +              },
        +              "transaction_date": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "side",
        +              "transaction_code",
        +              "shares",
        +              "is_10b5_1",
        +              "insider_name",
        +              "insider_title",
        +              "is_officer",
        +              "is_director",
        +              "is_ten_percent_owner",
        +              "transaction_date",
        +              "filed_at",
        +              "late_filing"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "read_time_minutes": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "default": "",
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "summary": {
        +        "type": "string"
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "summary",
        +      "category",
        +      "relevance_score",
        +      "time_published",
        +      "created_at"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.",
        +    "properties": {
        +      "actionability": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "information_novelty": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "source_type",
        +      "time_published",
        +      "created_at",
        +      "tickers",
        +      "category",
        +      "relevance_score",
        +      "actionability",
        +      "information_novelty",
        +      "story_id",
        +      "sources_count",
        +      "sources",
        +      "ownership_form",
        +      "search_match"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / items / items / properties
        Removed value: -{
        -  "analysis": {
        -    "anyOf": [
        -      {
        -        "properties": {
        -          "actionability": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "alternative_perspectives": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "contrarian_view": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "overlooked_factors": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "background_context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "indirect_market_effects": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "global_market_relevance": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "regional_market_impact": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "sector_implications": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "information_novelty": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "key_entities": {
        -            "items": {
        -              "properties": {
        -                "description": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "entity_type": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "name": {
        -                  "default": "",
        -                  "type": "string"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "market_relevance_summary": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "market_sentiment_alignment": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "ticker_analysis": {
        -            "items": {
        -              "properties": {
        -                "confidence": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "price_impact_prediction": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "reasoning": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "relevance_context": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "sentiment": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "ticker": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "ticker"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "timing_relevance": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "banner_image": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "category": {
        -    "type": "string"
        -  },
        -  "created_at": {
        -    "type": "string"
        -  },
        -  "earnings": {
        -    "anyOf": [
        -      {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "filing": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        -        "properties": {
        -          "accession_number": {
        -            "type": "string"
        -          },
        -          "event_date": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "exhibit_url": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "items": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "primary_item": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "items",
        -          "accession_number",
        -          "filed_at"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "insider": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        -        "properties": {
        -          "avg_price_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "insider_name": {
        -            "type": "string"
        -          },
        -          "insider_title": {
        -            "type": "string"
        -          },
        -          "is_10b5_1": {
        -            "type": "boolean"
        -          },
        -          "is_director": {
        -            "type": "boolean"
        -          },
        -          "is_officer": {
        -            "type": "boolean"
        -          },
        -          "is_ten_percent_owner": {
        -            "type": "boolean"
        -          },
        -          "late_filing": {
        -            "type": "boolean"
        -          },
        -          "shares": {
        -            "type": "string"
        -          },
        -          "side": {
        -            "type": "string"
        -          },
        -          "total_value_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "transaction_code": {
        -            "type": "string"
        -          },
        -          "transaction_date": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "side",
        -          "transaction_code",
        -          "shares",
        -          "is_10b5_1",
        -          "insider_name",
        -          "insider_title",
        -          "is_officer",
        -          "is_director",
        -          "is_ten_percent_owner",
        -          "transaction_date",
        -          "filed_at",
        -          "late_filing"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "ownership_form": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "read_time_minutes": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "relevance_score": {
        -    "type": "integer"
        -  },
        -  "search_match": {
        -    "anyOf": [
        -      {
        -        "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        -        "properties": {
        -          "context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "score": {
        -            "type": "number"
        -          },
        -          "terms_matched": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "score"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "source": {
        -    "type": "string"
        -  },
        -  "source_domain": {
        -    "type": "string"
        -  },
        -  "source_type": {
        -    "default": "",
        -    "type": "string"
        -  },
        -  "sources": {
        -    "anyOf": [
        -      {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "sources_count": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "story_id": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "summary": {
        -    "type": "string"
        -  },
        -  "tickers": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "time_published": {
        -    "type": "string"
        -  },
        -  "title": {
        -    "type": "string"
        -  },
        -  "uid": {
        -    "type": "string"
        -  },
        -  "url": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / items / items / required
        Removed value: -[
        -  "uid",
        -  "title",
        -  "url",
        -  "source",
        -  "source_domain",
        -  "summary",
        -  "category",
        -  "relevance_score",
        -  "time_published",
        -  "created_at"
        -]
      • removedOutput schema / properties / items / items / type
        Removed value: -"object"
    • Changedalphai_trending5 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "full",
        +  "description": "full (default): existing item format. compact: headlines, sources, times, tickers, scores and story/search metadata without summary or analysis. Prefer compact for polling; alphai_article(uid) expands an item.",
        +  "enum": [
        +    "full",
        +    "compact"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "analysis": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "actionability": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "alternative_perspectives": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "contrarian_view": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "overlooked_factors": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "background_context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "indirect_market_effects": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "global_market_relevance": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "regional_market_impact": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      },
        +                      "sector_implications": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "default": null
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "information_novelty": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "key_entities": {
        +                "items": {
        +                  "properties": {
        +                    "description": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "entity_type": {
        +                      "default": "",
        +                      "type": "string"
        +                    },
        +                    "name": {
        +                      "default": "",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "market_relevance_summary": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "market_sentiment_alignment": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "ticker_analysis": {
        +                "items": {
        +                  "properties": {
        +                    "confidence": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "price_impact_prediction": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "reasoning": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "relevance_context": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "sentiment": {
        +                      "anyOf": [
        +                        {
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "ticker": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "ticker"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "timing_relevance": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "banner_image": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "earnings": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "filing": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        +            "properties": {
        +              "accession_number": {
        +                "type": "string"
        +              },
        +              "event_date": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "exhibit_url": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "items": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "primary_item": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "items",
        +              "accession_number",
        +              "filed_at"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "insider": {
        +        "anyOf": [
        +          {
        +            "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        +            "properties": {
        +              "avg_price_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "filed_at": {
        +                "type": "string"
        +              },
        +              "insider_name": {
        +                "type": "string"
        +              },
        +              "insider_title": {
        +                "type": "string"
        +              },
        +              "is_10b5_1": {
        +                "type": "boolean"
        +              },
        +              "is_director": {
        +                "type": "boolean"
        +              },
        +              "is_officer": {
        +                "type": "boolean"
        +              },
        +              "is_ten_percent_owner": {
        +                "type": "boolean"
        +              },
        +              "late_filing": {
        +                "type": "boolean"
        +              },
        +              "shares": {
        +                "type": "string"
        +              },
        +              "side": {
        +                "type": "string"
        +              },
        +              "total_value_usd": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "transaction_code": {
        +                "type": "string"
        +              },
        +              "transaction_date": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "side",
        +              "transaction_code",
        +              "shares",
        +              "is_10b5_1",
        +              "insider_name",
        +              "insider_title",
        +              "is_officer",
        +              "is_director",
        +              "is_ten_percent_owner",
        +              "transaction_date",
        +              "filed_at",
        +              "late_filing"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "read_time_minutes": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "default": "",
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "summary": {
        +        "type": "string"
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "summary",
        +      "category",
        +      "relevance_score",
        +      "time_published",
        +      "created_at"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "description": "Opt-in feed projection. Expand ``uid`` with ``alphai_article``.\n\nOnly the two scalar analysis signals survive, at the top level. Summary,\nanalysis prose, images and SEC detail blocks are absent, not truncated.\nSearch evidence and Form 4 ownership remain so triage keeps its meaning.",
        +    "properties": {
        +      "actionability": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "category": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "information_novelty": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "ownership_form": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "relevance_score": {
        +        "type": "integer"
        +      },
        +      "search_match": {
        +        "anyOf": [
        +          {
        +            "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        +            "properties": {
        +              "context": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "terms_matched": {
        +                "anyOf": [
        +                  {
        +                    "type": "integer"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "required": [
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "source": {
        +        "type": "string"
        +      },
        +      "source_domain": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "type": "string"
        +      },
        +      "sources": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "sources_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "story_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "tickers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "time_published": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "title",
        +      "url",
        +      "source",
        +      "source_domain",
        +      "source_type",
        +      "time_published",
        +      "created_at",
        +      "tickers",
        +      "category",
        +      "relevance_score",
        +      "actionability",
        +      "information_novelty",
        +      "story_id",
        +      "sources_count",
        +      "sources",
        +      "ownership_form",
        +      "search_match"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / result / items / properties
        Removed value: -{
        -  "analysis": {
        -    "anyOf": [
        -      {
        -        "properties": {
        -          "actionability": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "alternative_perspectives": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "contrarian_view": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "overlooked_factors": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "background_context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "indirect_market_effects": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "global_market_relevance": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "regional_market_impact": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  },
        -                  "sector_implications": {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "default": null
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "information_novelty": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "key_entities": {
        -            "items": {
        -              "properties": {
        -                "description": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "entity_type": {
        -                  "default": "",
        -                  "type": "string"
        -                },
        -                "name": {
        -                  "default": "",
        -                  "type": "string"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "market_relevance_summary": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "market_sentiment_alignment": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "ticker_analysis": {
        -            "items": {
        -              "properties": {
        -                "confidence": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "price_impact_prediction": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "reasoning": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "relevance_context": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "sentiment": {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "default": null
        -                },
        -                "ticker": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "ticker"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "timing_relevance": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "banner_image": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "category": {
        -    "type": "string"
        -  },
        -  "created_at": {
        -    "type": "string"
        -  },
        -  "earnings": {
        -    "anyOf": [
        -      {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "filing": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC 8-K filing block (``source_type == \"sec_form8k\"`` items on\nthe news tools).\n\nA read-only projection of the 8-K sidecar\n(``apps.data.models.EightKEventModel``) — same fields and semantics as the\nREST ``/api/news/`` block (openapi.yaml: ``EightKFiling``): ``items`` is\nevery item code the filing carries (the ``item`` filter matches any of\nthem; empty for a header-only filing), ``primary_item`` the one that drove\nthe category, ``accession_number`` the id to cite, ``filed_at`` EDGAR's\nacceptance time, ``event_date`` the filing's own date of report and\n``exhibit_url`` the press-release exhibit the summary was built from.\nDates are ISO strings like the insider block; empty sidecar strings are\n``null``, never ``\"\"``.",
        -        "properties": {
        -          "accession_number": {
        -            "type": "string"
        -          },
        -          "event_date": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "exhibit_url": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "items": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "primary_item": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "items",
        -          "accession_number",
        -          "filed_at"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "insider": {
        -    "anyOf": [
        -      {
        -        "description": "Structured SEC Form 4 event block (``alphai_insider_news`` items only).\n\nAggregate of the news row's whole transaction group — same semantics as the\nREST ``/api/news/insider/`` block (openapi.yaml: ``InsiderEvent``): shares and\nvalue are GROUP sums (a 10b5-1 ladder is one event), ``avg_price_usd`` is\nvalue-weighted over priced tranches, ``is_10b5_1`` is the group OR, the\nlast fill dates the event. ``side`` is the signal label: buy (P) / sell (S)\n/ other (everything else, incl. D — sale to issuer, a buyback/redemption,\nnot an open-market disposition); the raw ``transaction_code`` rides along.\nMoney/share fields are decimal STRINGS (\"25000\", \"187.32\") — flat, precise,\nschema-simple; null when the filing prices no tranche.\n\n``filed_at`` is when EDGAR accepted the filing and ``late_filing`` marks the\nones that missed the SEC's two-business-day deadline; the rule lives in\n``_is_late_filing`` in ``repository.py`` (ported from the backend's\n``apps.insider.services.filing_lateness``). Field reference for both\nsurfaces: ``backend/openapi.yaml`` (``InsiderEvent``).",
        -        "properties": {
        -          "avg_price_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "filed_at": {
        -            "type": "string"
        -          },
        -          "insider_name": {
        -            "type": "string"
        -          },
        -          "insider_title": {
        -            "type": "string"
        -          },
        -          "is_10b5_1": {
        -            "type": "boolean"
        -          },
        -          "is_director": {
        -            "type": "boolean"
        -          },
        -          "is_officer": {
        -            "type": "boolean"
        -          },
        -          "is_ten_percent_owner": {
        -            "type": "boolean"
        -          },
        -          "late_filing": {
        -            "type": "boolean"
        -          },
        -          "shares": {
        -            "type": "string"
        -          },
        -          "side": {
        -            "type": "string"
        -          },
        -          "total_value_usd": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "transaction_code": {
        -            "type": "string"
        -          },
        -          "transaction_date": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "side",
        -          "transaction_code",
        -          "shares",
        -          "is_10b5_1",
        -          "insider_name",
        -          "insider_title",
        -          "is_officer",
        -          "is_director",
        -          "is_ten_percent_owner",
        -          "transaction_date",
        -          "filed_at",
        -          "late_filing"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "ownership_form": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "read_time_minutes": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "relevance_score": {
        -    "type": "integer"
        -  },
        -  "search_match": {
        -    "anyOf": [
        -      {
        -        "description": "Per-item evidence from the text path: ``score`` orders the page (cover\ndensity × recency; comparable within one response, not a probability),\n``terms_matched`` is set in broadened mode, ``context`` marks the matched\nwords in the summary with ``**``.",
        -        "properties": {
        -          "context": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "score": {
        -            "type": "number"
        -          },
        -          "terms_matched": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "score"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "source": {
        -    "type": "string"
        -  },
        -  "source_domain": {
        -    "type": "string"
        -  },
        -  "source_type": {
        -    "default": "",
        -    "type": "string"
        -  },
        -  "sources": {
        -    "anyOf": [
        -      {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "sources_count": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "story_id": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null
        -  },
        -  "summary": {
        -    "type": "string"
        -  },
        -  "tickers": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "time_published": {
        -    "type": "string"
        -  },
        -  "title": {
        -    "type": "string"
        -  },
        -  "uid": {
        -    "type": "string"
        -  },
        -  "url": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / result / items / required
        Removed value: -[
        -  "uid",
        -  "title",
        -  "url",
        -  "source",
        -  "source_domain",
        -  "summary",
        -  "category",
        -  "relevance_score",
        -  "time_published",
        -  "created_at"
        -]
      • removedOutput schema / properties / result / items / type
        Removed value: -"object"
  9. 2 tool updates
    • Addedalphai_stories
    • Addedalphai_story
  10. 1 tool update
    • Changedalphai_macro4 fields changed
      • addedOutput schema / description
        Added value: +"``alphai_macro``: the stories of the window under ``result`` (the key the\ntool always answered with, so existing clients read it unchanged) and, since\n2026-10-02, ``releases`` — the scheduled US releases of the same window with\ntheir coverage, newest first, then the ones due in the next 24 hours.\n\nAn agent asked at 08:49 ET on jobs day, found no story and concluded nothing\nhad come out; the release had, our stories were still arriving. An elapsed\nrelease with ``coverage == []`` says exactly that."
      • addedOutput schema / properties / releases
        Added value: +{
        +  "items": {
        +    "description": "One scheduled occurrence of a US macro release (``alphai_calendar``).\n\n``phase`` says only that the scheduled moment passed (``elapsed``), NOT\nthat the agency published — check ``schedule_status`` first. ``coverage``\nis present on elapsed occurrences: ``[]`` means the join ran and found\nnothing yet; ``None`` means upcoming (nothing to cover).",
        +    "properties": {
        +      "category": {
        +        "type": "string"
        +      },
        +      "country": {
        +        "type": "string"
        +      },
        +      "coverage": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "description": "One matched feed story for an elapsed calendar occurrence — a pointer,\nnot the article: follow up with ``alphai_article`` for the analysis.",
        +              "properties": {
        +                "relevance_score": {
        +                  "type": "integer"
        +                },
        +                "title": {
        +                  "type": "string"
        +                },
        +                "uid": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "uid",
        +                "title",
        +                "relevance_score"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "event_key": {
        +        "type": "string"
        +      },
        +      "has_sep": {
        +        "default": false,
        +        "type": "boolean"
        +      },
        +      "importance": {
        +        "type": "string"
        +      },
        +      "phase": {
        +        "type": "string"
        +      },
        +      "press_conference_at": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "reference_period": {
        +        "type": "string"
        +      },
        +      "release_stage": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "schedule_basis": {
        +        "type": "string"
        +      },
        +      "schedule_status": {
        +        "type": "string"
        +      },
        +      "scheduled_at": {
        +        "type": "string"
        +      },
        +      "source_url": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "uid": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "uid",
        +      "event_key",
        +      "title",
        +      "reference_period",
        +      "scheduled_at",
        +      "phase",
        +      "schedule_status",
        +      "schedule_basis",
        +      "importance",
        +      "category",
        +      "country",
        +      "source_url"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • removedOutput schema / x-fastmcp-wrap-result
        Removed value: -true
  11. 1 tool update
    • Changedalphai_insider_clusters1 field changed
      • addedOutput schema / properties / results / items / properties / buyers_detail / items / properties / reason
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "placement",
        +        "offering",
        +        "private"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
  12. 11 tool updates
    • Changedalphai_alerts_subscribe2 fields changed
      • addedInput schema / properties / ticker / maxLength
        Added value: +16
      • addedInput schema / properties / ticker / pattern
        Added value: +"^[A-Za-z0-9.\\-]+$"
    • Changedalphai_alerts_unsubscribe2 fields changed
      • addedInput schema / properties / ticker / maxLength
        Added value: +16
      • addedInput schema / properties / ticker / pattern
        Added value: +"^[A-Za-z0-9.\\-]+$"
    • Changedalphai_article1 field changed
      • addedInput schema / properties / uid / maxLength
        Added value: +64
    • Changedalphai_earnings2 fields changed
      • addedInput schema / properties / ticker / maxLength
        Added value: +16
      • addedInput schema / properties / ticker / pattern
        Added value: +"^[A-Za-z0-9.\\-]+$"
    • Changedalphai_insider_news2 fields changed
      • changedInput schema / properties / cursor / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 1024,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / ticker / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 16,
        +    "pattern": "^[A-Za-z0-9.\\-]+$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedalphai_news_search6 fields changed
      • changedInput schema / properties / cursor / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 1024,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / q / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 200,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / query / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 200,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / query / description
        Previous value: -"Full-text query over article titles, named entities and summaries (company names, people, topics, tickers); how it was read comes back in query_interpretation."New value: +"Full-text query over article titles, named entities and summaries (company names, people, topics, tickers), up to 200 characters; how it was read comes back in query_interpretation."
      • changedInput schema / properties / tickers / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "maxLength": 16,
        +      "pattern": "^[A-Za-z0-9.\\-]+$",
        +      "type": "string"
        +    },
        +    "maxItems": 50,
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / tickers / description
        Previous value: -"Restrict to news mentioning these tickers."New value: +"Restrict to news mentioning these tickers (up to 50 symbols; duplicates are ignored)."
    • Changedalphai_pair_analysis4 fields changed
      • addedInput schema / properties / ticker_a / maxLength
        Added value: +16
      • addedInput schema / properties / ticker_a / pattern
        Added value: +"^[A-Za-z0-9.\\-]+$"
      • addedInput schema / properties / ticker_b / maxLength
        Added value: +16
      • addedInput schema / properties / ticker_b / pattern
        Added value: +"^[A-Za-z0-9.\\-]+$"
    • Changedalphai_ticker_news3 fields changed
      • changedInput schema / properties / cursor / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 1024,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / ticker / maxLength
        Added value: +16
      • addedInput schema / properties / ticker / pattern
        Added value: +"^[A-Za-z0-9.\\-]+$"
    • Changedalphai_tickers2 fields changed
      • changedInput schema / properties / q / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 64,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / sector / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 64,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedfetch1 field changed
      • addedInput schema / properties / id / maxLength
        Added value: +64
    • Changedsearch2 fields changed
      • changedInput schema / properties / query / description
        Previous value: -"Natural-language search query."New value: +"Natural-language search query (up to 300 characters)."
      • addedInput schema / properties / query / maxLength
        Added value: +300
  13. 1 tool update
    • Changedalphai_radar1 field changed
      • changedOutput schema / properties / results / items / properties / event_context / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "cik": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "cluster_buys": {
        -        "default": [],
        -        "items": {
        -          "properties": {
        -            "buyers": {
        -              "type": "integer"
        -            },
        -            "evidence": {
        -              "items": {
        -                "properties": {
        -                  "accession_number": {
        -                    "type": "string"
        -                  },
        -                  "filed_at": {
        -                    "format": "date-time",
        -                    "type": "string"
        -                  },
        -                  "sec_url": {
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "accession_number",
        -                  "filed_at",
        -                  "sec_url"
        -                ],
        -                "type": "object"
        -              },
        -              "type": "array"
        -            },
        -            "evidence_truncated": {
        -              "type": "boolean"
        -            },
        -            "filings_count": {
        -              "type": "integer"
        -            },
        -            "known_at": {
        -              "format": "date-time",
        -              "type": "string"
        -            },
        -            "officer_director_buyers": {
        -              "type": "integer"
        -            },
        -            "pattern": {
        -              "const": "open_market",
        -              "default": "open_market",
        -              "type": "string"
        -            },
        -            "window_end": {
        -              "format": "date",
        -              "type": "string"
        -            },
        -            "window_start": {
        -              "format": "date",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "window_start",
        -            "window_end",
        -            "known_at",
        -            "buyers",
        -            "officer_director_buyers",
        -            "filings_count",
        -            "evidence",
        -            "evidence_truncated"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "cluster_buys_count": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "filings": {
        -        "default": [],
        -        "items": {
        -          "properties": {
        -            "accession_number": {
        -              "type": "string"
        -            },
        -            "event_date": {
        -              "anyOf": [
        -                {
        -                  "format": "date",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "default": null
        -            },
        -            "filed_at": {
        -              "format": "date-time",
        -              "type": "string"
        -            },
        -            "form": {
        -              "enum": [
        -                "8-K",
        -                "6-K"
        -              ],
        -              "type": "string"
        -            },
        -            "items": {
        -              "default": [],
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            "kind": {
        -              "anyOf": [
        -                {
        -                  "const": "earnings_release",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "default": null
        -            },
        -            "news_uid": {
        -              "type": "string"
        -            },
        -            "observed_at": {
        -              "format": "date-time",
        -              "type": "string"
        -            },
        -            "period_label": {
        -              "anyOf": [
        -                {
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "default": null
        -            },
        -            "primary_item": {
        -              "anyOf": [
        -                {
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "default": null
        -            },
        -            "sec_url": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "form",
        -            "accession_number",
        -            "filed_at",
        -            "observed_at",
        -            "sec_url",
        -            "news_uid"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "filings_count": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "reason": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "non_sec_symbol",
        -              "unknown_symbol",
        -              "missing_cik",
        -              "issuer_changed"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "status": {
        -        "enum": [
        -          "available",
        -          "unsupported",
        -          "unavailable"
        -        ],
        -        "type": "string"
        -      },
        -      "ticker": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "ticker",
        -      "cik",
        -      "status"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "cik": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "cluster_buys": {
        +        "default": [],
        +        "items": {
        +          "properties": {
        +            "buyers": {
        +              "type": "integer"
        +            },
        +            "evidence": {
        +              "items": {
        +                "properties": {
        +                  "accession_number": {
        +                    "type": "string"
        +                  },
        +                  "filed_at": {
        +                    "format": "date-time",
        +                    "type": "string"
        +                  },
        +                  "sec_url": {
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "accession_number",
        +                  "filed_at",
        +                  "sec_url"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            "evidence_truncated": {
        +              "type": "boolean"
        +            },
        +            "filings_count": {
        +              "type": "integer"
        +            },
        +            "known_at": {
        +              "format": "date-time",
        +              "type": "string"
        +            },
        +            "officer_director_buyers": {
        +              "type": "integer"
        +            },
        +            "pattern": {
        +              "const": "open_market",
        +              "default": "open_market",
        +              "type": "string"
        +            },
        +            "window_end": {
        +              "format": "date",
        +              "type": "string"
        +            },
        +            "window_start": {
        +              "format": "date",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "window_start",
        +            "window_end",
        +            "known_at",
        +            "buyers",
        +            "officer_director_buyers",
        +            "filings_count",
        +            "evidence",
        +            "evidence_truncated"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "cluster_buys_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "filings": {
        +        "default": [],
        +        "items": {
        +          "properties": {
        +            "accession_number": {
        +              "type": "string"
        +            },
        +            "event_date": {
        +              "anyOf": [
        +                {
        +                  "format": "date",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            },
        +            "filed_at": {
        +              "format": "date-time",
        +              "type": "string"
        +            },
        +            "form": {
        +              "enum": [
        +                "8-K",
        +                "6-K"
        +              ],
        +              "type": "string"
        +            },
        +            "has_article": {
        +              "default": false,
        +              "description": "An enriched article existed before the context cutoff. False on older snapshots without metadata.",
        +              "type": "boolean"
        +            },
        +            "items": {
        +              "default": [],
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            "kind": {
        +              "anyOf": [
        +                {
        +                  "const": "earnings_release",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            },
        +            "news_published": {
        +              "anyOf": [
        +                {
        +                  "format": "date-time",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Article publication time for its AlphAI URL."
        +            },
        +            "news_title": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Article title frozen at the context cutoff."
        +            },
        +            "news_uid": {
        +              "type": "string"
        +            },
        +            "observed_at": {
        +              "format": "date-time",
        +              "type": "string"
        +            },
        +            "period_label": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            },
        +            "primary_item": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            },
        +            "sec_url": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "form",
        +            "accession_number",
        +            "filed_at",
        +            "observed_at",
        +            "sec_url",
        +            "news_uid"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "filings_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "reason": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "non_sec_symbol",
        +              "unknown_symbol",
        +              "missing_cik",
        +              "issuer_changed"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "status": {
        +        "enum": [
        +          "available",
        +          "unsupported",
        +          "unavailable"
        +        ],
        +        "type": "string"
        +      },
        +      "ticker": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "ticker",
        +      "cik",
        +      "status"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Provides derived financial intelligence for AI agents, including insider activity analysis, earnings surprises, institutional moves, stock screening with a proprietary composite value score, and macro indicators.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Realtime financial context for AI agents: what changed, who is affected, and what to watch next. One suite covering news, events, guidance, filing changes, sentiment, stakeholders, and alerts. Information-efficient responses with evidence for every result. First-class point-in-time safety for backtests. Pairs well with web search and a market-data API. All data is our own.
    3
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Read-only, source-linked news intelligence for AI agents: search The Neural Ledger's stories, retrieve story details with citations and revision history, and resolve related entities and assets. It is an evidence layer, not a trading or execution service.
    8
    2
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.