KOPR Comet Analyzer final integration — R187 compact reference Current runtime One Comet Analyzer tab One wlightcurves.WLightCurves implementation One WLIGHTCURVES_POLICY Immutable typed targets and datasets One workspace for 1..N comets State ownership Target-scoped: returns and formulas Global: channel visibility and Fit Groups Independent fit: 1..N targets Shared n: 2+ compatible targets Formula editors: active-target navigation, all-target atomic validation Automatic range X: visible observations only Y: observations + model/formula/Bortle inside automatic X Auto range: cached view command Scenarios Portable suffix: .kopr-lc.json One schema for 1..N targets Transactional restore Compatibility wanalyzer.py / wcomparison.py: deprecated aliases legacy_comparison_import.py: one-way migration only No active type_codes or self.script runtime state Qualification R187: PASS_HEADLESS Current Analyzer suite: 384 passed, 3 skipped, 0 failed Pending real PyQt5 gates: R154, R161, R179 Deferred Remove incorrect deg suffix from dimensionless Marcus d_90 Add explicit Legacy pooled-fit preset Decide generic/clear/unfiltered CCD policy