# KOPR R84–R93 – souhrnné zadání pro aktualizaci dokumentace

**Výchozí stav:** R83 WCCD observation-transition hotfix  
**Cílový dokumentovaný stav:** R93 WCCD helper GUI-thread handoff hotfix  
**Datum:** 2026-07-28  
**Charakter dokumentu:** kumulativní zadání pro úpravu uživatelské, vědecké a vývojářské dokumentace; bez změny produkčního kódu.

---

## 1. Cíl dokumentační aktualizace

Dokumentace musí sjednotit změny R84–R93 do jednoho aktuálního popisu KOPRu. Nemá pouze přidat deset oddělených historických poznámek, ale především správně popsat **současné chování R93**.

Nejdůležitější témata:

1. nový interní gravitační N-body propagátor komet s DE440s a DOP853;
2. automatická aktivace N-body od R92 bez povinného validačního certifikátu;
3. řízený a viditelný fallback na původní efemeridové cesty;
4. diagnostika skutečně použitého efemeridového modelu;
5. plnohodnotné WCCD měření z jediného comet stacku;
6. změna dialogu **New CCD/DSLR observation**;
7. oprava zamrznutí Automatic Comet Finderu při přechodu z workeru do potvrzovacího dialogu.

Dokumentace nesmí vydávat N-body mechanismus za „full precision“ ani slibovat univerzální subarcsecond shodu s JPL Horizons. Cílem změny je **omezit velké poziční chyby dvoutělesové propagace**, zejména při větším časovém odstupu od epochy oskulujících elementů.

---

## 2. Autoritativní současné chování v R93

### 2.1 Výběr interního efemeridového modelu

Běžná aplikační cesta KOPRu od R92 automaticky požaduje N-body model, pokud jsou současně dostupné:

- čitelný lokální kernel `de440s.bsp`;
- knihovna `jplephem`;
- SciPy s `solve_ivp`;
- pro konkrétní kometu použitelná epocha oskulujících elementů.

Validační certifikát zavedený v R90 již **není podmínkou spuštění ani uživatelského testování**. Zůstává pouze jako volitelný nástroj pro kontrolované vědecké porovnání proti lokálně připravenému corpus JPL Horizons.

Běžný fallbackový řetězec je:

```text
DE440s N-body
→ DE440s two-body
→ legacy analytic
```

Fallback se smí použít pouze při definované provozní nebo konfigurační chybě. Neočekávaná programátorská chyba se nesmí skrýt jako méně přesný výsledek.

### 2.2 Jak uživatel ověří skutečně použitý model

Před otevřením pozorování lze v kořenovém adresáři KOPRu spustit:

```bash
python3 check_nbody_status.py
```

Při dostupném runtime má být výsledkem například:

```text
KOPR application ephemeris model: nbody
Status: activated
Reason: automatic_runtime_available
```

Při konkrétním výpočtu KOPR vypisuje do terminálu skutečně požadovaný a skutečně použitý model, například:

```text
[KOPR ephemeris] requested=nbody; used=nbody; source=DE440s N-body (automatic); selection=automatic_runtime_available; trajectory_cache=miss; trajectory_action=integrated_forward
```

Při fallbacku musí být vidět použitý model i důvod, například:

```text
[KOPR ephemeris] requested=nbody; used=two_body; source=DE440s two-body fallback (...); fallback_reason=...
```

Automatic Comet Finder zobrazuje použitý efemeridový engine také v potvrzovacím dialogu u zdroje očekávané polohy, například:

```text
internal KOPR ephemeris (DE440s N-body (automatic))
```

Dokumentace musí zdůraznit, že samotná podobnost nebo rozdíl výsledného offsetu není spolehlivým důkazem, zda N-body proběhlo. Autoritativní je provenance a diagnostický výpis.

### 2.3 Přímé nízkoúrovňové API

Pro regresní kompatibilitu zůstává výchozí hodnota nízkoúrovňových funkcí `two_body`, například:

```python
comephem.ephem.compute(..., comet_model="two_body")
alb3.comet_radec_de440(..., comet_model="two_body")
```

Automatický výběr modelu používá běžná aplikační cesta `compute_application()`. Dokumentace musí jasně rozlišovat:

- **aplikační výchozí chování:** automatický pokus o N-body;
- **nízkoúrovňové API:** zachovaný explicitní/defaultní `two_body` kontrakt pro kompatibilitu a regresní testy.

### 2.4 Světelný čas a souřadnicová geometrie

Při DE440s cestě:

- Země zůstává v čase příjmu světla;
- kometa je vyhodnocena v retardovaném čase emise `t − LT`;
- finální RA, Dec, heliocentrická i geocentrická vzdálenost patří ke stejnému konvergovanému okamžiku emise;
- numerická integrace používá TDB;
- oskulující epocha z MPC je převedena z TT na TDB;
- interní dynamický rámec je heliocentrická ekliptika J2000, planetární stavy jsou z DE440s převedeny z ICRF do stejného rámce.

Stelární aberace se do výsledku určeného pro astrometrii/WCS nepřidává.

### 2.5 Rozsah N-body modelu

Výchozí perturbery:

- Merkur;
- Venuše;
- Země;
- Měsíc;
- Mars;
- barycentrum Jupiterova systému;
- barycentrum Saturnova systému;
- barycentrum Uranova systému;
- barycentrum Neptunova systému.

Silový model obsahuje centrální gravitaci Slunce a přímý i nepřímý heliocentrický člen každého perturberu. Integrace používá SciPy DOP853 s relativním časem od epochy elementů a hustým výstupem trajektorie.

Současný model nezahrnuje:

- negravitační kometární parametry `A1/A2/A3`;
- relativistické korekce;
- asteroidální perturbery;
- obecnou záruku shody s orbitálním řešením Horizons.

Tyto limity musí být uvedeny v odborné/vývojářské dokumentaci, nikoli nutně v hlavním rychlém návodu.

### 2.6 Cache a provenance

N-body používá omezenou session LRU cache trajektorií. Cache drží samostatné husté řešení:

- dopředu od epochy;
- dozadu od epochy.

Identita cache zahrnuje přesná vstupní orbitální data, epochu, kernel, perturbery, gravitační parametry a numerické tolerance. Dvě aparice stejné komety s odlišným elementovým řádkem se nesmějí zaměnit.

Provenience konkrétní efemeridy uchovává zejména:

- požadovaný model;
- skutečně použitý model;
- fallbackový řetězec a jeho důvod;
- stav cache;
- novou integraci nebo opětovné použití dense output;
- perturbery;
- světelný čas a počet iterací.

### 2.7 WCCD s jediným comet stackem

Od R91 je samostatný Stars stack nepovinný nejen jako nouzový zdroj pixelů, ale jako plnohodnotná logická role.

Pokud uživatel:

- vybere Comet stack a Stars ponechá prázdné; nebo
- zvolí do obou polí stejný FITS,

WCCD vytvoří:

```text
Comet role → zvolený FITS
Stars role → stejný FITS jako comet_fallback
```

FITS se fyzicky načte pouze jednou. Obě role mohou sdílet neměnná obrazová data, hlavičku a saturation mask, ale musí mít oddělený mutable view-state pro anotace, katalogové značky, centroidy a měření.

Obě tlačítka **Comet** a **Stars** zůstávají aktivní. Tooltip Stars role uvádí použití Comet fallbacku. Auto Star Measure používá logickou Stars roli a Automatic Comet Finder dostává nenulový Stars obraz a hlavičku.

Skutečná dvojice dvou různých souborů nadále prochází původními kontrolami `STACKTYP`, expozice, filtru, geometrie a `PAIRFILE`.

### 2.8 Dialog New CCD/DSLR observation

Aktuální pořadí polí:

1. **Comet stack**
2. **Stars stack (optional)**
3. **Comet designation**

Pole Comet designation:

- používá společný normalizátor;
- může se automaticky doplnit z FITS `OBJECT`;
- převádí hodnotu s běžným jménem na canonical designation, například `10P/Tempel 2` → `10P`;
- normalizuje Unicode pomlčky a podporované oddělovače;
- nepřepisuje ručně upravenou hodnotu při dalším Browse;
- rozlišuje neplatnou syntaxi od platného designation bez lokálních orbitálních elementů;
- zapisuje canonical hodnotu ještě před přijetím dialogu.

Cancel ani validační chyba nesmějí částečně nahradit stávající observation.

### 2.9 Automatic Comet Finder a Auto Star Measure – GUI vlákna

R93 opravuje stav, kdy finder dokončil ranking, progress dosáhl 100 %, ale potvrzovací dialog se neotevřel a aplikace přestala reagovat.

Aktuální chování:

- numerická práce běží mimo GUI vlákno;
- progress, dokončení, chyba a cleanup jsou předávány přes QObject-bound `pyqtSlot` přijímače;
- potvrzovací Qt/Matplotlib dialog vzniká výhradně v hlavním GUI vlákně;
- dokončený progress dialog se skryje synchronně před přípravou review okna;
- stejné bezpečné předání bylo aplikováno i na Automatic Star Measure;
- ochrana proti opožděnému výsledku starší observation zůstává zachována.

Tato změna nemění ranking kandidátů, N-body výpočet, fotometrii ani centroidní algoritmus.

---

## 3. Historický přehled R84–R93 pro changelog a vývojářskou dokumentaci

### R84 – zmrazený regresní základ R83

- Přidána deterministická sada původních two-body a legacy efemeridových výstupů.
- Zamrazeny RA, Dec, `r`, `delta`, vzdálenost Země–Slunce, magnituda a veřejný kontrakt.
- Pokryty eliptické, téměř parabolické, hyperbolické a retrográdní případy včetně přechodu RA 0/24 h.
- Produkční výpočet nebyl změněn.

### R85 – stavový vektor v epoše oskulujících elementů

- Přidán `comet_nbody.py`.
- MPC elementy uchovávají epochu TT, perihelový JD a stabilní SHA-256 elementového řádku.
- Přidán analytický převod eliptických, parabolických a hyperbolických elementů na heliocentrickou polohu a rychlost v epoše.
- Veřejná efemerida zůstala odpojena.

### R86 – planetární stavy DE440s a Cowellova síla

- Přidány heliocentrické stavy Merkuru až Neptunu, samostatné Země a Měsíce.
- Přidán převod ICRF → ekliptika J2000.
- Přidány jednotné gravitační parametry a Cowellova akcelerace s přímým a nepřímým členem.
- Veřejná RA/Dec cesta zůstala beze změny.

### R87 – DOP853 propagátor

- Přidána dopředná i zpětná integrace šestiprvkového stavu.
- Použit relativní čas od epochy, samostatné absolutní tolerance polohy a rychlosti a `dense_output=True`.
- Nulové perturbace byly ověřeny proti analytické dvoutělesové dráze.
- Propagátor ještě nebyl veřejně zapojen.

### R88 – explicitní N-body ve světelném čase

- N-body byl poprvé zapojen jako explicitní `comet_model="nbody"`.
- Přidán TT→TDB bridge a numerická light-time smyčka.
- Výchozí model zůstal `two_body`, bez GUI volby.
- N-body chyba se v této dávce ještě nepřeváděla na tichý fallback.

### R89 – cache, řízený fallback a provenance

- Přidána session LRU cache forward/backward trajektorií.
- Přidán řízený řetězec N-body → two-body → legacy.
- Přidána detailní provenance použitého modelu, fallbacku, cache a light-time.
- Neočekávané programátorské chyby se neskrývají.

### R90 – nástroj externí validace

- Přidán offline nástroj pro porovnání two-body a N-body proti lokálnímu corpus Horizons.
- Přidány metriky medián, P90, P95, maximum a počty nad 30/60/300″.
- Původní R90 runtime vyžadoval certifikát; tento aktivační návrh byl v R92 nahrazen.
- Dokument `NBODY_R90_VALIDATION.md` zůstává platný jako volitelný validační postup, nikoli jako podmínka běhu.

### R91 – WCCD single-stack fallback a dialog

- Jediný Comet FITS nyní vytváří plnohodnotné role Comet i Stars bez druhého načtení.
- Stejná cesta v obou polích se normalizuje na fallback.
- Role sdílejí obrazová data, ale ne mutable view-state.
- Změněno pořadí polí New observation a sjednocena validace designation.

### R92 – automatická aktivace N-body

- Opraveno faktické zablokování N-body certifikátovou podmínkou.
- Aplikační cesta automaticky žádá N-body při dostupném runtime.
- Přidán `check_nbody_status.py`, terminálová provenance a označení engine v Automatic Comet Finderu.
- Certifikát zůstal pouze jako volitelný vědecký validační artefakt.

### R93 – bezpečný GUI-thread handoff helperů

- Opraveno zamrznutí po dokončení candidate ranking na 100 %.
- Worker signály jsou připojeny na QObject-bound `pyqtSlot` metody hlavního WCCD objektu.
- Review dialog, progress a result commit probíhají v GUI vlákně.
- Stejná preventivní oprava byla provedena u Automatic Star Measure.

---

## 4. Konkrétní dokumenty k úpravě

### 4.1 `README.md`

#### Povinné změny

1. Na úplný začátek přidat sekci **R93 current cumulative state**.
2. Sloučit uživatelsky důležité informace R91–R93:
   - automatické N-body;
   - kontrola přes `check_nbody_status.py`;
   - viditelný fallback;
   - single-stack WCCD;
   - oprava 100% finder freeze.
3. Historickou sekci R90 označit jako **superseded by R92 runtime selection**.
4. Odstranit nebo přepsat formulaci, že běžná aplikace potřebuje validační certifikát.
5. Zachovat informaci, že přímé API má pro kompatibilitu default `two_body`.
6. Přidat stručnou větu, že DE440s ani Astrometry.net indexy nejsou v archivu.

#### Doporučený nový úvod

```markdown
## R93 current cumulative state

KOPR now automatically requests its internal DE440s Cowell-DOP853 N-body
comet ephemeris whenever a readable local `de440s.bsp`, SciPy and `jplephem`
are available. Per-comet operational failures follow the visible controlled
fallback `N-body -> DE440s two-body -> legacy`. Run
`python3 check_nbody_status.py` to inspect the local runtime selection; the
terminal and Automatic Comet Finder confirmation dialog report the engine
actually used.

WCCD can open a Comet stack without a separate Stars stack. The same FITS is
loaded once and exposed as separate Comet and Stars logical roles with
independent annotations and view state. R93 also ensures that Automatic Comet
Finder and Automatic Star Measure return from worker threads through the main
Qt GUI thread, preventing the former 100% progress-dialog freeze.

The N-body objective is to reduce large two-body propagation errors. KOPR does
not claim universal subarcsecond or full-precision agreement with JPL Horizons.
```

### 4.2 `docs/CHANGELOG.md`

Přidat položky R84–R93 v sestupném pořadí. Doporučené texty:

```markdown
## R93 — WCCD helper GUI-thread handoff hotfix (2026-07-28)

- Routed Automatic Comet Finder and Automatic Star Measure worker completion,
  progress, failure and cleanup through QObject-bound `pyqtSlot` receivers in
  the main WCCD GUI thread.
- Fixed the freeze where ranking reached 100% but the Qt/Matplotlib candidate
  confirmation window did not open.
- Preserved cancellation, stale-result rejection, numerical ranking, N-body,
  centroiding and photometry behavior.

## R92 — N-body automatic activation and visible provenance (2026-07-28)

- Normal application calls now request DE440s Cowell-DOP853 N-body
  automatically when a readable local kernel, SciPy and `jplephem` are
  available; a validation certificate no longer blocks runtime use.
- Added `check_nbody_status.py`, deduplicated terminal provenance and the actual
  internal ephemeris engine label in Automatic Comet Finder confirmation.
- Retained controlled `N-body -> DE440s two-body -> legacy` fallback and the
  direct low-level `two_body` API default.

## R91 — WCCD single-stack fallback and New observation dialog (2026-07-28)

- A missing or identical Stars stack now creates a full Stars logical role from
  the already loaded Comet FITS without duplicate I/O or image-array copying.
- Comet and Stars share immutable source data but retain independent mutable
  view and annotation state; genuine two-file pairs retain full pair checks.
- Reordered New observation fields to Comet stack, optional Stars stack and
  Comet designation; unified designation autofill, canonicalisation and local-
  elements validation.

## R90 — N-body validation utility (2026-07-28)

- Added an offline local-Horizons corpus comparator with spherical separations,
  median/P90/P95/maximum metrics and large-error counts above 30/60/300 arcsec.
- Added exact corpus, kernel and force-model identity checks. The original R90
  certificate-gated runtime activation was superseded by R92; the utility
  remains available for optional scientific validation.

## R89 — N-body cache, controlled fallback and provenance (2026-07-28)

- Added a bounded session LRU cache with independent forward and backward dense
  DOP853 trajectories keyed by exact orbital and force-model identity.
- Added controlled operational fallback and detailed requested/used-model,
  cache, light-time and fallback provenance without hiding programming errors.

## R88 — Explicit N-body light-time integration (2026-07-28)

- Connected the numerical comet trajectory to the existing DE440s down-leg
  light-time calculation through explicit `comet_model="nbody"`.
- Added TT-to-TDB conversion of the osculating epoch and evaluated the comet at
  retarded emission time while Earth remains at reception time.

## R87 — DOP853 Cowell trajectory propagator (2026-07-28)

- Added forward/backward six-state Cowell integration using relative time,
  separate position/velocity tolerances and dense output.
- Verified zero-perturber parity with the analytical conic, reversibility and
  tolerance convergence without changing public RA/Dec.

## R86 — DE440s planetary states and Cowell force foundation (2026-07-28)

- Added heliocentric DE440s states for Mercury through Neptune plus separate
  Earth and Moon states, including ICRF-to-ecliptic-J2000 conversion.
- Added central-Sun and direct/indirect third-body Cowell acceleration terms.

## R85 — Osculating element-epoch state vector (2026-07-28)

- Added analytical elliptic, parabolic and hyperbolic position/velocity state
  construction at the MPC osculating epoch.
- Retained the exact element line, TT epoch and stable SHA-256 identity for later
  trajectory caching.

## R84 — Frozen R83 ephemeris regression baseline (2026-07-28)

- Added deterministic frozen two-body and legacy RA/Dec and distance fixtures,
  including elliptic, near-parabolic, hyperbolic, retrograde and RA-wrap cases.
- Changed no production ephemeris calculation; this baseline protects all later
  N-body work from accidental regressions.
```

### 4.3 `docs/SCIENTIFIC_COMPACT_USER_GUIDE.md`

#### Sekce „Internal comet ephemeris and light-time“

Stávající text doplnit nebo nahradit tak, aby popisoval R93, nikoli pouze R76 light-time:

```markdown
## Internal comet ephemeris and light-time

When a readable local DE440s kernel, SciPy and `jplephem` are available, normal
KOPR application calculations automatically request the internal gravitational
N-body comet model. The comet state is initialized from the osculating MPC
elements at their epoch and propagated with a Cowell DOP853 integration under
the Sun, Mercury, Venus, Earth, Moon, Mars and the Jupiter, Saturn, Uranus and
Neptune systems.

Earth is evaluated at observation reception time. The comet is iterated at the
retarded emission time `t - LT`, and the final RA/Dec and distances use the same
converged light time. If N-body cannot be used for a particular comet, KOPR
falls back visibly to the established DE440s two-body path and then, when
necessary, to the legacy analytical engine.

Run `python3 check_nbody_status.py` from the KOPR directory to inspect the
session-level runtime decision. The terminal and Automatic Comet Finder
confirmation dialog identify the engine actually used and any fallback reason.
The purpose of the N-body model is to reduce large two-body propagation errors;
KOPR does not claim one universal subarcsecond tolerance against JPL Horizons.
```

#### Sekce „WCCD and automeasure“

Doplnit:

```markdown
### Single-stack WCCD observations

A separate Stars stack is optional for manual WCCD work. If the Stars field is
empty, or the same FITS is selected for both fields, KOPR loads the Comet FITS
once and exposes it as separate Comet and Stars logical roles. Image pixels may
be shared, but annotations, catalogue markers and measurement/view state remain
independent. Both image-role buttons remain available, Auto Star Measure uses
the Stars role, and Automatic Comet Finder receives the shared Stars source.

A genuine pair of different Comet and Stars products still requires the normal
STACKTYP, exposure, filter, geometry and PAIRFILE compatibility checks.
```

Dále popsat pořadí dialogu:

```markdown
The New CCD/DSLR observation dialog asks for the Comet stack, optional Stars
stack and then the canonical Comet designation. KOPR can derive a designation
from FITS `OBJECT`, for example `10P/Tempel 2` becomes `10P`. A manually edited
value is not overwritten by later file selection. Invalid syntax and a valid
designation without local orbital elements are reported separately before the
dialog is accepted.
```

#### Automatic Comet Finder

Přidat krátkou provozní poznámku:

```markdown
Automatic Comet Finder performs numerical ranking outside the GUI thread and
opens candidate confirmation in the main Qt thread. Reaching 100% should be
followed by the visual confirmation window; cancellation and stale results from
an older observation remain guarded.
```

### 4.4 `docs/developer/NBODY_R90_VALIDATION.md`

Na začátek vložit výrazný stavový blok:

```markdown
> **Current runtime status (R92+):** this document describes the optional
> scientific comparison utility introduced in R90. A validation certificate is
> no longer required to run or test N-body in KOPR. Normal application calls
> select N-body automatically when the local DE440s/SciPy/jplephem runtime is
> available. The certificate remains useful only as a reproducible external
> validation artefact tied to a specific corpus, kernel and force model.
```

Dále změnit formulace:

- `activation certificate` → `validation certificate` nebo `validation artefact`;
- odstranit tvrzení, že chybějící certifikát vrací běžnou aplikaci na two-body;
- ponechat corpus schema, kernel hash, metriky a release gates;
- vysvětlit, že validační běh musí odmítnout každý případ, v němž N-body přešlo na fallback;
- jasně uvést, že buildovací prostředí R90 neprovedlo skutečný externí corpus run.

### 4.5 Doporučený nový dokument `docs/developer/NBODY_INTERNAL_EPHEMERIS.md`

Vývojářskou technickou část je vhodné oddělit od uživatelského návodu. Dokument má obsahovat:

1. diagram toku `compute_application()` → runtime preflight → N-body/fallback;
2. state-vector konstrukci v oskulující epoše;
3. TT→TDB hranici;
4. DE440s planetary state provider a souřadnicové rámce;
5. Cowellovu rovnici a seznam perturberů;
6. DOP853 tolerance a relativní čas;
7. light-time smyčku;
8. session cache a její identitu;
9. provozní výjimky a fallback;
10. strukturu `ephem_provenance`;
11. použití `check_nbody_status.py`;
12. oddělení runtime aktivace od volitelné Horizons validace;
13. současné limity modelu.

### 4.6 Vývojářská dokumentace WCCD

Pokud projekt vede samostatný dokument architektury WCCD, doplnit:

- resolver Comet/Stars source mode `dedicated_stars` versus `comet_fallback`;
- pravidlo jednoho FITS readu a sdílení immutable dat;
- povinnost oddělených mutable view-state kontejnerů;
- transakční New observation;
- jednotný designation normalizátor;
- QObject/`pyqtSlot` handoff workerů do GUI vlákna;
- run-token a stale-result ochranu.

Pokud samostatný dokument neexistuje, stačí tyto body uvést v release reportu R91/R93 a changelogu.

---

## 5. Zastaralé nebo zavádějící formulace, které je nutné odstranit

Dokumentace cílového R93 nesmí bez historického označení tvrdit:

1. že N-body lze použít pouze s validačním certifikátem;
2. že instalace aktuálního buildu vždy zachová aplikační two-body výstup;
3. že N-body je pouze explicitní opt-in nebo nemá aplikační integraci;
4. že uživatel pozná aktivaci pouze podle změny offsetu;
5. že Stars stack je pro plnohodnotné WCCD přepínání vždy povinný;
6. že Comet a Stars nesmějí ukazovat na stejný soubor;
7. že dialog New observation začíná polem Comet name;
8. že samotný běžný název komety je dostatečné designation;
9. že progress 100 % znamená dokončené a bezpečně otevřené review okno i ve starších threading cestách;
10. že N-body garantuje „full precision“, subarcsecond přesnost nebo univerzální zlepšení každého jednotlivého případu;
11. že skutečné DE440s/Horizons corpus porovnání bylo v buildovacím prostředí R90 úspěšně dokončeno.

Historický popis R90 může zůstat v changelogu nebo release reportu, ale musí být jasně označen jako stav nahrazený R92.

---

## 6. Doporučená terminologie

Používat jednotně:

- **DE440s N-body** nebo **DE440s Cowell-DOP853 N-body**;
- **DE440s two-body fallback**;
- **legacy analytic fallback**;
- **requested model** a **used model**;
- **osculating element epoch**;
- **reception time** a **retarded emission time**;
- **Comet role**, **Stars role**, **comet fallback**;
- **Comet designation**, nikoli obecně `Comet name`, pokud jde o orbitální identifikátor;
- **optional Horizons validation**, nikoli runtime activation requirement.

Nevytvářet nové alternativní názvy pro stejný mechanismus.

---

## 7. Umístění release reportů a balení dokumentace

Doporučené uspořádání v QA/developer archivu:

```text
docs/developer/release_reports/
    KOPR_R84_EPHEMERIS_R83_BASELINE_REPORT_20260728.md
    KOPR_R85_OSCULATING_ELEMENT_EPOCH_STATE_REPORT_20260728.md
    KOPR_R86_DE440S_PLANETARY_STATES_COWELL_FOUNDATION_REPORT_20260728.md
    KOPR_R87_DOP853_COWELL_PROPAGATOR_REPORT_20260728.md
    KOPR_R88_NBODY_LIGHT_TIME_OPT_IN_REPORT_20260728.md
    KOPR_R89_NBODY_SESSION_CACHE_FALLBACK_PROVENANCE_REPORT_20260728.md
    KOPR_R90_NBODY_RELEASE_VALIDATION_GUARDED_ACTIVATION_REPORT_20260728.md
    KOPR_R91_WCCD_SINGLE_STACK_FALLBACK_DIALOG_HOTFIX_REPORT_20260728.md
    KOPR_R92_NBODY_AUTOMATIC_ACTIVATION_HOTFIX_REPORT_20260728.md
    KOPR_R93_WCCD_HELPER_GUI_THREAD_HANDOFF_HOTFIX_REPORT_20260728.md
```

CLEAN distribuce může obsahovat pouze stručný README, uživatelský návod, changelog a případně potřebné provozní instrukce. Podrobné interní reporty a testovací metodika patří primárně do QA/developer archivu.

---

## 8. Testovací a validační informace pro dokumentaci

Dokumentace nemusí vypisovat test count každé mezidávky v hlavním uživatelském návodu. Do changelogu nebo kumulativního vývojářského reportu lze uvést:

```text
R93 cumulative QA: 1399 passed, 6 skipped, 0 failed
```

Přeskočené testy byly spojeny s volitelným kompletním Astropy FITS runtime v buildovacím prostředí. Dokumentace nesmí jejich existenci vydávat za neotestovanou N-body nebo WCCD funkcionalitu.

Pro vědecké tvrzení o zlepšení přesnosti je však stále potřebné skutečné porovnání proti externímu corpus Horizons se skutečným lokálním DE440s kernelem. Deterministické jednotkové testy dokazují numerickou a regresní správnost implementace, nikoli obecnou externí přesnost orbitálních předpovědí.

---

## 9. Definition of Done pro dokumentační aktualizaci

Aktualizace je dokončena, pokud současně platí:

1. README začíná aktuálním stavem R93, nikoli zastaralou aktivační logikou R90.
2. Uživatelský návod popisuje automatickou N-body aktivaci, status command, viditelný fallback a skutečný použitý engine.
3. Uživatelský návod popisuje single-stack WCCD a nové pořadí dialogu.
4. Changelog obsahuje souhrn R84–R93.
5. `NBODY_R90_VALIDATION.md` je označen jako volitelná externí validace, ne jako runtime podmínka.
6. Nikde není tvrzena univerzální subarcsecond nebo „full precision“ přesnost.
7. Nikde není uvedeno, že aktuální aplikace bez certifikátu automaticky zůstává na two-body.
8. Dokumentace rozlišuje aplikační automatický model od nízkoúrovňového API defaultu.
9. Je vysvětleno, jak uživatel zjistí `requested` a `used` model a důvod fallbacku.
10. Je popsána oprava finderu, který dříve zůstal na 100 % bez potvrzovacího dialogu.
11. Podrobné release reporty R84–R93 jsou dostupné v QA/developer archivu.
12. Všechny odkazy, názvy souborů, příkazy a označení verzí odpovídají finálnímu buildu R93.
