Context
Operator observation after PR #12316 review/approval: the GitHub Actions / bot avatar glyph now renders nicely inside the Portal news timelines, but the same actor fallback is still needed inside the "On this page" summary views.
This ticket captures the follow-up while the portal-news context is hot. It belongs under Epic #12204 and follows #12315 / PR #12316, which routed timeline avatars through Portal.view.content.Component.getAvatarUrl() / getAvatarHtml().
The Problem
The timeline DOM now has a no-network Font Awesome GitHub glyph for bot/app actors such as github-actions and [bot] users. The page summary surface is a separate consumer: timeline parsers populate the sections store with records that include image, and src/app/content/SectionsList.mjs renders record.image as a plain <img>.
That means the summary list can still render bot/app actors as image URLs instead of the glyph fallback. For bot logins whose github.com/<login>.png avatar 404s, the timeline looks correct while the "On this page" summary can remain visually inconsistent or broken.
The Architectural Reality
Portal.view.content.Component.getAvatarUrl(user) owns bounded GitHub avatar URLs (?size=40).
Portal.view.content.Component.getAvatarHtml(user) owns the normal-user image vs bot/app Font Awesome glyph decision.
- Tickets, pulls, and discussions publish timeline entries into the shared
sections store.
src/app/content/SectionsList.mjs is the shared summary-list renderer and currently treats record.image as an image URL only.
This is a consumer-shape gap between the timeline HTML avatar renderer and the summary-list record renderer, not a new avatar-source policy.
The Fix
Add a summary-list-compatible representation for bot/app avatars and route the Portal news summary rows through it. The implementation should keep the timeline/helper contract as the source of truth and avoid duplicating the bot actor list in SectionsList.
Likely shapes to evaluate during implementation:
- Add a stable record field emitted by the Portal news parsers, such as
avatarHtml, iconCls, or an explicit avatarType, and teach SectionsList to render that richer shape when present.
- Or add a Portal-specific summary item renderer that can call the same helper path without forcing generic
SectionsList to learn GitHub-specific bot rules.
The chosen shape should preserve normal-user ?size=40 thumbnails and use the existing Font Awesome GitHub glyph for bot/app actors.
Acceptance Criteria
Out of Scope
- Changing the avatar source host.
- Expanding or redesigning the bot/app actor list beyond what #12316 already established.
- Broader visual redesign of the sections summary panel.
Related
- Epic #12204 — Portal news views & chunked lazy-load tree.
- #12315 / PR #12316 — timeline avatar full-res/bot fallback fix.
Origin Session ID: f3165fbb-7c0e-4790-8a97-b2557f5340e3
Handoff Retrieval Hint: query_raw_memories("#12316 #12315 Portal news avatar glyph On this page summary SectionsList getAvatarHtml getAvatarUrl")
Context
Operator observation after PR #12316 review/approval: the GitHub Actions / bot avatar glyph now renders nicely inside the Portal news timelines, but the same actor fallback is still needed inside the "On this page" summary views.
This ticket captures the follow-up while the portal-news context is hot. It belongs under Epic #12204 and follows #12315 / PR #12316, which routed timeline avatars through
Portal.view.content.Component.getAvatarUrl()/getAvatarHtml().The Problem
The timeline DOM now has a no-network Font Awesome GitHub glyph for bot/app actors such as
github-actionsand[bot]users. The page summary surface is a separate consumer: timeline parsers populate thesectionsstore with records that includeimage, andsrc/app/content/SectionsList.mjsrendersrecord.imageas a plain<img>.That means the summary list can still render bot/app actors as image URLs instead of the glyph fallback. For bot logins whose
github.com/<login>.pngavatar 404s, the timeline looks correct while the "On this page" summary can remain visually inconsistent or broken.The Architectural Reality
Portal.view.content.Component.getAvatarUrl(user)owns bounded GitHub avatar URLs (?size=40).Portal.view.content.Component.getAvatarHtml(user)owns the normal-user image vs bot/app Font Awesome glyph decision.sectionsstore.src/app/content/SectionsList.mjsis the shared summary-list renderer and currently treatsrecord.imageas an image URL only.This is a consumer-shape gap between the timeline HTML avatar renderer and the summary-list record renderer, not a new avatar-source policy.
The Fix
Add a summary-list-compatible representation for bot/app avatars and route the Portal news summary rows through it. The implementation should keep the timeline/helper contract as the source of truth and avoid duplicating the bot actor list in
SectionsList.Likely shapes to evaluate during implementation:
avatarHtml,iconCls, or an explicitavatarType, and teachSectionsListto render that richer shape when present.SectionsListto learn GitHub-specific bot rules.The chosen shape should preserve normal-user
?size=40thumbnails and use the existing Font Awesome GitHub glyph for bot/app actors.Acceptance Criteria
github-actions,dependabot, and[bot]users render the Font Awesome GitHub glyph instead of a broken image request.?size=40avatar images.Out of Scope
Related
Origin Session ID: f3165fbb-7c0e-4790-8a97-b2557f5340e3
Handoff Retrieval Hint:
query_raw_memories("#12316 #12315 Portal news avatar glyph On this page summary SectionsList getAvatarHtml getAvatarUrl")