Skip to content

v0.10.3

Changes since v0.10.2

Features

  • Multi-day timeshare protocol: Adds fetchTimeShareRange, multi-day request/response DTOs, and TimeShareRangeCapability for querying timeshare data by end trading date and trading-day count.
  • Multi-day timeshare storage: Adds immutable TimeShareRangeStore, TimeShareDay, and TimeShareRange models that retain each day's tradingDate, preClose, and points while deriving the existing flat render projection.
  • Timeshare range capabilities: Providers, sources, and instruments can declare timeShareRange.maxTradingDays, allowing the UI to expose multi-day timeshare only when supported.
  • Multi-source mock catalog: The Mock Provider now supplies searchable instruments covering the unified instrument model and capability declarations.
  • Comparison legend instrument names: Comparison legend rows show the symbol and instrument name, such as 601360 三六零, and expose the name to external legend slots.

Fixes

  • Timeshare state and redraw synchronization: Fixes timeshare data, previous-close baselines, and chart redraws becoming out of sync.
  • Timeshare inline-data baseline: TimeShareBuffer.setInlineData now writes data and the previous close together, preventing reuse of a previous range's baseline.
  • K-line overlays in comparison view: Hides the latest-price dashed line and O/H/L/C/Vol legend row so normalized comparison series do not display irrelevant primary K-line data.
  • Vue library build externals: Uses Vite 8 rolldownOptions.external to mark Core and Vue dependencies as external, fixing Rolldown resolution of the Core market-data subpath.
  • Protocol Provider test repair: Fixes Provider tests that still referenced the removed MarketDataV1Transport type.

Architecture & Refactoring

  • Remove the legacy Fetcher compatibility layer: Chart runtime now loads K-line and timeshare data exclusively through MarketDataProvider and SourceRouter; legacy registries, routers, adapters, and Fetcher implementations are removed.
  • Breaking API change: Removes dataFetcher, setDataFetcher, routerDataFetcher, and related Fetcher exports; migrate to MarketDataProvider.
  • Atomic data snapshots: Active Buffer switches publish key, data, loading, range, and previous close together through applyActiveBufferSnapshot, eliminating transient inconsistencies from field-level writes.
  • Buffer contract consolidation: Removes setInlineData from shared DataBufferLike; K-line and timeshare Buffers now define their own structured write contracts, with an explicit null-key snapshot for no active Buffer.
  • De-versioned protocol naming: Renames Transport, Provider Factory, and rejection-code types/factories from V1 to generic names; V1 remains only for wire metadata, protocol versions, and /api/v1 paths.
  • Reuse domain capability models: Protocol models now reuse domain InstrumentCapabilities and related capability types, reducing duplicate structures and cross-layer conversions.
  • Framework binding cleanup: Vue, React, Angular, Web Component, Electron, and AI runtime remove legacy Fetcher controller fields, mocks, and exports to align with the unified Provider contract.
  • Latest-price line mode projection: Registers the latest-price dashed line as an @Indicator; dataViews: ['kline'] and the system mode instance now control layer visibility.

Documentation

  • Multi-day timeshare and state design docs: Adds design decisions for multi-day timeshare storage, timeshare StateKernel ownership, and legacy Fetcher removal.
  • Provider documentation and cross-framework compatibility: Updates MarketDataProvider docs, data package README, root README, props fragments, and compatibility guidance to remove legacy Fetcher configuration.
  • Code review skill: Adds code review guidelines covering state consistency, layer boundaries, model contracts, and change propagation.

On this page