# css-render-chain — VALIDATION RESULTS

## Signal hypothesis

CSS rendering chain timing (style recalc, layout, paint, composite) should be
consistent across vanilla and CDP-attached headless Chrome. Significant
variation indicates either headless rendering anomalies or CDP-side effects.

## 2-test results (vanilla headless vs CDP-attached headless)

| Condition | Style recalc | CV | Layout readback | CV | Verdict |
|---|---|---|---|---|---|
| Vanilla | 545ms | high | 12.00ms | 2.708 | 🟢 nominal (not SUSPICIOUS) |
| CDP | 65.000ms | 4.020 | similar | similar | 🟡 SUSPICIOUS (1 flag) |

**Verdict flips between conditions**: vanilla passes, CDP fails.
The CV=4.020 style recalc flag only fires under CDP attachment.

## Verdict: ❌ REJECTED — CDP artifact, not signal

The signal's threshold is too close to the boundary where CDP-attached Chrome
naturally falls. CSS render timing is sensitive to:
- V8 debugger instrumentation overhead
- CDP command processing on the renderer thread
- `--remote-debugging-port` arg presence

This means the signal **cannot distinguish**:
- A real headless browser with DevTools open (high false positive)
- A stealth framework mimicking headless rendering (would also flip the CV)

A more reliable signal lives in the absolute timing (CSS rendering is faster
on headless) but this spike tests CV, which is more sensitive to jitter than
magnitude.

## Recommendation

Drop `css-render-chain` from production candidates. The existing
`webgpu_lockedapart` and `getCoalescedEvents` checks provide stronger coverage
with cleaner thresholds.

## Files

- `demo.html` — the spike page
- (no test.py — used `_generic_test.py` for validation)
