v0.10.3
Changes since v0.10.2
Features
- Multi-day timeshare protocol: Adds
fetchTimeShareRange, multi-day request/response DTOs, andTimeShareRangeCapabilityfor querying timeshare data by end trading date and trading-day count. - Multi-day timeshare storage: Adds immutable
TimeShareRangeStore,TimeShareDay, andTimeShareRangemodels that retain each day'stradingDate,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.setInlineDatanow 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.externalto mark Core and Vue dependencies as external, fixing Rolldown resolution of the Coremarket-datasubpath. - Protocol Provider test repair: Fixes Provider tests that still referenced the removed
MarketDataV1Transporttype.
Architecture & Refactoring
- Remove the legacy Fetcher compatibility layer: Chart runtime now loads K-line and timeshare data exclusively through
MarketDataProviderandSourceRouter; legacy registries, routers, adapters, and Fetcher implementations are removed. - Breaking API change: Removes
dataFetcher,setDataFetcher,routerDataFetcher, and related Fetcher exports; migrate toMarketDataProvider. - 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
setInlineDatafrom sharedDataBufferLike; 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
V1to generic names;V1remains only for wire metadata, protocol versions, and/api/v1paths. - Reuse domain capability models: Protocol models now reuse domain
InstrumentCapabilitiesand 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.