Repository navigation
Timer reach metric: attach audience_size to timer_started events (#107) - #138
Conversation
… events Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
plan — The participant count is read at START, not when the app opens. In Open questions (defaults apply if unanswered):
|
|
Plan approved with the defaults for Q1–Q4: keep all six acceptance criteria; no privacy-policy change in this PR (list it under "Not verified"); accept |
Failing unit tests for audience_size on timer_started (Zoom app LiveTab), a web-timer guard for AC-4, and timer-core TC-11/TC-12 (status: stale). AC-6 is post-release and not testable here. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
oracle — Commit 5666a11 adds failing tests for AC-1 to AC-5 and records them in
To check the tests themselves, I ran a ~10-line throwaway version of the planned change: all 13 tests in the file passed, and I reverted it. The rest of The Zoom-client spec |
timer_started counted operator presses, not people served. The idle callback that sends it now reads getZoomParticipants() at START (not at mount, so late joiners count) and adds audience_size only when Zoom gave the full list. Non-hosts, no SDK and a failed read send the event without it; startTimer() still runs first and never waits on Zoom. Only a count leaves the device. Closes #107 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…audience_size No step changes: timer-core's TC-11/TC-12 (added with the oracle) already describe audience_size on timer_started, and no timer-sounds step looks at the event. Note under "Not covered" that a failed participant read is unit-tested only, and point timer-sounds at timer-core for the event. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
implement — Commit ca851eb changes |
The spec has never run (verified_at: never); 'stale' is for a blocked run, not an edit. The Zoom station sets the status after its run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
verify — all checks pass. Handing off to the Zoom station. Checks (at
Review (fresh context; inputs were the plan, the diff against
Risk: no Next: |
Real Zoom run 2026-11-11: TC-01, TC-03 to TC-08, TC-10, TC-11 pass; TC-09 and TC-12 are human and were skipped. Fix two steps the run showed out of date: TC-02 (no colour before the green threshold) and TC-06 (close with ⋯ → Close current app; the panel X only hides it).
Closes #107
Why
We only count timer starts, so a class of 20 where the teacher starts the timer 15 times looks the same as 15 solo web starts. The traffic report already has a "Timer reach" line (sum of per-meeting max
audience_sizeper day) waiting for the client to send a head count.What changes
timer_startednow carriesaudience_size: the meeting's participant count read at START (so people who joined after the app opened are counted).timer-coregains TC-11/TC-12, and this run fixed two out-of-date steps (TC-02, TC-06).Security
None. One integer added to an existing analytics event; no names or ids.
Production impact
After release, master users'
timer_startedevents carryaudience_sizefor hosts. No flags, no migration. Rollback is a revert. A very quick STOP right after START can now be captured beforetimer_startedis sent (analytics order only).Testing
npm test: 2225 pass (verify station, at 2e965b6); CItestpass on 53585cfnpm run test:e2e: 41 pass (verify station)npm run test:specs: valid (7 specs).factory/oracles/107.json—apps/zoom-app/src/components/LiveTab.test.jsxAC-1…AC-5,apps/web/src/components/LiveTab.test.jsxAC-4Evidence (real Zoom client)
Run 2026-11-11 16:54–17:02 EST, Zoom 7.2.5 on macOS 26.7.2, dev version
a4c66603(this branch @ 2e965b6, committed vars). Spectimer-core. Deployed chunkLiveTab-C3jtJnUn.jscontainsaudience_size.timer_startedfromzoom.timer-dev.simple-tech.app, host-only meeting (Participants: 1): 21:55:30, 21:57:27 and 22:00:58 UTC all haveaudience_size: 1plusspeaker_name,role,timing_rules,zoom_meeting_id. The same meeting's START on the previous build (21:46:04) has noaudience_size. Timer read 00:04 at +4 s, so START was not held up. CONTINUE sent no extratimer_started.zoom.host (GET / 200, POST /api/zoom/session 200).timer_startedcarries that role.Not verified
audience_size. Needs a second Zoom account; covered byLiveTab.test.jsx(restricted list).audience_sizewas 1. The AC-2 unit test covers a count read after START.timer-sounds: not run; sounds are locked on this account (dev gate on, flag off) and this PR only added a pointer in its Not covered list.setVirtualBackgroundcounts,card_color_applied, localStorage: Zoom's webview inspector is off on this Mac.Look here first
audience_size