Focused proof audit — replacement [#24619](https://git.cafe/pingdotgg/t3code/pulls/24619)

Read-only review of NEW /tmp/ev-21140/sticky/valid outputs, capture.mjs/driver.mjs, package-new.py, recordings sampled at checkpoints/end, stills and source diff. Existing accepted A/B/C/D evidence and previous.tar.gz excluded. No repository changes, server/browser launches, comments, pushes or live userdata access.

Recorded source IDs match requested candidate [ef56e48](https://git.cafe/pingdotgg/t3code/commit/ef56e4893417afe46c309b39f17a8bb23991ad6a) and baseline [8525000](https://git.cafe/pingdotgg/t3code/commit/8525000dcecdf738c26c12f15b38b43082b9701f). Root baseline-sha.txt/candidate-sha.txt contain inherited OTHER IDs and must not be used for this proof. Per-run index.json is the new provenance source.

Confirmed: candidate 1440x1000/light has five stable checkpoints, no errors, complete clip. Synthetic store fixture remembers A=GPT-6.1-Sol/xhigh while started thread displays B=GPT-6-Sol/Low Fast. Actual traits menu selects High. afterTrait records sticky A/xhigh unchanged and B per-model High+priority. Fresh no-model prompt-link entry displays A/Extra High; explicit picker B restores High Fast. Sampled video agrees with stills. Driver openly seeds store/projections; it does not fake DOM labels. This proves the candidate edit branch for this row.

Baseline 1440x1000/light has only checkpoints 01 and 02 and a 10.55-second clip. Its ending visibly reaches a fresh thread showing B/High Fast, but lacks stable 03-new-A, 04-A-picker and 05-B-memory stills/final state. Baseline afterTrait still records A/xhigh and empty per-model memory: do not claim it independently demonstrates sticky-trait mutation immediately after edit. Source baseline also has other precedence differences, so the broad before/after outcome alone does not isolate this new block.

Only two matched before/after still pairs exist. Independent full-frame raw inspection: 01 has 45 nonzero pixels, 0 above16; 02 has 213 nonzero, 160 above16, localized to sidebar age labels. These pairs cover setup/edit, not fresh A or restored B. package-new.py only pairs available filenames and only processes 1440/light; it cannot establish missing rows. No final packaged diff output existed at review.

Exact gaps: (1) all six paired clips for 1440/dark, 390/light, 390/dark absent from valid; preliminary output/after-1440-dark has a candidate-only flow, not a paired accepted row, and narrow preliminary indexes have zero checkpoints; (2) no clear-B action or continuation in any accepted recording — clearOptions helper is never called; (3) baseline final checkpoints and corresponding before/after/diff pairs missing. Existing 32-cell proof cannot fill these new sticky-persistence gaps. New unit test covers edit and clear at store level but does not replace missing capture configurations; tests were read, not rerun.

FRICTION provenance | inherited root SHA files/archive are stale | use NEW valid per-run indexes only.
FRICTION coverage | partial desktop-light pass and incomplete baseline | do not count absent viewport/theme pairs or clear branch as sufficient.
FRICTION entry | contextual New thread carries B | no-model prompt-link entry is appropriate to exercise sticky A, and fixture is synthetic.
VERDICT: INSUFFICIENT
