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

One name per action and counts that agree: Export current text, Finish dictation, '1 word'

Open
#357 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
45/100
Issue type
Refactor
Clarity
Clearly specified
Activity status
Active
Tech stack
python, swift

Research direction

Start with the export call sites in CaptureHistoryView.swift (around line 163) and TranscriptReview.swift (around line 132), plus the save-panel text and default filename in AppModel.swift and Core.swift. For the dictation labels, check WorkbenchHome.swift (around lines 713, 840 and 844), ToolbarNextAction.swift, and the pinned check in WorkbenchControlChecks.swift. Done means the --check-core checks pass for the new filename helper and wordCountLabel, scripts/check-surfaces.py and its test pass, and the renamed labels appear in the greps listed in the issue.

Written by the indexing model from the issue text.

Description

bug

Outcome: the same action uses the same words wherever it appears, an export suggests a filename that says which transcript it holds, and a one-word dictation reads '1 word'.

Evidence (train head 14d06bc)

Export

  • History's More menu and context menu say 'Export cleaned text…' (CaptureHistoryView.swift:163). Review transcript says 'Export current text…' (TranscriptReview.swift:132). Both call AppModel.exportCapture.
  • The save panel says 'Save the cleaned transcript…' (AppModel.swift:1057-1059). That is untrue for a two-track meeting, whose text is the You/Others conversation (docs/design.md:176), and for a dictation with cleanup off. The contract's own word is 'current text' (docs/workbench.md:156).
  • Every export suggests 'Workbench Transcript.txt' (Core.swift:81, AppModel.swift:1055), so a second export into the same folder offers to replace the first. Snap's Save already suggests a name from kind and date (SnapModel.swift:457, :590).

Dictation button

  • Home's Current work shows Button("Stop") (WorkbenchHome.swift:713). The toolbar, panel and chooser say 'Finish dictation' for the same action (ToolbarNextAction.swift:222, pinned at WorkbenchControlChecks.swift:57). The other Current work rows name their action in full: 'Stop narration', 'End presentation', 'Stop task'.
  • Home's guide button shows 'Start dictating', but its accessible name is 'Start recording' (WorkbenchHome.swift:840, :844), so Voice Control's 'click Start dictating' finds nothing.
  • Dictate's microphone is also named 'Start recording' (Views.swift:214), the same name as Meetings' button.

Word count

  • These sites show '(n) words' with no singular: Views.swift:161, CaptureHistoryView.swift:103 and its VoiceOver label at :106, and TranscriptReview.swift:98.
  • Home's shelf pluralises by hand (WorkbenchHome.swift:511), as every other count in the app does.
Change
  1. Export
    • CaptureHistoryView.swift:163 becomes 'Export current text…'.
    • The panel message becomes 'Save the current text as a UTF-8 text file.'
    • The rawValue of TranscriptExportVersion.cleaned becomes 'Current text'; keep the case name.
    • Replace defaultFilename with a pure TranscriptExport.filename(purpose:date:timeZone:) that returns, for example, 'Meeting 2026-10-15 at 10.00.txt'. Build it with a gregorian calendar and the en_US_POSIX locale so it never contains '/' or ':', and never include captured words, a person or a company.
    • Dictate's 'Save text…' is a different action and stays unchanged.
  2. Dictation button
    • Current work's Stop becomes 'Finish dictation'.
    • The guide button reads Cancel, Finish dictation or Start dictating, with .accessibilityLabel(model.phase == .requesting ? "Cancel microphone request" : title) so the spoken name follows the visible one.
    • Dictate's idle accessible name becomes 'Start dictating'.
    • In docs/surfaces.json, run check-surfaces --update, then re-enter kind, belongsTo and note by hand for the renamed entries.
  3. Word count
    • Add TextRules.wordCountLabel(_ count: Int) -> String beside wordCount, and use it at the four sites and at Home's shelf. Do not add a generic pluraliser.
  4. Left for the maintainer, not changed here: the Names example (docs/workbench.md:90, 'Stop dictation') and the panel row text (:205, 'Dictate / Stop') disagree with the code's 'Finish dictation'.
Acceptance
  • --check-core:
    • filename returns 'Meeting 2026-10-15 at 10.00.txt' for a fixed date and time zone.
    • Two meetings and a prompt at different minutes get distinct names, and no name contains '/', ':' or captured words.
    • The current export version reads 'Current text'.
    • wordCountLabel returns '0 words', '1 word' and '2 words' for 0, 1 and 2.
  • Greps confirm:
    • no ) words" literal is left outside checks;
    • no export label or panel message says 'cleaned';
    • Button("Stop") and 'Start recording' are gone from WorkbenchHome.swift and Views.swift.
  • python3 scripts/check-surfaces.py and scripts/test-check-surfaces.py pass.
  • Home's current-work and first-dictation renders show 'Finish dictation' without clipping at the minimum window width.
Value before scope
  1. Outcome: one name per action (the Names rule, docs/workbench.md:90), and correct grammar on the most common short dictations.
  2. Simpler route: adopt the names the code and checks already use.
  3. Owner: the existing labels, plus one pure helper each for the filename and the count.
  4. Complexity: strings, two pure functions and a registry reclassification.
  5. Verified by: --check-core, check-surfaces and renders.

Grammar: Quality.

Refs #134


Build-ready record from the 15 Oct round-three pass (delight and code-base value), verified against the release train head 14d06bc by an independent skeptic per item. Closes only after native acceptance.

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.