R187 final Comet Analyzer integration
R187 is the historical cumulative baseline for the completed Analyzer/Comparison merger remediation. It added no scientific calculation or user-data transformation; it qualified the one-workspace architecture that later Theta releases continue to build on.
src/kopr/; use the current package/API policy for imports and extension work.1..N state ownership
- returns and formula documents are target-scoped;
- channel visibility and Fit Groups are global workspace policy;
- Independent fit is valid for 1..N targets;
- Shared
nis available only for two or more compatible targets; - formula editors navigate the active target while validation commits all selected target documents atomically.
Current range policy over the historical integration baseline
The historical integration established observation-owned automatic X and cached Auto range. Current behavior preserves that AUTO rule while adding explicit USER-X model extrapolation bounded to the selected apparition. X and Y edit intent are independent; manual X with untouched Y can derive Y from observations and prepared model points in the requested interval, while explicit manual Y remains authoritative.
Light Curve Scenario boundary
R183 defines one portable .kopr-lc.json scenario for 1..N targets. R184 requires transactional GUI/runtime restore: validation completes before the restored workspace replaces the committed state.
The scenario path reuses the current typed target, formula, channel and fit architecture; it is not a legacy Comparison runtime.
Typed-target cleanup
Current target loading is typed and immutable. The active production route does not use type_codes or an active self.script. This prevents historical script-shaped state from becoming a parallel source of target identity or behavior.
Compatibility and migration
wanalyzer.py and wcomparison.py are deprecated aliases to the canonical implementation. legacy_comparison_import.py is a one-way migration-only parser and must remain isolated from current runtime state, scenario loading and release identity.
R187 release gate
r187_comet_analyzer_final_integration_release_gate.py composes the current R181–R186 component gates and checks the cutover, automatic Y envelope, Auto range, scenario contract and restore, 1..N unification, typed-target cleanup and current terminology.
| Component | Source-reported result |
|---|---|
| Cumulative cutover | PASS |
| R181 automatic Y envelope | PASS |
| R182 Auto range | PASS |
| R183 scenario contract | PASS |
| R184 scenario GUI/runtime | PASS |
| R185 1..N unification | PASS |
| R186 typed-target cleanup | PASS |
| R187 final integration | PASS |
Qualification boundary
The R187 baseline regression suite reported 384 passed, 3 skipped and 0 failed. The skipped modules were the real PyQt5 gates from R154, R161 and R179. R187 therefore qualified as PASS_HEADLESS, not as a complete native GUI qualification.
R135–R187 behavioral gates are historical baseline evidence. Later Theta behavior is documented by its own focused source reports and must not be inferred from the R187 gate alone.
Current follow-up status
- The Marcus
d_90GUI unit error is resolved:d_90is dimensionless and nodegsuffix is shown. - Current Formulae parameter rows align with the formula/comet identity rather than using child indentation.
- The current sidebar/Settings organization is the post-localization layout documented in the user guide; the superseded intermediate GUI layout is not a current contract.
Other historical deferred design questions remain historical evidence unless separately implemented and documented.
Evidence
R187 final integration report · Compact reference · Scenario user guide