Process meetings with external participants, filter notifications - #140
Process meetings with external participants, filter notifications#140suiyangqiu wants to merge 4 commits into
Conversation
…ations Tiger used to skip processing entirely when a meeting had any external (client) participant, so no dashboard was generated for spec reviews or other client meetings. Instead, Tiger now always processes the meeting and filters external participants out of the notification recipient list at output time, using the existing isExternalPerson() check - so externals never receive a Teams notification, on either the success or the failure path, while SSW participants still get notified and can choose to share the dashboard link manually. Removes the two now-dead skip-gate functions (checkMeetingInviteesForExternal, hasExternalParticipants) since nothing else referenced them. Corresponding issue: #73
Removing the two external skip-gates made a third code path newly reachable: a meeting with an external participant whose subject doesn't match the filter pattern now falls into the subject-filter "skipped" branch, which was still emitting an unfiltered participant list (and one missing the fields isExternalPerson needs, since it came from meeting.participants rather than chatParticipants). Extracted a shared filterNotifiableParticipants() helper and used it on all three outputResult() call sites (success, error, and subject-filter skip), and added tests for the error path and the subject-filter-skip path. Also fixes a bug in the test harness itself: the mocked process.exit() didn't halt execution the way a real one would, so a skip-path test could fall through into later code and get its result overwritten. Mocks now keep only the first exit code/output, matching what a real process.exit() guarantees.
Only beforeEach/afterEach are actually used in this file.
This comment has been minimized.
This comment has been minimized.
filterNotifiableParticipants() previously excluded silently. The old hasExternalParticipants() gate used to log every exclusion; carry that over so a false-positive exclusion (e.g. an SSW colleague whose Teams display name lacks "SSW") leaves a trace in the logs, even though the meeting itself no longer gets skipped for it.
This comment has been minimized.
This comment has been minimized.
|
🦅 Vulture kill summary 2 review rounds. Round 1 found a real Blocking gap (both Doomsayer and the independent reviewer independently traced it): removing the two external skip-gates made a third output path in Also actioned: removed unused test-runner imports, and fixed a real bug in the test harness itself (a mocked One finding was carried forward and declined as a defect rather than fixed: the reused Round 2 came back green across all three reviewers (Doomsayer verified the fix by reverting it locally and confirming the new test fails without it). Remaining Optional notes for the human reviewer: the export-and-monkeypatch test pattern is workable but could get fragile if the suite grows; a pre-existing, unrelated bug was spotted in |
📝 Summary of Changes
Corresponding issue: #73
Closes #73
🤷♂️ Why
Tiger was silently skipping processing for any meeting with an external participant, which meant no dashboard got generated for spec reviews or other client meetings. As discussed in Sprint 6 Review, it's fine for Tiger to run on these meetings as long as external people never receive the notification - SSW staff can then choose to share the dashboard link manually.
🧪 Test plan
npm testpasses (76/76), including four new tests covering: a meeting with an external participant is not skipped, the external participant is excluded from the success-path notification list, the same for the failure-path notification, and the same for the subject-filter-skip notification path🦅 Hunted by Vulture · 🤖 Generated with Claude Code