feat(market-implications): add transmission chain to implication cards (#2439)

Models the causal path from geopolitical event to price impact as a
2-4 node chain on each card. Each node has a label, impact_type, and
logic sentence. Nodes are tap/click-expandable inline.

- Proto: add TransmissionNode message + field 10 on MarketImplicationCard
- Seeder: prompt addition + VALID_IMPACT_TYPES validation (>=2 node gate)
- Handler: map transmission_chain snake_case -> transmissionChain camelCase
- Client: add normalizeCard() to handle both bootstrap (snake_case) and
  API (camelCase) paths; applied at both data entry points
- Renderer: renderChain() with arrow-separated nodes; delegated click
  handler collapses same node, replaces on different node click
- Tests: 4 cases covering snake/camel conversion, absent field default,
  handler backward-compat
This commit is contained in:
Elie Habib
2026-03-28 21:17:41 +04:00
committed by GitHub
parent e257502494
commit e43292b057
10 changed files with 254 additions and 9 deletions

View File

@@ -1834,6 +1834,19 @@ components:
type: string
driver:
type: string
transmissionChain:
type: array
items:
$ref: '#/components/schemas/TransmissionNode'
TransmissionNode:
type: object
properties:
node:
type: string
impactType:
type: string
logic:
type: string
GetSocialVelocityRequest:
type: object
GetSocialVelocityResponse: