# KOPR R161 — Comet Analyzer display-encoding release-gate report

**Base build:** `KOPR_CLEAN_BUILD_20260731_R160_COMET_ANALYZER_STYLE_EDITING_PERSISTENCE.zip`  
**Result:** `PASS_HEADLESS / RC`  
**Date:** 2026-08-01

## 1. Scope

R161 completes the qualification and distribution batch for the R158–R160
Comet Analyzer display-style feature. No scientific calculation or production
rendering algorithm was changed in this batch. The CLEAN code is functionally
the R160 implementation with an updated changelog; R161 adds QA gates, tests
and release evidence in the separate QA archive.

The qualified feature includes:

- `Comet colour / channel marker` encoding;
- `Channel colour / comet marker` encoding;
- hollow pre-perihelion and filled post-perihelion observations;
- neutral model curves with sparse comet markers in reverse mode;
- Comets, Data channels, Perihelion side and Formulae legend blocks;
- compact target style editing and dynamic channel Marker/Colour editing;
- atomic JSON persistence of confirmed overrides;
- a strict 15-marker capacity and deterministic 16-target fallback.

## 2. R161 QA additions

Added to the QA archive only:

```text
r161_comet_analyzer_display_encoding_release_gate.py
r161_comet_analyzer_qt_smoke.py
tests/test_r161_comet_analyzer_display_encoding_qt_state_machine.py
```

Updated QA metadata:

```text
README_QA.md
docs/CHANGELOG.md
validate_performance_release.py
SHA256SUMS.txt
```

The CLEAN archive contains none of the R161 test, benchmark or release-gate
scripts.

## 3. Deterministic headless release matrix

The R161 gate executes real Matplotlib artists using the production style
resolvers. All 12 checks passed:

```text
default_artist_encoding                 PASS
reverse_artist_encoding                 PASS
perihelion_fill                         PASS
reverse_formula_artist                  PASS
rendered_identity_legends               PASS
filter_palette_and_unknown_channel      PASS
reorder_preserves_identity              PASS
marker_capacity_and_fallback            PASS
persistence_fresh_instance              PASS
transactional_gui_contract              PASS
style_actions_are_view_only             PASS
qt_gate_artifacts_present               PASS
```

This validates actual artist colour, marker, marker face, formula `markevery`,
rendered-only legend content, known filter defaults, deterministic unknown
filter colour, stable target/channel identity after reordering, unique markers
through 15 targets, automatic default-mode fallback for 16 targets and exact
persistence restoration in a fresh state instance.

## 4. Test results

Focused R158–R161 suite:

```text
31 passed, 1 skipped
```

Cumulative R130–R161 Analyzer suite:

```text
234 passed, 2 skipped
```

The two skips are the real PyQt5 tests from R154 and R161. They were skipped
because the build host does not contain Python PyQt5 bindings.

Additional gates:

```text
R158 display-style domain gate        PASS
R159 display-encoding renderer gate   PASS
R160 style-editing/persistence gate   PASS
R161 deterministic gate               PASS_HEADLESS
aggregate performance validator       PASS
```

## 5. Qt qualification status

The following runtime state was confirmed on the build host:

```text
Xvfb available:       yes
PyQt5 Python binding: no
Qt offscreen run:     NOT RUN
Qt native run:        NOT RUN
```

The strict gate correctly fails with `qt_runtime_unavailable`; it does not
convert missing runtime coverage into a false PASS. Therefore this package is
an RC and is not labelled fully GUI release-qualified.

Required final commands on a Linux system with the application PyQt5 runtime:

```bash
QT_QPA_PLATFORM=offscreen \
python3 r161_comet_analyzer_display_encoding_release_gate.py --require-qt

python3 r161_comet_analyzer_qt_smoke.py --native
```

The first command must report `status: PASS`. The native run must be followed
by the visual checklist from the R158–R161 implementation plan.

## 6. Distribution validation

```text
Python syntax, CLEAN       98 files, 0 failures
Python syntax, QA          377 files, 0 failures
Markdown hygiene, CLEAN    PASS; 5 Markdown files
Markdown hygiene, QA       PASS; 12 Markdown files
CLEAN QA-artifact scan     PASS
CLEAN manifest             107/107 PASS
QA manifest                432/432 PASS
CLEAN ZIP integrity        PASS
QA ZIP integrity           PASS
```

Archive SHA-256:

```text
57818245b9631583d2465ca18d5a9e3066e4fc292a212e8c3777bc1c84f3962e  KOPR_CLEAN_BUILD_20260801_R161_COMET_ANALYZER_DISPLAY_ENCODING_GATE_RC.zip
0f0efd5845152255bde9a3fc2a748ecaa8eef3cdc29e4fa98f03bc585f02822d  KOPR_QA_BUILD_20260801_R161_COMET_ANALYZER_DISPLAY_ENCODING_GATE_RC.zip
```

## 7. Completion statement

R161 is complete as an implementation, deterministic renderer/domain
qualification and clean RC distribution batch. The only outstanding release
condition is execution of the supplied real-PyQt5 offscreen gate and one native
Linux visual smoke run on a host where PyQt5 is installed.
