## CS Remote — v0.8.99
### New Features
**General patch set (107 patches)** A new general-purpose calibration patch set replaces the earlier Universal set. It covers the full 3D LUT space efficiently with a grey ramp, primary and secondary ramps (R, G, B, C, M, Y), ColorChecker Classic 2014 patches, skin tone references, and supplementary scene patches, closing with an 18% neutral grey.
- Grey ramp uses LUT-offset spacing (1023/21 steps) to avoid measuring only 17 or 33-node LUT points
- CV 767 included in all primary and secondary ramps — approximately 981 nits in PQ, the conventional 1000 nit reference level
- ColorChecker Classic 2014 values derived from X-Rite reference LAB (D50) via Bradford D50→D65 chromatic adaptation — correct colorimetric values independent of any specific display measurement
- Four skin tone reference patches defined as LAB values and adapted to each gamut
**Gamut selector for General patch set** Selects the colour encoding for ColorChecker and skin tone patches: BT.709, P3-D65, or BT.2020. Ramp and scene patches are gamut-agnostic and unaffected by this selection.
**Probe Match patch set (14 patches)** RGBW at 75%, 95%, and 100%, opening with black and closing with 50% mid grey. Designed for probe-to-probe matching workflows.
**Anisometric delivery for all patch sets** Patch Order (Sequential / Anisometric) is now available for Gamut Rings, Ramp, and Mastering in addition to Cube and General. Anisometric ordering varies luminance and chromaticity between consecutive patches to reduce ABL-induced measurement instability on consumer panels.
**Per-patch timing in log** Each patch entry in the log now shows elapsed time since the previous patch, reflecting the probe measurement round-trip. Useful for identifying slow measurements and diagnosing probe behaviour.
**ColourSpace CSV export format** Exported CSV files now use the ColourSpace import format: `Patch,R,G,B,Percentage` header with integer code values and a percentage column based on the dominant channel relative to the range maximum.
### Improvements
**Connection resilience**
- TCP keepalive enabled on the ColourSpace connection (10-second period)
- Read deadline (60 seconds) and write deadline (10 seconds) applied to all patch delivery
- Distinct log messages for timeout, clean disconnect, and transport error
- `ErrServerDisconnect` sentinel distinguishes ColourSpace-initiated disconnects from network drops
**Error presentation**
- Licence activation errors show friendly messages rather than raw JSON from the Polar API
- Version check errors in the About dialog are user-readable with a tap-to-copy detail option
- Format string bug fixed in error binding listener
**Port validation** Port entries in both fields are validated as integers in the range 1–65535, with a clear error message on invalid input.
**Licence sync** Background licence validation now uses local signature verification rather than re-activating against the Polar server, preventing "activation limit reached" errors on already-activated devices. The licence timestamp is refreshed on each successful validation. Opening the About dialog also triggers a sync.
### Fixes
- Ramp "Steps" field left edge now aligns correctly with form fields above it
---