# FT-P-08 — Multi-segment satellite-reference re-localization

**Task**: AZ-415_ft_p_08_multi_segment_reloc
**Name**: ≥3 disconnected segments handled via satellite-reference re-localization (AC-3.3)
**Description**: Implement FT-P-08 — replay the `multi-segment-derkachi` synthetic fixture with 3+ blackout windows; assert SUT emits `dead_reckoned` during each blackout, returns to `satellite_anchored` within 3 frames of each blackout end, and trajectory continuity preserved (no >100 m jump).
**Complexity**: 3 points
**Dependencies**: AZ-406, AZ-407, AZ-408 (multi_segment injector)
**Component**: Blackbox Tests / Positive (epic AZ-262)
**Tracker**: AZ-415
**Epic**: AZ-262 (E-BBT)

## Problem

The system claims to handle ≥3 disconnected segments per flight via satellite-reference re-localization (AC-3.3). Without this scenario the multi-blackout recovery path is unmeasured.

## Outcome

- pytest scenario at `e2e/tests/positive/test_ft_p_08_multi_segment_reloc.py`.
- Replays the `multi-segment-derkachi` fixture (3+ blackout windows distributed across the flight, no spoof injection).
- For each blackout: asserts `source_label = dead_reckoned` during the blackout; asserts `source_label` returns to `satellite_anchored` within 3 frames of blackout end; asserts no trajectory jump >100 m at the recovery transition.

## Scope

### Included
- Replay-driven test method against `multi-segment-derkachi`.
- Per-blackout assertion (label during, label transition, jump size).
- Aggregate pass: all 3+ blackouts must satisfy all three sub-assertions.

### Excluded
- Spoof-paired blackouts — owned by FT-N-04 (AZ-426) and NFT-RES-04 (AZ-435).
- Single-blackout outage with operator-reloc request — owned by FT-N-03 (AZ-425).

## Acceptance Criteria

**AC-1: blackout-window detection**
Given the fixture
Then the test identifies all ≥3 blackout windows from the fixture's manifest (the injector emits a window-list JSON alongside the modified video).

**AC-2: dead_reckoned during blackout**
Given a blackout window `[t_start, t_end]`
Then for every outbound emission with timestamp in `[t_start, t_end]`, `source_label = dead_reckoned`.

**AC-3: recovery within 3 frames**
Given each blackout's `t_end`
Then the next `satellite_anchored` emission occurs within ≤3 frames after `t_end`.

**AC-4: trajectory-continuity bound**
Given the recovery anchor following each blackout
Then `‖estimate_at_t_end − recovery_anchor‖ ≤ 100 m`.

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

## System Under Test Boundary

End-to-end through public boundaries.

- **Allowed**: outbound message stream; FDR; the injector's window-list JSON (a public test artifact).
- **Forbidden**: querying SUT internal anchor cache, stubbing C2 retrieval.

## Constraints

- The injector ensures ≥3 windows AND ≥30 s of normal flight between them (AC-5 of AZ-408).
- "Trajectory jump" is the L2 distance at the moment of recovery; pre/post measurements are the SUT's outbound estimates, not GT.

## Document Dependencies

- `_docs/02_document/tests/blackbox-tests.md` § FT-P-08
- `_docs/02_document/tests/test-data.md` § Resilience (FT-P-08 row)
