# Test Run Report — Phase B Cycle 2 (Step 11)

**Date**: 2026-05-12
**Mode**: functional
**Runner**: `scripts/run-tests.sh` (default profiles: static + fast; e2e env-blocked, see Step 7 / cycle-1 reports)
**Verdict**: PASS_WITH_DOCUMENTED_GATE
**Cycle scope**: AZ-498 (self-hosted satellite tiles) + AZ-499 (mission-planner OWM env hardening) — implemented in batch 11.

## Profile Outcomes

| Profile | Status | Counts | Wall-clock | Report file |
|---------|--------|--------|------------|-------------|
| static  | PASS   | **32 / 32** including new `STC-SEC1C` (AZ-499) | ~14 s | `test-output/static-report.csv` |
| fast    | PASS   | 30 files / **224 PASS / 13 SKIP / 0 FAIL** | ~17 s | `test-output/fast-report.xml` |
| e2e     | env-blocked (deferred — same registry-access block as Step 7 / cycle 1) | n/a | n/a | n/a |

## Delta vs Cycle 1 (Step 11) baseline

- Fast: 209 / 13 → **224 / 13** (+15 new tests, 0 new skips):
  - +8 in `src/features/flights/__tests__/satellite_tile.test.tsx` (AZ-498 AC-1..AC-4 — env-resolved tile URL, cookie-credentialed `<TileLayer>`, classic/satellite toggle removal).
  - +7 in `tests/mission_planner_weather.test.ts` (AZ-499 AC-1..AC-4 + happy-path + fail-soft for `getWeatherData()`).
- Static: 31 / 31 → **32 / 32** (+1 new gate):
  - `STC-SEC1C` (AZ-499) — no literal OWM key in `src/` + `mission-planner/`. Complements `STC-SEC1` (which scans `src/` for `appid=<chars>`) and `STC-SEC1B` (dist scan) by catching the rotated literal value across both source trees.
- Skip count unchanged at 13 — no new skips introduced this cycle.

## System-Under-Test Reality Gate

PASS:
- `_docs/00_problem/input_data/expected_results/results_report.md` still exists; `_docs/02_document/tests/traceability-matrix.md` still maps every AC. No internal product module was faked, monkeypatched, or replaced with a deterministic fallback by this cycle's batch — verified by review for batch 11.
- The cycle-2 surface is pure config/wire hardening:
  - AZ-498: removes the classic/satellite toggle, swaps the OSM tile URL for an env-resolved `getTileUrl()` returning the satellite-provider endpoint, and adds `crossOrigin="use-credentials"` so the browser attaches the satellite-provider auth cookie. The product code under test (`getTileUrl`, `<TileLayer>` props, removed `mapType` state) is real; only `react-leaflet` and `leaflet` (external deps) and `globalThis.fetch` (network boundary) are stubbed — same boundary discipline as the rest of the suite.
  - AZ-499: replaces the hardcoded OWM key + base URL in `mission-planner/src/services/WeatherService.ts` with `import.meta.env.VITE_OWM_*` accessors and a fail-soft return when the key is unset. The product code under test (`getWeatherData()` body) is real; only `globalThis.fetch` is stubbed.
- CSV report inspected — all 32 static rows PASS; fast profile rolled-up PASS row points at the JUnit XML.

## Skipped Tests — Same 13 As Cycle 1, Still Legitimate

The 13 skips are byte-for-byte the same set documented in `test_run_report.md` (Step 7) and re-affirmed in `test_run_report_phase_b_cycle1.md`. None of this cycle's two tasks (AZ-498, AZ-499) touched any of the skip conditions:
- AZ-498 changes the tile-base URL plumbing and `<TileLayer>` `crossOrigin` attribute — orthogonal to the auth bootstrap, canvas-editor, i18n, sse-lifecycle, and wire-contract skip surfaces.
- AZ-499 changes only the `mission-planner` weather service — orthogonal to every skip in the SPA surface.

The user-approved acceptance from Step 7 still applies; carried forward without re-prompting.

## Environment Block — e2e Profile

Same as Step 7 / cycle 1: registry-access block on `azaion/{admin,flights,annotations,detect,loader,resource}:test` images. AZ-498 / AZ-499 do not affect Docker images or compose configuration directly — but note: AZ-498 introduced a new `e2e/stubs/tile/` server (already wired into `e2e/docker-compose.suite-e2e.yml` per the staged changes, plus a new `tests/msw/handlers/tiles.ts` and an updated `e2e/tests/infrastructure.e2e.ts`) for the satellite-tile e2e path. These will exercise once the registry-access block clears in the merge-lane CI.

Defer e2e to the merge-lane CI per Step 7's user-approved option A.

## Outcome

Step 11 **passes**. Auto-chain to Step 12 (Test-Spec Sync).

## Open Items

Unchanged from cycle 1:
- F-CUM-5 production-drift backlog — feature cycles continue.
- F-CUM-4 long-running-soak Playwright config tag — recommended fold-in to merge-lane config.

Cycle-2 specific (carried forward, not gating Step 11):
- AZ-499 AC-7 — OWM key revocation at OWM dashboard (pending USER ACTION).
- AZ-498 — satellite-provider cookie-auth (pending CROSS-WORKSPACE; gates Step 16 Deploy).
