# QA round 25 — the Phase 9 gate on deploy 13, capture `gate13`, 2026-09-21

**Verdict: PHASE 9 GATE PASSED. Hero 4.05 (>= 4.0), no station below QA 24 by more than 0.04, no open blocker.** Station 2's blue-violet shaded stone is CLOSED in the viewer (b\* -2.7 / -11.2 / +0.2 -> **+10.4 / +4.5 / +9.0**, tracking the new Cycles refs within 0.9), station 3's shade gap is more than half closed (near_column 1.80x -> **1.38x** of Cycles, frame p10 37.5 -> **13.3** against 6.1), the dotted crown rim is closed at every box, and all six stations move toward the Phase 9 references. One residual re-opens (§4): two far-crown boxes brighten while the reference does not — narrower than QA 23's, and not a blocker.

Inputs: `renders/web/gate13_*` (desktop 1-6 at 1920x1080, `?tier=mobile` 1-6, the mobile close orbit, net/perf sidecars); before = `gate12` (QA 24); references = the Phase 9 Cycles AFTER set `renders/qa_comparisons/cycles_p9/cam0N_1080_32spp.png`, **full resolution**, so parity is measured at 1920x1080 on both sides, with the Phase 8 set for continuity. Measures `scripts/qa_r25_probe.py` (a thin extension of r24 -> … -> r13), tiles `scripts/qa_r25_tiles.py`. No Blender, no Chrome, no deploy. Sheet `renders/web/gate13_gate.png`.

## 0. Gate checks, before any number
**Name sweep** (`qa_r18b_probe names` over the shipped export set, the no-Blender form of `scripts/qa_name_sweep.py`): **738 desktop manifest rows + 341 mobile, 0 object-shaped hits**, 0 mobile paths absent from the desktop plan. **The belt rule holds where it was written**: `export/belt_rule.py --frustum` **PASS** — of the three belt rows inside cam03's 15 m draw distance the two in frame (`ENV_tree_cypress_33` at 6.5 m, `_34` at 10.4 m) **keep their mesh in both sets**, the third projects to ndc x -27.8 and is out of frame; no in-frame belt tree is drawn as a magnified card.
**Full-resolution tile review — 3x2 tiles per station at 1920x1080, all 36 viewed at 100 %.** Defects, whatever the metrics say:
1. **Station 6 is the worst tile set in the gate**: the aerial backdrop is flat-shaded untextured faceted polyhedra — angular plates for ground and buildings, octahedral blobs for trees — and the lagoon carries a regular diagonal cross-hatch moiré over its whole surface. Both carried, both plain at 100 %. Owner ENV.
2. **Flat pale untextured backdrop slabs** read through the colonnade intercolumniations at 1 and 2 and through the rotunda arches at 5 — the QA-23 residual 2 surface, unchanged (ENV). **Blue-violet / lavender whole crowns** in the middle distance at 2 and 6 (ENV/BAKE).
3. **The tall column shafts still read plum-violet in shade** at 2 and 6 — but a shaft box reads b\* **-1.02 in the viewer against -1.52 in Cycles p9** (gate12 -4.77): the viewer reproduces the master. This is the Phase 5 material a\* deficit the lighting report names, **not** a Phase 9 defect; round 19 moved the piers, not these.
4. **Station 3**: the near shaft reads as luminous saturated olive with faint horizontal lightmap seams, the colonnade ground crushes to black, paving joints are pure black lines, the walk-in bushes are flat cards. **Station 4**: coffer interiors are gradient-free face-on, the rotunda inner ceiling is a flat grey plate with a hard unshaded edge. **1/5/6**: the dome is smooth, pale and near-untextured with visible meridian seams. **2**: over-saturated orange reeds and hard-edged yellow foliage cards in the foreground. All carried.
5. No tile shows an opening filled by a near face: every arch the stations look through shows the far side, the vault soffit, or the backdrop behind the building. (The `scene.ray_cast` form of that check needs Blender and was out of scope this round; the tiles are the evidence.)

## 1. Parity — every station moves toward the Phase 9 references, none away
MAE vs `cycles_p9`, whole frame, g12 -> **g13** %: 10.501 -> **10.271** · 7.771 -> **6.272** · 13.473 -> **6.640** · 5.477 -> **3.173** · 8.755 -> **8.455** · 8.257 -> **7.625**. Outside the Cycles shade 10.36 / 4.85 / 7.61 / 3.78 / 8.20 / 7.61 %, in the Cycles-sunlit band 8.54 / 2.89 / 10.62 / 5.39 / 5.66 / 6.72 %. p10 g12 / g13 / cyc: 53.6/50.3/49.0 · 25.6/25.9/19.6 · 37.5/**13.3**/6.1 · 28.7/**20.5**/20.9 · 64.3/60.2/64.0 · 71.9/67.1/64.1; mean luma 129.7/128.1/139.1 · 104.0/100.5/97.5 · 79.2/57.5/47.4 · 70.6/**62.8**/62.5 · 148.6/146.8/150.6 · 100.8/98.6/98.6. The delivered frames reproduce `phase9_viewer_capture2_report.md`'s table to three decimals, so deploy 13 **is** the build that was captured. The 0.5 % outside-shade budget is met at no station (3.8-10.4 %) — but this round re-baked the whole scene and gated the specular everywhere, so nothing is "outside the changed boxes"; the meaningful test is direction, and **all six move toward the p9 refs** (five of six also toward p8). Station 4's p10 and mean now sit on Cycles. **Not met**: the decisions entry's own "cam05 p10 back within 3 % of Cycles" — the gate lands at **60.2 against 64.0 (-5.9 %)** where the ungated path is +6.8 %; on the tiles the gated frame's shadows read as shade, not crush, so the gate is the better of the two and the miss carries.

## 2. Station 2 — the lighting change reached the viewer through the re-bake
| box | b\* g12 -> **g13** | cycles p9 | photo 062 | h_ab / R-B g13 | verdict (viewer) |
|---|---|---|---|---|---|
| shade_pier | -2.72 -> **+10.40** | +11.26 | +14.10 | 63.1 / +29.2 | **PASS PASS PASS** |
| shade_pier_r | -11.21 -> **+4.51** | +5.29 | +13.22 | 84.2 / +7.8 | FAIL FAIL FAIL — Cycles itself passes by 0.3 / 0.3 / 0.0 |
| shade_arch | +0.18 -> **+9.01** | +8.80 | +7.49 | 69.1 / +24.5 | **PASS PASS PASS** |
| soffit_l / _r | +14.8 / +18.5 -> **+18.9 / +20.4** | +18.7 / +20.1 | +12.8 / +7.9 | 82.9, 83.2 | b PASS, h_ab FAIL — accepted residual |
| shade_frieze | +11.44 -> **+19.07** | +23.31 | +10.50 | 87.6 / +42.1 | FAIL — accepted residual; the viewer is closer to the photo than Cycles |

Mean |b\* - photo| over the six boxes **10.34 -> 6.85**, better than the Cycles refs' own 7.15. The viewer tracks Cycles within 0.9 b\* at five of six boxes, so the diffuse-socket change survived the lightmap re-bake, the pack and the deploy. `shade_pier_r` misses its three numbers by 0.8 b\* / 4.2 deg / 2.2 at a box the master passes on the line: transfer error, not a new defect. Sheet row 1: gate12 violet, gate13 and Cycles the same warm olive, the photograph still a warmer pink-grey.

## 3. Station 3, the rim, the counters, payload, perf, mobile
near_column (r17 box), 8-bit sRGB: gate12 **86.7 / 66.0 / 21.8** -> gate13 **66.7 / 46.7 / 0.6** against Cycles p9 **48.3 / 32.4 / 0.0** — R **1.80x -> 1.38x**, G 2.04x -> 1.44x, **blue closed**; box p10 35.1 -> 21.2 (Cycles 9.3), frame p10 37.5 -> 13.3 (6.1), MAE 13.47 -> 6.64 %. B.6 predicted ~1.05x, so **half the warm excess stands**, and the tiles show it as a luminous olive shaft where Cycles has a dark one (sheet row 2); owner VIEWER. Cost: draws 371 -> **359**, triangles 7.35 -> **7.05 M**, programs 144 -> 138 — still the slowest station (45.2 ms). **The dotted rim closes**: one mask from gate12 applied to both sides (`p9v_rim.py ab gate12 gate13`) gives a checkerboard index **0.264 -> 0.043** (05 left crown), **0.369 -> 0.058** (02 right cypress), control 0.080 -> 0.032. **Counters**, identical on all three captures: `166/166 joined (0 unmatched)`, `166 far + 0 near modulated`, `166/184 carry a modulation`, **131 re-lit desktop / 149 mobile**, gate3 lightmaps 16/16 own maps and 988/988 slots with 0 materials cloned, spec gate "round 2" live — exactly the expected set; **0 page errors** on desktop, mobile and orbit, one 404 (favicon) as always. **Payload** desktop **46 785 149 B / 326 req** before the first frame (+28 837 B vs gate12), mobile **46 513 807 B / 376 req** (-310 588 B) — both inside the 50 000 000 rule; totals 585.0 / 65.9 MB. **Perf** at 1440p: medians 35.2 / 40.3 / 45.2 / 26.9 / 33.6 / 35.5 ms = **28.4 / 24.8 / 22.1 / 37.2 / 29.8 / 28.2 fps**, +0.4 to +4.4 ms on gate12 and +0.4 to +7.3 on the idle `gate5cold` pass; resident **1 814.1 MB** (tex 1 255.6, geo 114.5, rt 443.8), 0.1 MB off gate12 — the 45 fps target stays open at every station and the number still has not been taken on an idle machine. **Mobile**: all six stations load and render, 0 page errors, resident **550.3 MB** against the 700 MB target, ETC2 throughout, the hero water reflects the rotunda, frames moving exactly as the desktop ones (MAE vs gate12m 1.80 / 6.37 / 22.83 / 10.82 / 3.89 / 2.82 levels). The 2.5 m walk-up is not in this capture (`walkProbes: 0`) and `renders/web/960/gate13_orbit.jpg` is a stale duplicate of `gate13m_cam01.jpg` — LEAD.

## 4. Regression and the far-tree carry
17 of 25 boxes move more than 3 %, nearly all darkening — the re-bake plus the gate. The architecture moves **toward** its reference (hero `columns` 121.9 -> **113.5** against ref 114.3, `vault field` 68.6 -> **60.3** against 60.6, `N-colonnade wall` 73.8 -> 66.0 against 56.1); against it, `hero shade band` 120.7 -> **114.1** (ref 122.1) and `S-colonnade wall` 123.9 -> 119.9 (ref 139.3) — the gate darkens the hero's shaded attic away from the reference. Shrub levels move toward the reference at 7 of 8 boxes (01 shore 1.36 -> 1.25x, 03 cards 1.46 -> 1.19x, 02 reed 1.18 -> 0.99x); the hard-edge share is still above it at 8/8, the carried ENV residual, unchanged in kind. **QA 23 residual 1 partially re-opens — owner BAKE/EXPORT.** Re-scored against the p9 refs the far crowns' mean deviation goes **7.5 -> 9.6 %** and only 3 of 10 boxes are closer; the reference did **not** move (cycles p9 / p8 = 0.970-0.998x) while two viewer boxes did: `02 fill tree` **1.100 -> 1.239x** Cycles (dark share 75.2 -> 69.6 % against 76.8) and `05 lawn tree crown` **1.101 -> 1.195x** (dark share **21.5 -> 11.2 %** against 35.6); the 06 pair rise 2.3-2.7 %, three boxes fall. Narrower than QA 23's (9 of 10 moved) and confined to foliage, so a **residual, not a blocker** — but the same mechanism, and it costs 8e half its margin back (orbit blade run p90 22.7 -> **23.8 px**, boxes under target 5/6 -> **4/6**). Station 5 pays twice: crossings/100 px 12.28 -> **9.79** against Cycles 15.89.

## 5. Scores and residuals
Rubric as QA 17 (six rows, station = their mean, so one row moving 0.5 moves a station 0.083). Desktop **01 4.05 · 02 3.51 · 03 3.08 · 04 3.05 · 05 3.24 · 06 3.07** — deltas vs QA 24 **+0.04 / +0.21 / +0.25 / +0.17 / -0.04 / 0.00**. **01** material realism +0.5 (columns and vault land on their reference for the first time, the rim closes) against foliage material -0.25 (crowns wash out again, hero shade band away from the reference). **02** lighting mood +1.0 — the defect open since QA-08-2 is closed at the measured boxes and verified through the whole chain — plus material realism +0.5 against foliage material -0.25; background realism held, the flat backdrop slab and the violet shafts untouched. **03** lighting mood +1.0 (p10 37.5 -> 13.3: the frame reads as a shaded colonnade) and material realism +0.5 (blue closed) against the half excess that stands and the crushed ground on the tiles. **04** lighting mood +0.5 and material realism +0.5 (p10 and mean now on Cycles); the flat coffer interiors are unchanged. **05** foliage material -0.5 (the lawn crown's dark core, the crossings) against lighting mood +0.25 (rim closed, parity up) — the p10 budget miss keeps it from more. **06** foliage material -0.25 against background/lighting +0.25: the faceted backdrop and the water moiré are where QA 22 left them. Mobile **01 3.44 · 02 3.59 · 03 2.77 · 04 2.87 · 05 3.00 · 06 2.62** — the same deltas, carried by the same frames. Residuals for `docs/delivery.md`:
1. **CLOSED** — QA-08-2 / QA-09-6, station 2's blue-violet shaded stone (LIGHTING); QA 21 residual 1, the dotted crown rim (VIEWER).
2. **NEW** — the station-3 specular gate removes half the warm excess, not ~97 % (near_column 1.38x, frame p10 13.3 vs 6.1) — **VIEWER**.
3. **NEW** — cam05 p10 60.2 against Cycles 64.0 (-5.9 %, budget +-3 %): the gate darkens the most sunlit station — **VIEWER**.
4. **RE-OPENED, narrower** — far-crown over-brightening at `02 fill tree` and `05 lawn tree crown` with the reference unmoved, 8e's blade margin back to 4/6 — **BAKE/EXPORT**.
5. **Accepted structural residual** (decisions.md 2026-09-21, the user's call): `shade_frieze` +19.1 and the soffits' h_ab 82.9 / 83.2 — materials, a later phase; with it the plum-violet column shafts, which the viewer reproduces faithfully from the master.
6. **Carried unchanged**: the faceted aerial backdrop and the pale backdrop slabs behind the colonnade (ENV), the cam06 water moiré, the shrub hard-edge share, the smooth pale dome, the flat coffer interiors, cam03 as the slowest station, the 45 fps target open at all six stations on a machine that is still not idle, and the user's Safari hero screenshot / iPhone walk recording.
