# Design Walkthrough Report — Plan B: Pagination Support

**Date**: 2026-05-14
**Deliverable**: Section `3668:84170` · Page `2956:4544` · File `DtZcMkhNy6qh6jbQQnhreQ`
**Page type**: Monitoring / Operator Console (session status, real-time control, operator-facing)
**PRD reference**: `docs/2026-05-13-plan-b-spec.md`
**Rules applied**: mockup-conventions.md (M0, M1, M10, M23, M24, M25, M26) + design-process.md + domain-tvu.md (M3, M4) + figma-technical-reference.md (Q6, Q7)
**Sibling reference**: `Plan A: MicroApps Monitor` (id `3116:19381`)
**Reviewer**: Independent F1 audit (anti-anchoring protocol — parent iterated ×3 this session)

---

## Step 0: Page Type Classification

**Classification: Monitoring / Operator Console**

Rationale: Contains session status (on-air / preview / analyzing / inactive), real-time operator controls (Go Live, Stop, Clone), AutoRefresh widget, and aggregate health indicators. Contains derived values (active session counts, health summaries, status distribution bars) → Data Audit **triggered**.

Applicable rules: M3 (status colors), M4 (dark theme), full M23 annotation audit.

---

## Section Score Summary

| Section | Score | Grade |
|---|---|---|
| 1. Sibling Visual Contract (M21) | 7/10 | Partial — parent's "mirror" claim unverified on 3 critical dimensions |
| 2. PRD + User Story Coverage | 6/10 | Significant gaps: 3 entire view states missing; 5 annotation topics thin |
| 3. Rule Compliance | 6/10 | M23 passes; M10 unverified; M0 gaps; M4 partial failure |
| 4. Anti-pattern Scan | 7/10 | One confirmed anti-pattern; one suspected |
| 5. Data Feasibility | 5/10 | Multiple derived values with no data source documented |
| 6. Recommended Next Actions | — | See below |

**Overall composite score: 6.2 / 10**

---

## 1. Sibling Visual Contract — M21 Check

**Sibling probed**: Plan A `3116:19381` (via state summary + handoff doc — not fresh Figma probe; see note)

> ⚠️ The parent self-review claims "probe Plan A MC/1920, 21 library variables / 2 text styles / Card style contract all mirrored" — but no independent probe was run for this audit. All findings below are based on structural analysis of the handoff doc and state summary vs the PRD spec. A fresh Figma probe of Plan A is required to verify visual token parity on 3 unresolved dimensions.

**Contract dimensions analyzed (6):**

### 1.1 Color / Token

- ✅ Status color semantics: on-air red / preview green / analyzing blue / inactive grey — per M3, consistent with Plan A and spec §12.1.
- ✅ Dark theme layer tokens: handoff confirms Layer_1 / Layer_2 / Layer_3 / Layer_4 used. M4 compliant.
- ⚠️ **UNVERIFIED: Sidebar hover token.** Handoff confirms a bug fix (initial Layer_3 → corrected to UX/Brand/Hover @ 0.10). No probe confirmation that the fix persisted vs was reverted. M25 violation risk remains open.
- ❌ **`--bg-layer2` hex literal (#1f1f1f) used for card bg** — justified as "Plan A does the same / library not published." This is a known gap (BRIDGE-MOCKUP-002) but still constitutes a literal hex escape not bound to a variable. M10 technically allows this exception ("唯一例外: Card bg #1f1f1f mirror Plan A 选择") — however M10 says this specific case is in backlog. **This is a documented but unresolved debt, not a violation with mitigation.**
- ❌ **Translucent alpha tokens not available** (BRIDGE-MOCKUP-001): brand-bg-18 / blue-bg-18 workarounds using child Rectangle + node.opacity. Correct per Q7 but means visual token parity with any future library update is manual.

### 1.2 Chart / Data Visualization

- ✅ 4-color horizontal status distribution bar in Overview Cards mirrors the Plan A visual language for multi-state data display.
- N/A — no chart type to verify (Plan A doesn't use charts either; both use status bars).

### 1.3 Typography

- ✅ Handoff claims Roboto Regular 12px for annotation body, Inter for UI. Consistent with M23 requirements.
- ⚠️ **UNVERIFIED: Whether Plan A and Plan B use identical text styles** for table cell content (fs-md 13px / fs-base 14px body rows). No explicit probe of Plan A text styles was documented in handoff.

### 1.4 Icon Style

- ✅ APP Icons (`3:14402`) Color=Green variants used — same as Plan A file-local component.
- ✅ Library icons from TVU UX Design System used (Sorting, Search, Play, etc.).
- ⚠️ `icon/Arrow/Left` and `icon/Arrow/Right` not published in library — Pagination prev/next uses Unicode `‹/›` fallback (BRIDGE-MOCKUP-003). This is a deliberate workaround but creates icon style inconsistency vs Plan A's eventual library-resolved state.

### 1.5 Density

- ✅ 1920×1460 frame height for App Detail and Empty frames; 1920×1080 for Admin Overview — the height difference is PRD-driven (Overview lacks pagination row), not a density inconsistency.
- ⚠️ **UNRESOLVED GAP: Admin All Overview (F1) is 1920×1080 vs all other frames at 1920×1460.** The handoff lists F1 as 1920×1080. The PRD doesn't explicitly set frame heights; this height discrepancy could cause alignment issues in the 3×2 grid layout where F1's bottom does not align with F3's bottom. This makes Row 1 visually unequal in the paired layout.

### 1.6 Header Structure

- ✅ TVU Top Bar library instance used (After Login variant) — M1 compliant.
- ✅ Sub-header 48px with persona chip on left, AutoRefresh anchor on right — matches spec §4.
- ❌ **Top bar bell icon missing** (BRIDGE-TOPBAR-BELL): Plan B topbar Right_content lacks notification bell. Plan A has same gap — parent acknowledges this but it remains a known visual delta vs production.

**M21 Score: 7/10** — Plan A style broadly mirrored at structure level; 3 unverified token dimensions (hover persistence, text style parity, icon fallback consistency); 1 height mismatch in paired layout (F1 vs F3 height); 1 persistent library gap (bell icon).

---

## 2. PRD + User Story Coverage

### 2.1 Frame Coverage

| PRD Requirement | Frame Delivered | Coverage |
|---|---|---|
| Admin All Sessions Overview | F1 `3709:5152` | ✅ covered |
| Admin App Detail (AV Sync) | F2 `3766:5776` | ✅ covered |
| User My Sessions Overview | F3 `3772:6270` | ✅ covered |
| User App Detail (AV Sync) | F4 `3776:6867` | ✅ covered |
| Admin Empty A-admin (SCTE) | F6 `3797:7520` | ✅ covered |
| User Empty A-my (SCTE) | F5 `3778:7322` | ✅ covered |
| **Loading state (§10.1)** — sidebar + overview + session table skeleton | MISSING | ❌ missing |
| **Error state** — API fetch failure state | MISSING | ❌ missing |
| **Filter-empty state B** (§10.4 scenario B) | MISSING | ❌ missing (Empty A-admin/my covered, but filter-zero state B is distinct) |
| **Overview Empty C** (My Sessions, 0 sessions platform-wide — §10.4 C) | MISSING | ❌ missing |
| **Overview Empty D** (All Sessions, 0 sessions platform-wide — §10.4 D) | MISSING | ❌ missing |
| **Sidebar Collapsed state** (mini width 56px) | Partial — 2 state-group GROUPs exist (_flow-state-1/2) | ⚠️ partial — annotation + mini-frame exist, not a full 1920-wide collapsed frame |
| **+ New Session App Picker dropdown mid-state** (§4.3) | MISSING | ❌ missing — annotation #5 mentions it but no UI frame shows picker open |
| **Session table sort states** (asc / desc / reset per §7.4) | Not shown | ❌ missing — sort is a key Plan B differentiator, no sort-active frame |
| **My Sessions Detail with + New Session in filter bar** (§7.2) | Partially in F4 | ⚠️ to verify — filter bar button position must be in F4 not F3 sub-header |
| **Pagination edge cases** (page 1 disabled prev / last page disabled next) | Not shown | ❌ missing |

Frame coverage: 6 of 14 meaningful PRD states fully covered (43%). If limiting to 6-frame scope that parent defined, 6/6 = 100%; but PRD §17.2 explicitly requests "at least 4 frames" and the spec lists 5 distinct empty state scenarios, 1 loading state, and 2 transition states that are not addressed.

### 2.2 Annotation Coverage

| Annotation Topic | PRD Spec Section | Annotation # | Coverage |
|---|---|---|---|
| Plan A vs B comparison | §1 (整体对比) | #1 | ✅ covered |
| Page structure (4 layers) | §2 (页面骨架) | #2 | ✅ covered |
| Persona differentiation | §4.1 (Sub-header personas) | #3 | ✅ covered |
| Sidebar collapse behavior | §5.2–5.8 (Toggle, localStorage, tooltip) | #4 | ⚠️ partial — localStorage key `microapps-sidebar-collapsed` mentioned in handoff but annotation content unverified for completeness |
| + New Session scoping | §4.3 + §7.2 | #5 | ⚠️ partial — mid-state App picker not shown, annotation describes behavior only |
| AutoRefresh widget | §9 | #6 | ✅ covered |
| Pagination (replaces scroll) | §7.3 | #7 | ✅ covered |
| Empty states (5 scenarios) | §10.4 | #8 | ⚠️ partial — only 2 empty frames shown (A-admin, A-my); scenarios B/C/D are annotation-only, no visual |
| Aggregate status counters | §6.1 | #9 | ✅ covered |
| **Loading states (§10)** | §10.1–10.3 | MISSING | ❌ no annotation for 800ms skeleton / 650ms refresh sweep / 120ms view fade |
| **Tooltip system (§11)** | §11 | MISSING | ❌ no annotation covering collapsed-sidebar tooltip direction rule |
| **Action Cluster state matrix (§8.4)** | §8.4 | MISSING | ❌ the Bidirectional/Analyzer/Generator × status matrix is critical for dev and entirely absent |
| **Sort column behavior (§7.4)** | §7.4 | MISSING | ❌ 3-state sort cycle (none → asc → desc → reset) not annotated |
| **Data contract** | §14 (Mock data spec) | MISSING | ❌ parent self-identifies but worth flagging: 84 sessions / 8 apps / ~19 my-sessions not repeated in any annotation |
| **URL inline edit / copy behavior (§8.2–8.3)** | §8.2, 8.3 | MISSING | ❌ no annotation for URL inline edit (my-sessions only) or copy button behavior |

**PRD Coverage: 6/10** — Core navigation and persona differentiation well covered; operational details (sort, actions matrix, loading, tooltips, URL editing) systematically absent.

---

## 3. Rule Compliance

| Rule | Check | Status | Evidence / Finding |
|---|---|---|---|
| **M0** Phase 0 element-to-component mapping | Pre-work mapping table produced and user-reviewed | ✅ | Handoff confirms "M0 Phase 0 element-to-component mapping — 动手前生成完整 table 给 user review" |
| **M1** TVU Top bar must be library instance | 5/6 frames use library Top bar After Login variant | ⚠️ | Handoff says "5 frames" but there are 6 frames in delivery. One frame (F6? F5?) may lack library Top bar — needs probe verification. More likely count error in handoff. |
| **M2** Library-First | search_design_system used before self-building; 8 file-local components created with evidence | ✅ | Handoff explicitly cites search and reuse decisions |
| **M3** Status colors (Monitoring) | on-air red / preview green / analyzing blue / inactive grey | ✅ | Handoff and spec §12.1 confirm semantic mapping; State Pill component reused from Plan A |
| **M4** Dark theme only | Layer_1/2/3/4 dark tokens used; bg-topbar #000000 | ✅ | No light-mode frames in deliverable |
| **M10** Icon fill binds Color Variable, no hex literal | Annotation text uses #2B2D42 / #33A4FD / #A6ADB8 literal hex | ⚠️ | M10 applies to icon paths — annotation container fills (navy, blue accent) use explicit hex which is acceptable per M23 annotation spec. However, any custom icon paths (empty-state placeholder shapes, BRIDGE-MOCKUP-004 workaround) must be verified for Color Variable binding. Handoff notes "empty state / AutoRefresh widget 用占位 shape + 自画" — these self-drawn shapes are M10 risk. |
| **M11** Probe-based self-audit | Handoff confirms probe verification of key attributes | ✅ | "关键属性（fills opacity / variant matches / icon swap）全部 probe 验证" |
| **M21** Sibling visual contract | Plan A probed; 21 library variables claimed mirrored | ⚠️ | See Section 1 above — 3 unverified dimensions; hover token persistence unconfirmed |
| **M23** UX annotation format | 9 navy chip cards, bilingual EN+ZH, accent stroke #33A4FD, reconnect map stored | ✅ | M23 compliance: bg #2B2D42, header chip #33A4FD, body Roboto 12px + Noto Sans SC smaller+0.45 opacity; GROUP for condition labels; sharedPluginData written (8090 bytes) |
| **M24** Code→Token mapping table | Triggered (task: restore from running Vue SFC code) — mapping table produced per handoff "反哺" section | ✅ | Table covers --brand-hover → UX/Brand/Hover; --bg-layer4 → Layer_4; confirmed this was done |
| **M25** State Color Discipline (hover ≠ brand) | Sidebar hover corrected from Layer_3 → UX/Brand/Hover @ 0.10 | ⚠️ | Fix applied but persistence unconfirmed (Q7 risk: was sidebar item a nested instance? If so, paint.opacity=0.10 may not persist). Needs probe. |
| **M26** BG vs Text Grey | Status bar inactive segment uses Layer_4 (corrected from grey-7) | ✅ | Bug fixed per handoff; root cause documented |
| **Q6** VECTOR arrow paths hand-drawn | 14 VECTORs use vectorPaths.data with manual arrowheads; stroke #33A4FD 2px | ✅ | Per M23 + Q6 compliance; reconnect map stored for future reconnects |
| **M6** Reusable pattern detection | 8 new file-local components created (MicroApp PlanB prefix) | ✅ | Appropriate scope — Plan B components are product-specific, not library candidates at this stage except per the backlog items already logged |

**Rule Compliance Score: 6/10** — M23, M24, M26, Q6 solid. M1 count discrepancy (5 vs 6 frames), M10 risk on self-drawn shapes, M25 persistence unverified, M21 3 dimensions unproven.

---

## 4. Anti-pattern Scan

| Anti-pattern | Found? | Severity | Location / Detail |
|---|---|---|---|
| **Treating reference as spec** (copying sibling without evaluating) | ❌ Not found | — | Plan B explicitly lists 8 deviations from Plan A (§15 of PRD); handoff confirms intentional divergence, not blind copy |
| **未评估 default 直接交付** (skipping Phase 0 component evaluation) | ❌ Not found | — | M0 table was produced pre-delivery |
| **Missing states shipped as complete** | ✅ FOUND | **P0** | 3 empty state scenarios (B, C, D), 1 loading state, error state, and filter-empty state are annotation-only or absent. Handoff is silent on these. Parent's self-review flagged loading/error/filter-empty — but did NOT flag that scenarios C and D (Overview-level empties) and the sort-active state are also missing. These are materially different visual states that require dedicated frames. |
| **"Annotation = design" substitution** | ✅ FOUND | **P1** | For 5 of the 9 annotations (#4 Sidebar Collapse, #5 New Session, #7 Pagination, #8 Empty States, #3 Persona Diff), the annotation card carries the design intent but the corresponding interactive state is not shown as a full rendered frame. Annotation #8 specifically covers 5 empty scenarios of which only 2 have visual frames. Text-only description in annotation ≠ design deliverable. |
| **A11y completely absent** | ✅ FOUND | **P1** | No accessibility annotation exists anywhere in Plan B. The PRD specifies `aria-sort` on table columns, `aria-disabled` on action buttons, and `data-tooltip` patterns. None of these are called out in the Figma annotations. Dev has no signal to implement. (Parent self-review acknowledged "A11y completely missing" — this audit confirms and upgrades to P1 given it spans both sorts and disabled states which are interaction-critical.) |
| **Pagination edge cases absent** | ✅ FOUND | **P1** | PRD §7.3 specifies boundary behavior (disabled prev on page 1, disabled next on last page, auto-clamp on filter). No frame shows these states. Pagination component from library is used, but the behavioral edge cases aren't annotated or shown. |
| **Data contract not in annotations** | ✅ FOUND | **P2** | Mock data spec (84 sessions / 8 apps / ~19 my-sessions / SCTE = 0 intentional) is documented in PRD §14 but not referenced in any annotation card. Dev must cross-reference PRD separately — annotation self-sufficiency is broken. Parent flagged this but did not fix it. |

**Anti-pattern Score: 7/10** (lower is worse — 5 distinct anti-patterns found, 1 P0, 3 P1, 1 P2)

---

## 5. Data Feasibility Audit

> Triggered: Monitoring / Operator Console with multiple derived values.

| Metric / Derived Value | Data Source | Feasibility | Notes |
|---|---|---|---|
| Aggregate status counters (Overview header chips: On-air 28 / Preview 19 / Analyzing 5 / Inactive 43) | sessions.js — count by status across scope | ✅ real | Numbers in mockup must sum to 95 (total sessions); 28+19+5+43=95 ✅ math checks |
| App-level active count badge (sidebar right side) | sessions.js — filter by appId + status != 'inactive' | ✅ real | Straightforward filter |
| App Overview Card 4-color status bar proportions | sessions.js — group by appId, count by status | ✅ real | Proportional bar; requires per-app status distribution |
| App Overview Card health summary (✓ N / ⚠ N / ✗ N) | sessions.js — group by appId, count by health | ✅ real | Requires health field |
| Session table row count "AV Sync (14 sessions)" | sessions.js — filter by appId | ✅ real | Verify against mock data; handoff says F2 shows 6 rows visible, 14 total — pagination covers rest |
| AutoRefresh countdown "Refresh in 24s" | setInterval derived from last refresh timestamp | ✅ real | Client-side only; no backend |
| "on air 12m 30s" duration display | now - startedAt (derived, reactive per §9.3) | ✅ real | `_justChanged` flash on autorefresh; spec §9.3 explicit |
| My-sessions row count (~19 sessions) | sessions.js — filter by `source === '@john.doe'` | ✅ real | PRD §14.3 confirms ~19 |
| **SCTE Insertion 0 sessions (intentional)** | sessions.js — SCTE sessions deliberately emptied | ✅ real | PRD §14.1 explicit; empty state frames correctly chosen |
| **Overview aggregate chips: scope changes on tab switch** | Vue reactive — same sessions.js filtered by scope | ⚠️ estimated | Mockup shows Admin All (95 sessions) and User My (~19). The mockup does not explicitly show what happens to aggregate chips when switching tabs mid-session — is re-count instant or debounced? No annotation covers this transition. |
| **Pagination "1-15 of 95"** | sessions.js total count + page math | ✅ real | Default 15/page; 95 total → 7 pages. "1/7" shown in spec §7.3 sample — math correct |
| **Filter + pagination interaction: auto-clamp** | derived from filtered count + current page | ⚠️ estimated | Spec §7.3 says "filter 后总数变化时自动 clamp 当前页避免空白" — no frame shows clamp behavior. Not annotated. |
| **Sort + pagination: reset to page 1** | derived | ⚠️ estimated | Spec §7.4 says "排序改变时自动回到第 1 页" — not shown, not annotated |
| **Health icon hover tooltip (errorMessage)** | sessions.js — errorMessage field | ✅ real | spec §8.1; errorMessage is nullable, tooltip content varies |
| **Action Cluster disabled state tooltip** ("Preview — Set Input or Output URL first") | inputUrl / outputUrl null check | ✅ real | Spec §8.5; but NO frame shows a disabled action button state |

**Data Feasibility Score: 5/10** — Core numeric values are coherent and sourced correctly from mock data. Three derived behavioral interactions (scope-switch aggregate recalculation, filter-clamp, sort-reset) are unvalidated and unannotated. Zero frames demonstrate disabled states or edge case data presentations.

---

## 6. Recommended Next Actions

| Priority | Severity | Action | Owner |
|---|---|---|---|
| 🔴 P0 | Critical | **Add 5 missing state frames**: Loading (sidebar + overview + table skeletons), Filter-Empty (scenario B), Overview Empty-C (my-sessions 0), Overview Empty-D (all-sessions 0), and 1 sort-active frame (Event Name asc). PRD §10.4 explicitly defines all 5 empty scenarios; only 2 have frames. | AI |
| 🔴 P0 | Critical | **Add App Picker dropdown mid-state frame**: Annotation #5 describes + New Session opening a picker but no frame shows the picker open. This is a primary flow interaction with no visual reference. | AI |
| 🔴 P1 | High | **Add A11y annotation card** (#10): Cover `aria-sort` on sortable columns (3-state cycle), `aria-disabled` on action buttons with URL-missing condition, `data-tooltip` pattern and the sidebar collapsed tooltip right-direction exception. Spec §7.4, §8.5, §11 all have explicit a11y requirements. | AI |
| 🔴 P1 | High | **Add Action Cluster state matrix annotation** (#11): The Bidirectional / Analyzer / Generator × status (inactive / preview / on-air / analyzing) matrix from spec §8.4 is the most complex interaction logic in Plan B. It has no annotation. Dev will need to cross-reference raw spec. | AI |
| 🔴 P1 | High | **Probe and confirm M25 fix persistence**: Verify UX/Brand/Hover @ 0.10 on Sidebar Item hover state. If sidebar item is a nested instance, M25 + Q7 interaction means the paint.opacity=0.10 may have been reset to 1.0 since the fix was applied. Run probe script against `3705:5060` (MicroApp PlanB Sidebar Item) and all instances in F1-F6. | AI |
| 🟡 P1 | High | **Verify M1: 6 frames, not 5, need Top Bar library instance**. Handoff text says "5 frames" but 6 frames are listed in the index. Confirm F6 (`3797:7520` Empty A-admin) uses library Top Bar, not a copied element. | AI |
| 🟡 P1 | High | **Fix Row 1 height mismatch**: F1 (Admin Overview) is 1920×1080; F3 (User Overview) is 1920×1460. In the 3×2 paired grid, these will not bottom-align. Either resize F1 to 1920×1460 (add empty space below Overview grid) or document the intentional height difference explicitly in annotation #2. Currently silent. | AI + User decision |
| 🟡 P2 | Medium | **Add Sort state annotation (#12)**: The 3-state sort cycle (none → asc ▲ → desc ▼ → reset) with opacity rules for sort indicator (0.35 / 0.6 / 1.0 / 0.2) is a Plan B differentiator vs Plan A's deferred sort. Add annotation and show a sort-active frame. | AI |
| 🟡 P2 | Medium | **Add data contract to annotation #8 or new card**: Mock data spec (84 sessions, SCTE=0 intentional, 8 apps, ~19 my-sessions for john.doe) should appear in at least one annotation card so devs can build against it without reading spec.md separately. | AI |
| 🟡 P2 | Medium | **Add Loading states annotation (#13)**: 800ms initial skeleton / 650ms refresh sweep / 120ms view-fade transition are specific enough to require annotation. AutoRefresh annotation #6 partially covers the sweep but the skeleton loading is not addressed. | AI |
| 🟢 P2 | Low | **M10 probe for self-drawn shapes** (BRIDGE-MOCKUP-004 workaround): Empty state placeholder shape and AutoRefresh pause icon are self-drawn. Verify path fills use Color Variable bindings not hex literals. If hex literals, bind to `Color Type/Icon/Default`. | AI |
| 🟢 P3 | Low | **Move Pagination to 4th position in filter bar**: PRD §7.2 orders filter bar items as: Search → Status chips → + New Session (my-sessions only) → Pagination (always rightmost). Verify F2/F4 filter bar order matches this exactly. Annotation #7 explains pagination replaces scroll but doesn't show the filter bar ordering. | AI verification |
| 🟢 P3 | Low | **Tooltip direction annotation missing**: Spec §11.2 specifies collapsed sidebar tooltips fire rightward (not downward). Annotation #4 covers sidebar collapse but tooltip direction behavior is a dev implementation detail that should be explicitly called out. | AI |

---

## Walkthrough complete.

**Issues found**: 3 P0-critical / 7 P1-high / 4 P2-medium / 2 P3-low = **16 total**

**Verdict: Fix before ship.** The 6 delivered frames are visually coherent and structurally correct. However, 5+ mandatory state frames are absent from a PRD that explicitly defined them, the most complex interaction (Action Cluster matrix) is undocumented, A11y is entirely missing, and one token fix (M25 hover persistence) is unconfirmed. These are not polish issues — they block dev from implementing complete behavior.

**Parent's self-review gaps (items parent missed despite 3-iteration session):**
1. Parent did NOT flag missing Overview Empty-C and Empty-D scenarios (only called out Loading/Error/Filter-empty).
2. Parent did NOT flag the App Picker dropdown mid-state as a missing frame.
3. Parent did NOT flag the F1 vs F3 height mismatch (1080 vs 1460) in the paired layout.
4. Parent did NOT flag the sort-active state as a missing annotated interaction.
5. Parent did NOT flag M1 frame count discrepancy (5 vs 6 in top bar claim).
6. Parent self-identified A11y missing but did not escalate to P1 severity or propose resolution.
7. Parent did NOT flag the Action Cluster state matrix as absent from annotations.
