UTS Phase 22.6 close-out — measured parity re-audit (the DoD re-run)
The Definition-of-Done re-run of the Phase-22 parity catalog against current master (all 22.x work shipped). Method — operator-chosen "plain agents, supervised": (1) live computed-style extraction inline (headed uts-smoke Chrome, dev server, admin with full real progress, 7 captures: post-body, cook lightbox open, learn overview / lesson / completion / review hydrated, the new W12 pills; 500px viewport), (2) 11 read-only surface agents (one per surface, each with its capture + CSS/JS/template sources + the accepted-divergence ledger), (3) one adversarial completeness critic (sampled 18/78 divergence rows against source: 17 correct, 1 false positive → ~6% FP).
Measured result
| Surface | Facets | Match | Diverge | Accepted | Clean+acc |
|---|---|---|---|---|---|
| step-block (standalone) | 157 | 131 | 21 | 5 | 87% |
| step-collection | 52 | 44 | 8 | 0 | 85% |
| materials + gallery | 47 | 41 | 5 | 1 | 89% |
| cook-lightbox (FP-corrected) | 44 | 35 | 6 | 3 | 86% |
| learn-overview | 52 | 42 | 9 | 1 | 83% |
| learn-lesson | 30 | 23 | 6 | 1 | 80% |
| learn-completion | 38 | 34 | 4 | 0 | 89% |
| learn-review | 44 | 34 | 10 | 0 | 77% |
| learn-footer | 44 | 39 | 3 | 2 | 93% |
| guide-picker | 32 | 25 | 1 | 6 | 97% |
| me-guides (g-* conformance) | 22 | 16 | 4 | 2 | 82% |
| TOTAL | 562 | 464 | 77 | 21 | 86.3% |
Confidence, computed: 562 facets enumerated and measured (deeper than the original ~308-facet audit — this pass added line-heights and per-state spacing); critic-sampled verification 17/18 → measured-now = 86% clean-or-accepted; after the identified fixes land, a clean re-check of the fixed facets projects ~97%; residual = the gaps listed below (chiefly the desktop breakpoint).
The 77 divergences, bucketed
⚖️ Operator decisions (2) — RESOLVED 2026-07-04
- Standalone disc coloring → RATIFIED as a Flutter lead. Web never colors a standalone step-block's disc on answer/reveal (
--done/--wrongrules are dead; the compiler gates every state class on collection items); Flutter's green/red (step_block.dart:118-124) is kept as better feedback, consistent with collection items. → Flagged to the web team (W12-style): their dead--done/--wrongCSS rules are ready — just emit the classes. The 2 medium rows move to ACCEPTED (562-facet table: step-block accepted 5→7, diverge 21→19). - BUG-F1 → FIXED (
16a15fba). The reset-all optimistic clear is now scoped to the resettable block ids threaded from the dispatcher; assessment blocks keep their interactions + revealed correctOptions, matching the server. Regression bloc test added; 335 green.
🔧 Medium fixes (2)
- Review media: renders full inline
MediaBlock; web (and the Flutter lesson page) use the 48pxMaterialThumb→ shared viewer.guide_lightbox_review.dart:112-120. - (BUG-F1 above, if "fix" is chosen.)
🔧 Moderate fixes (4) — step-collection rhythm + overview gap
- Item separators missing (1px gLine border-bottom, last none) —
step_collection_block.dart:403/216. - Item padding rhythm 13.6 V (web) vs bottom-16 only — same lines.
- Flashcard tip suppressed (web renders
.g-tipfor flashcards too — content lost) —:485/:258. - Overview materials double-gap 48 vs 24 (
guide_lightbox_overview.dart:96SizedBox — deleting it also fixes O-BUG1's empty-collection orphan).
🧹 Low/cosmetic (~66) — three systematic decisions cover most
- Line-heights (~14 rows across 5 surfaces): web inherits body 1.5/1.6; Flutter leaves
height:unset (≈1.17-1.43 ambient). ONE sweep: setheight:per web value on the listed styles. - Margin-stack vs CSS-collapse (~12 rows): double-pads (title→desc 16 vs 8, completion partial 30.4 vs 22.4, flashcard +12, submit +8…) — the known Flutter-stacks /CSS-collapses class; each fix is a one-liner listed in the raw results.
me-1icon gaps (+4px) & px nits (~15 rows): icon gaps,gCalloutPadH11→11.2, W12 nits (ls .44, pill 13px, icon gap 7.2), submit in-lightbox 8/19.2, g-check metrics.- Rest: me-guides tokenization (4, consistency-only), picker empty-meta edge (1), footer label alignment/Exit-Review skin (2), misc.
🌐 Web-side flags (hand to the web/Go team; Flutter is correct or leads)
- Web bug: review page paints a revealed flashcard's disc red (
data-step-correctnever set for flashcards); Flutter's green is the right semantics. - Web bug (same family): collection flashcard LIVE reveal never greens the circle until reload (reveal handler adds no class; only hydration does).
- Flashcard revealed answer in review inherits 16px (un-designed; every styled review text is 13-14) — suggest 13.5.
- Review indent hygiene: body 39.6 vs answer/explain 40 (legacy calc split).
- ~24 dead CSS selectors in
kon_guide_v2.cssemitted by nothing (.g-rating*,.g-callout*,.g-meta*,.g-badge*,.g-progress-fill--brand,.g-lightbox*,.g-media*) — bidirectional-audit DoD: retire. EXCEPTION:.g-step-num--done/--wrongare no longer dead-to-retire — they're the ready-made hooks for adopting the ratified standalone-disc coloring (item 6). - Adopt standalone disc coloring (operator-ratified Flutter lead 2026-07-04): emit
--done/--wrongon standalone step-block discs on answer/reveal — the CSS already exists; the compiler just never adds the classes outside collections.
✅ Notable clean verifications
W12 fully landed on web and byte-matches Flutter (pills #e9f5ee/#0f5132 + #fbe9eb/#842029, label 11/600/uppercase/gFaint, --revealed now var(--g-muted), completion note gated) · D20.1–D20.6 behavior contract incl. live "Review Results" CTA · gBrandInk lerp numerically exact vs color(srgb …) · duration humanizers byte-for-byte · picker 97% · lifecycle parity (fresh-bloc-per-open ≡ web reset-on-open/close) · multi-guide trigger 1→direct/2+→picker · me-guides zero hex/rainbow remnants.
Residual gaps (disclosed, not measured)
- Tablet/desktop ≥768px never live-captured (all captures at 500px) — Flutter's
isMobile:falsebranches certified against source CSS only. MEDIUM. - Safe-area on notched devices (browser
env()=0) — carried render-Q. LOW-MED. - Reset-confirm modal chrome depth; error-path snackbar styling; overflow/nowrap/RTL; scroll-hint animation. LOW.
- macOS-counts-as-on-device per operator decision 2026-07-03 (device pass deferred to the app-store build cycle).