Operator-reported, live on dev (portal-news GOAL views #12211/#12213)
Three runtime/visual defects in the merged portal "news" views. The PR view (#12213) and Discussions view (#12211) diverged from the working tickets view; the fix is to mirror tickets.
1. Deep-link does not activate the correct tab (discussions + pulls)
Loading #/news/discussions/<id> or #/news/pulls/<id> does NOT activate the tab on initial load — only manual selection works. Tickets/Releases work because their route handlers set a hardcoded activeIndex; discussions/pulls call setActiveIndexByRoute() → items.findIndex(i => i.header?.route === route), which returns -1 on initial load (items/headers not yet resolved when the route fires). Fix: hardcoded indices matching the tab order (discussions=4, pulls=5), mirroring the working tickets(2)/releases(3) handlers.
2. PR view tree JSON structure ≠ tickets
pulls.json is chunk-folder-based (childrenUrl lazy chunks) while tickets.json is a flat tree (leaves with path directly under state-group roots). The inconsistency is wrong — pulls should mirror the tickets flat shape. (The lazy/chunked migration, if wanted, must be done consistently for BOTH views, tracked separately as #12219 — not pulls-only.)
3. PR view theming broken (avatars full-size, timeline overlaps content)
pulls/Component.mjs emits different CSS classes / DOM than tickets/Component.mjs, so the timeline+avatar styling doesn't apply → full-size profile images + timeline overlapping content. Fix: align the pulls DOM classes (e.g. .neo-timeline-item.comment) + ensure the timeline/avatar SCSS applies to the pulls view (share or mirror the tickets styles).
Acceptance Criteria
Root context
The pulls view shipped without L3 (in-browser) verification (PR #12287 evidence noted L3 as residual). Mirror the tickets view across structure + theming + routing.
Operator-reported, live on dev (portal-news GOAL views #12211/#12213)
Three runtime/visual defects in the merged portal "news" views. The PR view (#12213) and Discussions view (#12211) diverged from the working tickets view; the fix is to mirror tickets.
1. Deep-link does not activate the correct tab (discussions + pulls)
Loading
#/news/discussions/<id>or#/news/pulls/<id>does NOT activate the tab on initial load — only manual selection works. Tickets/Releases work because their route handlers set a hardcodedactiveIndex; discussions/pulls callsetActiveIndexByRoute()→items.findIndex(i => i.header?.route === route), which returns -1 on initial load (items/headers not yet resolved when the route fires). Fix: hardcoded indices matching the tab order (discussions=4, pulls=5), mirroring the working tickets(2)/releases(3) handlers.2. PR view tree JSON structure ≠ tickets
pulls.jsonis chunk-folder-based (childrenUrllazy chunks) whiletickets.jsonis a flat tree (leaves withpathdirectly under state-group roots). The inconsistency is wrong — pulls should mirror the tickets flat shape. (The lazy/chunked migration, if wanted, must be done consistently for BOTH views, tracked separately as #12219 — not pulls-only.)3. PR view theming broken (avatars full-size, timeline overlaps content)
pulls/Component.mjsemits different CSS classes / DOM thantickets/Component.mjs, so the timeline+avatar styling doesn't apply → full-size profile images + timeline overlapping content. Fix: align the pulls DOM classes (e.g..neo-timeline-item.comment) + ensure the timeline/avatar SCSS applies to the pulls view (share or mirror the tickets styles).Acceptance Criteria
#/news/discussions/<id>and#/news/pulls/<id>activates the correct tab on initial load.pulls.jsontree structure matches thetickets.jsonshape.Root context
The pulls view shipped without L3 (in-browser) verification (PR #12287 evidence noted L3 as residual). Mirror the tickets view across structure + theming + routing.