# FT-N-05 — Stale-tile rejection on freshness violation

**Task**: AZ-427_ft_n_05_stale_tile_rejection
**Name**: Tiles violating AC-8.2 freshness window are rejected or downgraded (AC-8.2, AC-NEW-6)
**Description**: Implement FT-N-05 — replay 60 still images against `synth-age-7mo` (configure SUT for active-conflict sector) and `synth-age-13mo` (configure SUT for rear sector); SUT either rejects load OR loads but never emits `satellite_anchored` from these tiles.
**Complexity**: 2 points
**Dependencies**: AZ-406, AZ-407 (synth-age-tile-set)
**Component**: Blackbox Tests / Negative / Cache freshness (epic AZ-262)
**Tracker**: AZ-427
**Epic**: AZ-262 (E-BBT)

## Problem

Stale-tile rejection is a security-relevant freshness gate (AC-8.2, AC-NEW-6) — without it the SUT could promote outdated geographic information to `satellite_anchored`, enabling silent location drift. This must be exercised.

## Outcome

- pytest scenario at `e2e/tests/negative/test_ft_n_05_stale_tile_rejection.py`.
- Two sub-cases:
  - `synth-age-7mo` mounted; SUT configured for active-conflict sector; replay 60 stills.
  - `synth-age-13mo` mounted; SUT configured for rear sector; replay 60 stills.
- For each sub-case: assert 0 frames emit `source_label = satellite_anchored` from these tiles. Either rejection at load (FDR `tile-load-rejected: stale`) OR per-frame downgrade is acceptable.

## Scope

### Included
- Both sub-cases (7mo / 13mo).
- Sector-configuration switch (per AC-8.2 active-conflict vs rear).

### Excluded
- Mid-flight tile freshness positive case — owned by FT-N-06 (inside AZ-422).

## Acceptance Criteria

**AC-1: 7mo aged tiles in active-conflict sector**
Given the SUT mounts `synth-age-7mo` and is configured for active-conflict sector
When 60 still images are replayed
Then 0 outbound emissions carry `source_label = satellite_anchored`. Acceptable signals: (a) FDR `tile-load-rejected: stale` events at startup; (b) per-frame `source_label ∈ {visual_propagated, dead_reckoned}` throughout.

**AC-2: 13mo aged tiles in rear sector**
Given the SUT mounts `synth-age-13mo` and is configured for rear sector
When 60 still images are replayed
Then same as AC-1.

**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 for `tile-load-rejected` events, outbound `source_label` stream.
- **Forbidden**: importing C6 freshness gate state, monkeypatching the date-comparison logic.

## Constraints

- "Active-conflict" / "rear" sector is per AC-8.2; the configuration mechanism is documented in the SUT's config schema (per E-CC-CONF / `module-layout.md`).

## Document Dependencies

- `_docs/02_document/tests/blackbox-tests.md` § FT-N-05
- `_docs/02_document/tests/test-data.md` § Seed Data Sets (synth-age-tile-set)
