Skip to content

Persist Tiles slots and never-show by stable Zoom identity (#479) - #490

Merged
iamfatness merged 1 commit into
mainfrom
codex/fix-479-tiles-identity
Sep 11, 2026
Merged

iamfatness merged 1 commit into
mainfrom
codex/fix-479-tiles-identity

Conversation

@iamfatness

Copy link
Copy Markdown
Owner

Fixes #479. Owner, live: Tiles showed Unavailable source and never-show silently kept Jason Bache off the wall. Saved DynamicGallery keys were zoom:<per-session userId>.

The bug. Zoom user IDs are reassigned every meeting. The same integer can be a different person. Manual slots and never-show therefore pointed at people who were gone, or excluded/seated the wrong person next meeting.

The fix

  • Persist zoom-pid:<SDK GetPersistentId> when the engine provides it, else zoom-name:<display name>.
  • Resolve to this meeting's zoom:<sessionId> at use time (membership, never-show).
  • Leftover zoom:<sessionId> is never applied to whoever inherited that integer.
  • Stale entries are labeled not in this meeting. Clear stale entries is on the Tiles panel.
  • Engine roster + spine snapshot carry persistentId so pid keys survive Engine-on.

Tests. Live case: slot zoom:33556480 does not seat a stranger; Jason Bache never-show follows by name. Assigning in a new meeting does not revalidate leftover session ids. Spine merger keeps PersistentId. WinUI Tiles identity/membership 26 passed; MediaCore merger tests passed.

Show Input audit. Slot ParticipantId is still a session id at runtime (correct for the current meeting). Persisting those ids across meetings is the same class of bug and is not rewritten in this PR.

Review. First pass: BoundMeetingId overwrite, spine dropping persistentId, Clear stale unwired. Those are fixed.

Live check with the batch beta. One beta at the end; ask before publish/install.

Manual slots and exclusions stored zoom:<sessionUserId>, which Zoom
reassigns every meeting. Persist zoom-pid (SDK GetPersistentId) or
zoom-name, and resolve to this meeting''s session id at use time.
Leftover zoom:<id> is never applied to whoever inherited that integer.

Stale entries are labeled "not in this meeting" with a Clear stale
entries button. The engine roster and spine snapshot now carry
persistentId so pid keys survive Engine-on.
@iamfatness
iamfatness merged commit eefee0c into main Sep 11, 2026
18 of 19 checks passed
iamfatness added a commit that referenced this pull request Sep 12, 2026
* docs(backlog): reconcile with main and the issue tracker

Three things the file and the tracker disagreed on, all verified against
main @ eefee0c and `gh issue`/`gh pr` state. No re-ranking.

- T1.17 (#479) was still the next open Tier 1 item. It is closed by #490,
  which is on main. Moved to Done; the open order renumbers 1-3, so the
  top of the list is now T1.11 (#449), T1.12 (#475), T1.13 (#473).
- T3.8 (#482, ISO crops/pads a guest on a mid-recording frame-size change)
  was filed 2026-09-11 with no tier row, against this file's own rule that
  a new defect gets an issue AND a row. Placed in Tier 3 as a proposal,
  labelled as such — the tier is not an owner ruling.
- The "shipped in beta-2026-09-11-404602b" line covered the whole Done
  table, but T1.14-T1.17 (#487, #488, #489, #490) merged after that beta
  was cut. Each one's Done row asks for a "live check with the batch
  beta", and no such beta exists yet. Said so explicitly.

Also noted why Tier 3 has no T3.6 (#465 was promoted to T1.15).

Separately, #432 (T1.5) was closed on GitHub: #462 said "Fixes #432" and
merged as 3a3bedf but never auto-closed it, so the issue contradicted
this file's Done row. #457 (T1.7) has the same unclosed-by-#462 shape but
is left open deliberately — its own PR says the real check is a long
in-meeting close, which has not run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014yuH7EMvWCWdkhvevrtMyJ

* docs(backlog): the batch beta exists; T1.11 step 2 shipped

beta-2026-09-12-aac2d98 is cut and published, so the "live check with the
batch beta" that T1.14-T1.17 each name is now possible. It is still OWED:
none of those fixes, nor T1.11 step 2, has been seen in a real meeting, and
none may be ranked verified until it has. Build provenance recorded next to
the claim so a later reader can tell what the beta actually proves.

T1.11 stays at order 1 and drops from "S then M" to "S": #492 shipped step 2
(the warm cue decoder is handed to Program), so a clip cued in Preview no
longer flashes. Step 1 remains for a clip taken without a cue, which has no
warm decoder to adopt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014yuH7EMvWCWdkhvevrtMyJ

---------

Co-authored-by: Claude <noreply@anthropic.com>
@iamfatness
iamfatness deleted the codex/fix-479-tiles-identity branch October 1, 2026 23:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Tiles manual slots and "never show" are saved by Zoom's per-session user ID, so they go stale or hit the wrong person in the next meeting

1 participant