One name per action and counts that agree: Export current text, Finish dictation, '1 word'
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
- Domain
- accessibility, desktop
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
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 callAppModel.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 atWorkbenchControlChecks.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:103and its VoiceOver label at:106, andTranscriptReview.swift:98. - Home's shelf pluralises by hand (
WorkbenchHome.swift:511), as every other count in the app does.
Change
- Export
CaptureHistoryView.swift:163becomes 'Export current text…'.- The panel message becomes 'Save the current text as a UTF-8 text file.'
- The rawValue of
TranscriptExportVersion.cleanedbecomes 'Current text'; keep the case name. - Replace
defaultFilenamewith a pureTranscriptExport.filename(purpose:date:timeZone:)that returns, for example, 'Meeting 2026-10-15 at 10.00.txt'. Build it with a gregorian calendar and theen_US_POSIXlocale 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.
- 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, runcheck-surfaces --update, then re-enter kind, belongsTo and note by hand for the renamed entries.
- Word count
- Add
TextRules.wordCountLabel(_ count: Int) -> StringbesidewordCount, and use it at the four sites and at Home's shelf. Do not add a generic pluraliser.
- Add
- 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:filenamereturns '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'.
wordCountLabelreturns '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.
- no
python3 scripts/check-surfaces.pyandscripts/test-check-surfaces.pypass.- Home's current-work and first-dictation renders show 'Finish dictation' without clipping at the minimum window width.
Value before scope
- Outcome: one name per action (the Names rule,
docs/workbench.md:90), and correct grammar on the most common short dictations. - Simpler route: adopt the names the code and checks already use.
- Owner: the existing labels, plus one pure helper each for the filename and the count.
- Complexity: strings, two pure functions and a registry reclassification.
- 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
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Ship-Work/workbench
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 1 day
-
documentation good first issue help wanted
Difficulty 2/5 Half a day Newbie friendliness 74/100
Ship-Work/workbench#29 · 1 comment ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 55/100
Maintainers usually reply within 1 day
All issues in Ship-Work/workbench
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
Difficulty 1/5 Under an hour Newbie friendliness 65/100
omacom/try-omarchy#402 ·
Maintainers usually reply within 1 day
-
area: build-and-ci S3: minor
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
manaflow-ai/cmux#22595 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 61/100
mozilla-mobile/firefox-ios#36202 ·
Maintainers usually reply within 1 day
-
clawsweeper:fix-shape-clear clawsweeper:needs-maintainer-review clawsweeper:needs-product-decision clawsweeper:no-new-fix-pr clawsweeper:source-repro issue-rating: 🦞 diamond lobster P3
Difficulty 1/5 Under an hour Newbie friendliness 87/100
steipete/CodexBar#4668 · 1 comment · 1 reaction ·
Maintainers usually reply within 1 day