# v0.10.3

> Changes since v0.10.2

Source: https://kcq.nebutra.com/docs/changelog/v0-10-3


Features [#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 [#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 [#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 [#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.
