Files
meeting-assistant/openspec/changes/add-transcription-pause-controls/tasks.md
T
codex 93eb3d4e98
PR and Push Build/Test / build-and-test (push) Successful in 15m17s
fix: prevent profile-switch transcription deadlock
2026-09-16 15:00:49 +02:00

5.0 KiB

1. Inactivity notification lifecycle

  • 1.1 Add a failing coordinator behavior test proving that a newly written non-empty transcript segment dismisses every outstanding inactivity prompt.
  • 1.2 Extend the inactivity prompt service contract and Windows implementation to invalidate callbacks and remove the complete inactivity notification group.

2. Pause and unpause behavior

  • 2.1 Add a failing coordinator behavior test proving that pause keeps the run active, routes equal-duration silence instead of captured audio, and unpause resumes real audio through the same pipeline.
  • 2.2 Implement thread-safe pause state, coordinator pause/unpause controls, status reporting, and silence substitution without resetting speaker state or the active pipeline.
  • 2.3 Add a failing behavior test proving that inactivity prompts and auto-stop are suspended while paused and restart from the unpause time.
  • 2.4 Implement pause-aware inactivity timing and guard prompt callbacks so stale notifications cannot control another run.

3. User controls

  • 3.1 Add a failing tray-menu behavior test for Pause transcription / Unpause transcription while Finish meeting remains available.
  • 3.2 Add the tray pause toggle action in the fine-grained controls section and wire it to the coordinator.
  • 3.3 Add a failing inactivity-prompt behavior test proving the pause response pauses the originating active meeting.
  • 3.4 Add the Pause transcription Windows notification action and route its response through the guarded coordinator pause path.

4. Documentation and verification

  • 4.1 Update the operational documentation with pause behavior, Azure session continuity, silence substitution, and the tray/notification controls.
  • 4.2 Refactor the touched paths for DRYness, SOLID boundaries, and simplicity while preserving behavior, including pause/inactivity race handling found during independent review.
  • 4.3 Run focused recording/taskbar tests, the Windows application build, the full solution tests, and openspec validate add-transcription-pause-controls --strict.
  • 4.4 Inspect the local health and recording-status surfaces without restarting or interrupting an active meeting run.

5. Maximum continuous pause

  • 5.1 Add a failing coordinator behavior test proving that ordinary inactivity prompts remain suppressed while paused and the meeting stops normally after four continuous paused hours.
  • 5.2 Track the continuous pause start and implement the configurable four-hour paused-session safety stop without allowing an unpause race to stop the meeting.
  • 5.3 Update configuration documentation and rerun focused tests, the Windows build, the full suite, and strict OpenSpec validation.

6. Review follow-up

  • 6.1 Keep the maximum continuous-pause cutoff active when ordinary inactivity handling is disabled, with a failing public behavior test.
  • 6.2 Scope notification dismissal to the active run and move activity invalidation after durable transcript append, with overlapping-run and blocked-write regression tests.
  • 6.3 Make pause-notification activity validation atomic and make tray pause/unpause actions intent-specific, with race and stale-menu tests.
  • 6.4 Complete an independent simplification review and rerun all required validation before commit.

7. Profile-switch deadlock repair

  • 7.1 Reproduce final transcript delivery during profile switching in both directions through the coordinator's public interface.
  • 7.2 Decouple notification dismissal from transcript draining while preserving current-run checks and cancellation handling.
  • 7.3 Verify buffered transcription, subsequent controls, notification lifecycle tests, the full suite, Windows build, and strict OpenSpec validation.
  • 7.4 Deploy with explicit restart authorization, verify the live health/control endpoints, and record the operational verification limits.

Verification on 2026-09-16: both profile-switch regression cases failed with the original circular wait and passed after the repair. All 520 solution tests passed on the final run. An unchanged audio-mixing timing test failed during the first full run, then passed alone and in the final full run. Strict OpenSpec validation and the Windows Release publish passed. The executable is staged at tmp/meeting-assistant-runtime/run-20260916-142827-profile-switch-fix.

Operational verification on 2026-09-16: after explicit user authorization, the deadlocked process was killed and the staged Windows release started as PID 48716. /health returned ok, /recording/status returned idle, and the process path confirmed the fixed release. The old meeting's summary was requested through /meetings/summary/retry. Profile-switch behavior was verified through the public coordinator regression tests rather than recording a new live meeting. The existing 25,092,144-byte WAV and meeting artifacts were backed up under tmp/profile-switch-recovery-20260916; audio held only in the killed process after the switch was not recovered. The meeting context records that transcription gap.