Skip to content

Portal course-hero pill component leaks a Razor comment into rendered markup, crashing Blazor circuits #5733

Description

@systemorph-com

What is failing

Blazor Server circuits in the memex portal are crashing with unhandled AggregateExceptions from Renderer.InvokeRenderCompletedCallsAfterUpdateDisplayTask. The dominant variant is a genuine product defect: a Razor comment block (@* ... *@) is leaking into the rendered markup — the browser rejects it as an invalid element/attribute name (InvalidCharacterError: Invalid qualified name: '@* 🚨 The glyph FOLLOWS THE PILL, not the theme accent…' / '… is not a valid attribute name'), which kills the circuit and shows the user an error/reconnect. The comment text names a course-hero "pill" component with a FluentUI icon tinted via WithColor (fill: var(--accent-fill-rest) override).

Probable cause

A malformed or unbalanced @* ... *@ comment inside that component's Razor markup (likely broken by an emoji or an embedded *@ sequence inside the comment text, or placed inside a tag where the Razor parser doesn't treat it as a comment) is being emitted as literal attribute/element text. Confidence: high for the mechanism (the verbatim comment text appears in the DOM as an attribute name in multiple samples); medium for the exact file, which I could not locate in the mesh — search for the string The glyph FOLLOWS THE PILL in the course-hero / pill component sources (the edu/training course-hero components are the likely home).

Note this log site folds several other, unrelated render failures (no browser renderer with ID 1, No element is currently associated with component, removeChild on null) — those are mostly disconnect-race noise; the comment-leak variant is the one worth fixing.

Impact

14 occurrences over ~5 weeks across 6 portal pods — low volume, but each event crashes a live user's Blazor circuit (browser session shows "reconnecting"/error and the circuit state is lost). User-visible intermittent failure of a secondary path: sev:M.

Where to look

Grep the portal's Razor sources for glyph FOLLOWS THE PILL (course-hero pill component, FluentUI icon + WithColor); fix the comment so it is not emitted into markup, and add a smoke render test that asserts the rendered HTML contains no @*.


Evidence

Fingerprint ac55e40c68f3a222
Category Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost
Severity Error
Exception System.AggregateException
Namespace memex-cloud
Pods memex-portal-deployment-589ff8f895-c8qvj, memex-portal-deployment-676f69bc68-4c9gs, memex-portal-deployment-868d46474d-w8dc2, memex-portal-deployment-858f57dc6-8zlfh, memex-portal-deployment-584db8fc55-vtslp, memex-portal-deployment-584db8fc55-m2g2s
Occurrences 14
First seen 2026-08-18 13:51:55Z
Last seen 2026-09-25 08:45:40Z
Routing not determined — no configured route matches the category Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost. This repository is the configured fallback, not a finding about who owns the fault; the category names the LOGGER, which may not be the subject.
Recent log lines
2026-08-20 08:40:38Z memex-portal-deployment-868d46474d-w8dc2 fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]
      Unhandled exception in circuit '9879xW2i0cNMbRiwlTnRiWlUGFB7oDUFLVo6b8CDOJs'.
      System.AggregateException: One or more errors occurred. (Error: There is no browser renderer with ID 1.)
       ---> System.InvalidOperationException: Error: There is no browser renderer with ID 1.
         at Microsoft.AspNetCore.Components.RenderTree.Renderer.InvokeRenderCompletedCallsAfterUpdateDisplayTask(Task updateDisplayTask, Int32[] updatedComponents)
         --- End of inner exception stack trace ---
2026-08-20 08:40:38Z memex-portal-deployment-868d46474d-w8dc2 fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]
      Unhandled exception in circuit '9879xW2i0cNMbRiwlTnRiWlUGFB7oDUFLVo6b8CDOJs'.
      System.AggregateException: One or more errors occurred. (Error: There is no browser renderer with ID 1.)
       ---> System.InvalidOperationException: Error: There is no browser renderer with ID 1.
         at Microsoft.AspNetCore.Components.RenderTree.Renderer.InvokeRenderCompletedCallsAfterUpdateDisplayTask(Task updateDisplayTask, Int32[] updatedComponents)
         --- End of inner exception stack trace ---
2026-08-25 06:27:28Z memex-portal-deployment-858f57dc6-8zlfh fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]
      Unhandled exception in circuit '78wYXRzF-H22S_a_EVvSQsIcZyRpznGyKRGCJKMHpCc'.
      System.AggregateException: One or more errors occurred. (Error: There is no browser renderer with ID 1.)
       ---> System.InvalidOperationException: Error: There is no browser renderer with ID 1.
         at Microsoft.AspNetCore.Components.RenderTree.Renderer.InvokeRenderCompletedCallsAfterUpdateDisplayTask(Task updateDisplayTask, Int32[] updatedComponents)
         --- End of inner exception stack trace ---
2026-08-25 06:27:28Z memex-portal-deployment-858f57dc6-8zlfh fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]
      Unhandled exception in circuit '78wYXRzF-H22S_a_EVvSQsIcZyRpznGyKRGCJKMHpCc'.
      System.AggregateException: One or more errors occurred. (Error: There is no browser renderer with ID 1.)
       ---> System.InvalidOperationException: Error: There is no browser renderer with ID 1.
         at Microsoft.AspNetCore.Components.RenderTree.Renderer.InvokeRenderCompletedCallsAfterUpdateDisplayTask(Task updateDisplayTask, Int32[] updatedComponents)
         --- End of inner exception stack trace ---
2026-08-25 06:27:28Z memex-portal-deployment-858f57dc6-8zlfh fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]
      Unhandled exception in circuit '78wYXRzF-H22S_a_EVvSQsIcZyRpznGyKRGCJKMHpCc'.
      System.AggregateException: One or more errors occurred. (Error: There is no browser renderer with ID 1.)
       ---> System.InvalidOperationException: Error: There is no browser renderer with ID 1.
         at Microsoft.AspNetCore.Components.RenderTree.Renderer.InvokeRenderCompletedCallsAfterUpdateDisplayTask(Task updateDisplayTask, Int32[] updatedComponents)
         --- End of inner exception stack trace ---
2026-09-11 20:16:22Z memex-portal-deployment-584db8fc55-vtslp fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]
      Unhandled exception in circuit 'xMf4KlVU7br_abE4jubRRK-3ifT2lgszCGLNxHvRVrg'.
      System.AggregateException: One or more errors occurred. (InvalidCharacterError: Invalid qualified name: '@* 🚨 The glyph FOLLOWS THE PILL, not the theme accent. FluentUI writes
                         `fill: var(--accent-fill-rest)` inline on the icon's svg, which a stylesheet
                         cannot beat without !important — and on a caller-coloured surface (a course hero
                         sets --cta-bg/--cta-fg from its own palette) an accent-filled chevron can land
                         near-invisible on the pill. Now that the word is gone this glyph is the half's
                         ONLY visible content, so an unreadable fill IS the coloured stub coming back.
                         WithColor sets the fill inline, where it wins. *@')
       ---> System.InvalidOperationException: InvalidCharacterError: Invalid qualified name: '@* 🚨 The glyph FOLLOWS THE PILL, not the theme accent. FluentUI writes
                         `fill: var(--accent-fill-rest)` inline on the icon's svg, which a stylesheet
                         cannot beat without !important — and on a caller-coloured surface (a course hero
                         sets --cta-bg/--cta-fg from its own palette) an accent-filled chevron can land
                         near-invisible on the pill. Now that the word is gone this glyph is the half's
                         ONLY visible content, so an unreadable fill IS the coloured stub coming back.
                         WithColor sets the fill inline, where it wins. *@'
         at Microsoft.AspNetCore.Components.RenderTree.Renderer.InvokeRenderCompletedCallsAfterUpdateDisplayTask(Task updateDisplayTask, Int32[] updatedComponents)
         --- End of inner exception stack trace ---
2026-09-11 20:16:31Z memex-portal-deployment-584db8fc55-vtslp fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]
      Unhandled exception in circuit 'vvJtAqoaWEubInFlRp80G8BN9rj3hWHbp9mI4OmmlrM'.
      System.AggregateException: One or more errors occurred. (InvalidCharacterError: Invalid qualified name: '@* 🚨 The glyph FOLLOWS THE PILL, not the theme accent. FluentUI writes
                         `fill: var(--accent-fill-rest)` inline on the icon's svg, which a stylesheet
                         cannot beat without !important — and on a caller-coloured surface (a course hero
                         sets --cta-bg/--cta-fg from its own palette) an accent-filled chevron can land
                         near-invisible on the pill. Now that the word is gone this glyph is the half's
                         ONLY visible content, so an unreadable fill IS the coloured stub coming back.
                         WithColor sets the fill inline, where it wins. *@')
       ---> System.InvalidOperationException: InvalidCharacterError: Invalid qualified name: '@* 🚨 The glyph FOLLOWS THE PILL, not the theme accent. FluentUI writes
                         `fill: var(--accent-fill-rest)` inline on the icon's svg, which a stylesheet
                         cannot beat without !important — and on a caller-coloured surface (a course hero
                         sets --cta-bg/--cta-fg from its own palette) an accent-filled chevron can land
                         near-invisible on the pill. Now that the word is gone this glyph is the half's
                         ONLY visible content, so an unreadable fill IS the coloured stub coming back.
                         WithColor sets the fill inline, where it wins. *@'
         at Microsoft.AspNetCore.Components.RenderTree.Renderer.InvokeRenderCompletedCallsAfterUpdateDisplayTask(Task updateDisplayTask, Int32[] updatedComponents)
         --- End of inner exception stack trace ---
2026-09-11 21:28:47Z memex-portal-deployment-584db8fc55-m2g2s fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]
      Unhandled exception in circuit 'Jeq3AyForljzc_WbI5HmMHXDY8lClkZ8kWwz3J5RoqM'.
      System.AggregateException: One or more errors occurred. (InvalidCharacterError: Failed to execute 'setAttribute' on 'Element': '@* 🚨 The glyph FOLLOWS THE PILL, not the theme accent. FluentUI writes
                         `fill: var(--accent-fill-rest)` inline on the icon's svg, which a stylesheet
                         cannot beat without !important — and on a caller-coloured surface (a course hero
                         sets --cta-bg/--cta-fg from its own palette) an accent-filled chevron can land
                         near-invisible on the pill. Now that the word is gone this glyph is the half's
                         ONLY visible content, so an unreadable fill IS the coloured stub coming back.
                         WithColor sets the fill inline, where it wins. *@' is not a valid attribute name.)
       ---> System.InvalidOperationException: InvalidCharacterError: Failed to execute 'setAttribute' on 'Element': '@* 🚨 The glyph FOLLOWS THE PILL, not the theme accent. FluentUI writes
                         `fill: var(--accent-fill-rest)` inline on the icon's svg, which a stylesheet
                         cannot beat without !important — and on a caller-coloured surface (a course hero
                         sets --cta-bg/--cta-fg from its own palette) an accent-filled chevron can land
                         near-invisible on the pill. Now that the word is gone this glyph is the half's
                         ONLY visible content, so an unreadable fill IS the coloured stub coming back.
                         WithColor sets the fill inline, where it wins. *@' is not a valid attribute name.
         at Microsoft.AspNetCore.Components.RenderTree.Renderer.InvokeRenderCompletedCallsAfterUpdateDisplayTask(Task updateDisplayTask, Int32[] updatedComponents)
         --- End of inner excepti…[truncated]
2026-09-11 21:28:47Z memex-portal-deployment-584db8fc55-m2g2s fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]
      Unhandled exception in circuit 'Jeq3AyForljzc_WbI5HmMHXDY8lClkZ8kWwz3J5RoqM'.
      System.AggregateException: One or more errors occurred. (Error: No element is currently associated with component 315)
       ---> System.InvalidOperationException: Error: No element is currently associated with component 315
         at Microsoft.AspNetCore.Components.RenderTree.Renderer.InvokeRenderCompletedCallsAfterUpdateDisplayTask(Task updateDisplayTask, Int32[] updatedComponents)
         --- End of inner exception stack trace ---
2026-09-25 08:45:40Z memex-portal-deployment-589ff8f895-c8qvj fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]
      Unhandled exception in circuit '7OEPLe7VeRZW1kabIqJsk5s_6S4D37Pk81wwmsDdtLM'.
      System.AggregateException: One or more errors occurred. (TypeError: Cannot read properties of null (reading 'removeChild'))
       ---> System.InvalidOperationException: TypeError: Cannot read properties of null (reading 'removeChild')
         at Microsoft.AspNetCore.Components.RenderTree.Renderer.InvokeRenderCompletedCallsAfterUpdateDisplayTask(Task updateDisplayTask, Int32[] updatedComponents)
         --- End of inner exception stack trace ---

Re-addressed by the current identity function: this incident inherited eb0ae394a6b6a0e6 (Systemorph/MeshWeaver.Plugins#1796). Those nodes are superseded and will not fold, file or comment again.

Opened automatically from Admin/_LogIncident/ac55e40c68f3a222. Recurrences are folded into this issue rather than opening new ones.
It also stands for the whole log site 0523c30d8665a321: other fingerprints of this site fold in here as comments rather than opening tickets of their own.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingsev:MMedium - secondary path broken, or easy workaround

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions