Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Timer: guard Resume by lifecycle state and use Restart after completion

Open
#174 5 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
macos, swift
Domain
desktop

Research direction

Start with the timer state and controls in Sources/StageKit/Views.swift, AppCoordinator.swift, Core.swift, QuickControls.swift, and StageKitController.swift; compare the existing compact-control and menu guards. Add idle and finished transitions to the timer-owner checks, then repeat both native reproductions with sound safely controlled. Done means all entry points agree on transport state, Restart follows the normal visible start path, and the installed build and restoration are recorded.

Written by the indexing model from the issue text.

Description

Outcome and priority

P2 functional defect. Timer controls should describe and perform the next valid action consistently on the page and floating window.

Native reproduction

Preview 2.3.0, build 20260928054038, clean source 00be555139f87d4557f48fcffc132b8621c251a2; macOS 26.5.1 (25F80), built-in display. Verified through Copy build details in the running app and bundle metadata.

Idle/reset: Open Annotate → Break timer with 5 minutes, stopped and hidden. Resume is enabled beside Start break. Click Resume: it becomes Pause and the preview counts down (04:53 observed), while the page still says Off and no timer window opens.

Finished: Set 0.1 minutes and turn the chime off for a synthetic test. Start break correctly opens a timer. At 00:00, its floating control says Restart. Return to the page: it says Resume. Click it: the timer stays at 00:00 and the UI does not change.

Normal Start opening the window is a useful passing comparison. The test restored 5 minutes, chime on and stopped/hidden state.

Source owner

The main page enables the secondary action based only on timerRunning. pauseResumeTimer marks a session started without the normal show/admission path. Countdown.resume refuses zero remaining time. Existing compact control guard and menu guard show the intended distinction.

Chosen behaviour

Use one transport state across entry points: Start for idle/reset, Pause for running, Resume for paused, Restart for finished. Guard Resume in the coordinator as well as views. Start/Restart uses normal admission, activity tracking and visible-window presentation. Hide/reopen preserves a running or paused session; it does not reset it. A duration edit during pause configures the next Start/Reset, preserving remaining time until then.

Acceptance

  • Idle/reset cannot Resume a hidden new countdown or start a periodic update timer.
  • Finished offers a working Restart; no enabled Resume no-op.
  • Paused Resume preserves remaining time. Restart uses configured duration and opens the visible timer through the normal start path.
  • Page, quick panel and floating transport controls resolve the same state. The existing Timer shortcut keeps its visibility-toggle meaning; it must not become Pause/Resume.
  • Hide/reopen preserves position and time; independent Draw/Persona/Present jobs remain intact.
  • Add idle and finished transitions to the timer-owner checks, then repeat both native reproductions with sound safely controlled.
  • Record signed installed build and restoration.

Coordination

Second-pass request under #164/#134. #21 owns physical-display placement and receiver checks; this request fixes transport lifecycle without duplicating that work.

Dominant language
Swift
Stars
0
Forks
1
Avg merge
8h 5m
Merged PRs (30d)
215

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Ship-Work/workbench

All issues in Ship-Work/workbench

Similar issues

More Swift issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.