Skip to content

Stop lower-third secondary line refreshing to inconsistent Guest text #592

Description

@iamfatness

Owner report

The lower third renders, but its second line (“Guest”) refreshes while on air and sometimes briefly shows a lowercase “g”. This is visible output.

Current evidence

StudioViewModel.ResolveProgramLowerThirdSource falls back from participant Title to RoleLabel. Same-source lower-third state can refresh. The source of the partial text or repeated update has not yet been established.

Done when

  • Capture a frame sequence and trace that distinguishes participant metadata, shell key updates, and native rendering.
  • With unchanged source and metadata, the whole graphic remains stable. A real edit updates cleanly once without a partial text frame or spurious animation.
  • Fallback text uses consistent casing; no fragment reaches Preview, Program, recording, or stream.
  • Add a focused regression for the cause and validate an installed build.

Activity

  1. iamfatness commented on Sep 28, 2026

    @iamfatness
    OwnerAuthor

    2026-09-28 diagnosis against main 6443c81f before changing code: the Zoom engine roster emits canonical Host/Guest; LiveProductionSync.MapRawParticipants carries complete title/role strings; UpdateProgramLowerThirdKey builds a complete immutable LowerThirdKeyState; the sync command carries SourceName/Title/Org together; native setOverlayAsset updates under the core command/render mutex; DirectWrite finishes a full texture before cache publication. Existing tests cover stable on-air key phase and content signatures. These facts do not yet identify which stage produced the reported one-character g.

    The old launch log records source key transitions but not the resolved title, raster signature, or the affected frame. There is no captured failing frame sequence for this report. A speculative casing or animation change would not meet the issue's done condition. Next diagnostic capture needs one actual incident's roster Title/Role, serialized key Title/Org, native overlay content signature, and Program frame IDs on the same timeline. Installed visual acceptance remains MISSING_EVIDENCE; leaving #592 open while other owner-dispatched work proceeds.

  2. iamfatness commented on Oct 10, 2026

    @iamfatness
    OwnerAuthor

    Development follow-up: #593 is implemented separately in draft #845. It adds explicit source default/custom/hidden secondary text and an atomic editor Apply, but is not evidence that this fragment's cause is fixed.

    Against the current installed grading/framer native Release baseline (34b0afc), six LowerThird-filtered native tests and the D3D11 overlay cache reuse/invalidation test pass. The initial multi-pattern filter produced zero tests because this repository's small test runner does not implement colon-separated GoogleTest filters; it was rerun as supported separate filters. These results cover animation/display-tick ownership, first-frame source suppression, configured timing, settled build-out and native overlay raster behavior. They do not reproduce the reported lowercase fragment or provide its required frame sequence.

    Code inspection: same-target settled shell keys refresh in place; the native raster draws complete strings into an offscreen texture, rather than revealing one character per refresh. Neither observation rules out metadata or animation-state changes in the live report. The next qualification needs synchronized source metadata, shell key/phase changes, native overlay state, and actual output frames around the event. Root cause remains unconfirmed; issue stays open.

  3. iamfatness commented on Oct 10, 2026

    @iamfatness
    OwnerAuthor

    Confirmed the owner's test-meeting reproduction on installed beta 34b0afc. The same source's native overlay title switched guest -> Guest -> guest while raw Zoom role stayed Guest and its title stayed absent. Lowercase spine roles and display-cased SDK roles are copied into fallback titles by the same mapper. PR #846 normalizes that boundary and preserves authored text.

    Installed-path comparison: patched library yielded Guest in all 243 observations / 50 seconds with a 45-second webcam capture. Restoring the original library reproduced the changes: 150 guest / 21 Guest observations / 35 seconds, with a 30-second webcam capture. Original installed library restored with matching hash, test meeting left, app closed. 2,357 MediaCore tests pass; nine new regression cases.

    Issue remains open: the casing root cause is established and the fix is in draft, but the broader partial-glyph/per-frame recording and streaming acceptance has not been completed. Evidence and scope: docs/qa/lower-third-casing-2026-10-09.md in PR #846.

  4. added a commit that references this issue on Oct 10, 2026
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

    backlogRanked in docs/BACKLOG.md

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions