# FT-P-19 — Satellite relocalization scale-ratio + scene-change PARTIAL

**Task**: AZ-423_ft_p_19_sat_reloc_scale
**Name**: UAV-frame footprint scale-ratio retrievable from cache (FULL); scene-change subset (PARTIAL) (AC-8.6)
**Description**: Implement FT-P-19 — for each `still-image-set-60` image, query cache top-K=10 retrieval; assert top-K result includes a tile whose centre is within 100 m of the image's true centre. For the 2 paired `_gmaps.png` images, run cross-domain matcher; record scene-change behavior as PARTIAL (full coverage requires labeled change-pair dataset, deferred under D-PROJ-3).
**Complexity**: 3 points
**Dependencies**: AZ-406, AZ-407
**Component**: Blackbox Tests / Positive (epic AZ-262)
**Tracker**: AZ-423
**Epic**: AZ-262 (E-BBT)

## Problem

AC-8.6 has two halves: scale-ratio retrievability (UAV-frame footprint at deployment altitude is in the cache regardless of internal tiling) and scene-change handling (matcher succeeds when the satellite reference shows seasonal/temporal differences). The first is fully measurable; the second is constrained by the lack of labeled change-pair data and is documented as PARTIAL in the traceability matrix.

## Outcome

- pytest scenario at `e2e/tests/positive/test_ft_p_19_sat_reloc_scale.py`.
- For each of the 60 still images: query the SUT's cache top-K=10 retrieval (via the per-frame retrieval log in FDR OR a public cache-query API if exposed); assert the top-K includes a tile whose centre is within 100 m of the image's true centre.
- For the 2 paired `_gmaps.png` images: run cross-domain matcher; record per-image match success (boolean) into CSV; mark the scene-change subset as `PARTIAL` in `report.csv`.

## Scope

### Included
- Per-image top-K=10 retrieval observation.
- Per-image distance check on top-K members.
- Scene-change subset (2 paired images) with PARTIAL annotation.

### Excluded
- Stale-tile rejection — owned by FT-N-05.
- Multi-flight scene-change statistics — deferred under D-PROJ-3 (out of scope of this task).

## Acceptance Criteria

**AC-1: scale-ratio retrievability (60 images)**
Given each still image
When the SUT performs top-K=10 retrieval
Then the top-K result includes a tile whose centre is within 100 m of the image's true centre, for all 60 images.

**AC-2: scene-change subset PARTIAL**
Given the 2 paired `_gmaps.png` images
When the cross-domain matcher runs against each
Then the per-image result is recorded; the scenario's overall result is `PARTIAL` in `report.csv` for this subset (regardless of pass/fail count, because N=2 is too small for statistical confidence).

**AC-3: parameterization**
Given conftest parameterization
Then the scenario runs per `(fc_adapter, vio_strategy)`.

## System Under Test Boundary

End-to-end through public boundaries.

- **Allowed**: FDR per-frame retrieval log read OR a public cache-query API (whichever is documented).
- **Forbidden**: importing C2 / C6 internal index, monkeypatching FAISS query.

## Constraints

- The PARTIAL annotation is structural — the scenario emits it regardless of pass/fail count for the scene-change subset, because the AC text itself acknowledges insufficient data (per traceability matrix).

## Document Dependencies

- `_docs/02_document/tests/blackbox-tests.md` § FT-P-19
- `_docs/02_document/tests/traceability-matrix.md` § AC-8.6 (PARTIAL annotation)
