Symptom / cause (read, not run).
- First-frame evidence:
ZoomVideoFrameObserved is set from SourceSnapshot.LiveFrameCount, which the Zoom capture merger sets to the participant count, so joining with one participant "proves" a video frame (FirstFrameValidationEvidenceBuilder.cs:105, 128; ZoomCaptureSnapshotMerger.cs:23-39). ProgramTransport.FrameNumber > 0 is treated as a preview frame observed.
- Support bundle: render plan always "idle",
DeliveredFrameCount always 0, OperatorActions and EventLog always empty (SupportBundleBuilder.cs:205, 212, 312-324); telemetry CaptureSourceCount always 0.
- The Settings "Feeds" row alternates between "idle, subscribed=0" and "subscribed" because each sync resets
SourceSnapshot and each merge restores it.
rosterEpoch/rosterRevision are emitted by the core but not bound, so every sync snapshot is rejected by ZoomRosterSnapshotPolicy and RosterStaleSnapshots increments about four times a second. A real stale-roster sequence (join without leaving, then a failed join) looks possible but was not confirmed.
Done when. Video evidence comes from frame events or spine counters; empty bundle sections are filled from core nodes or dropped; roster epoch/revision are bound and the revision-0 case is decided explicitly.
Found by the 2026-10-02 half-wired-feature audit, by reading code on main (8b84a8f). Not yet reproduced in the running app unless stated.
Symptom / cause (read, not run).
ZoomVideoFrameObservedis set fromSourceSnapshot.LiveFrameCount, which the Zoom capture merger sets to the participant count, so joining with one participant "proves" a video frame (FirstFrameValidationEvidenceBuilder.cs:105, 128;ZoomCaptureSnapshotMerger.cs:23-39).ProgramTransport.FrameNumber > 0is treated as a preview frame observed.DeliveredFrameCountalways 0,OperatorActionsandEventLogalways empty (SupportBundleBuilder.cs:205, 212, 312-324); telemetryCaptureSourceCountalways 0.SourceSnapshotand each merge restores it.rosterEpoch/rosterRevisionare emitted by the core but not bound, so every sync snapshot is rejected byZoomRosterSnapshotPolicyandRosterStaleSnapshotsincrements about four times a second. A real stale-roster sequence (join without leaving, then a failed join) looks possible but was not confirmed.Done when. Video evidence comes from frame events or spine counters; empty bundle sections are filled from core nodes or dropped; roster epoch/revision are bound and the revision-0 case is decided explicitly.
Found by the 2026-10-02 half-wired-feature audit, by reading code on main (8b84a8f). Not yet reproduced in the running app unless stated.