Skip to content

T11 cleanup: extract shared lib/transcriptionStatus.ts + ARIA + WHY comments #182

Description

@utof

T11 code-quality reviewer flagged 1 IMPORTANT + 3 NITs (non-blocking, green-lit T11). Filed for batched cleanup before v0.7.x.

1. [IMPORTANT] Duplicate status state-machine logic

`apps/desktop/src/components/TranscriptionPill.tsx:38-56` (`statusLabel` + `isCancellable`) and `apps/desktop/src/components/TranscribeButton.tsx:127-142` (queue position label, percent calculation `total_ms !== null && total_ms > 0` → `Math.round((processed_ms/total_ms)*100)`) implement the same state-machine twice. Risk: drift between the two components.

Suggested fix: extract `apps/desktop/src/lib/transcriptionStatus.ts` exposing:

  • `statusLabel(status: TranscriptionJobStatus): string`
  • `isCancellable(status: TranscriptionJobStatus): boolean`
  • `progressPercent(status: TranscriptionJobStatus): number | null`

Both components import + use; tests still exercise the components but the logic lives in one place.

2. [NIT] Missing exhaustive `never` default in statusLabel switch

`TranscriptionPill.tsx:38` — switch lacks the `const _exhaustive: never = ...` default. Other switches in the project (`StatusBar.errorKindLabel`, `lib/coreError.transcriptionErrorMessage`) use this pattern so adding a new variant becomes a compile-error.

3. [NIT] Missing aria-controls on pill button

`TranscriptionPill.tsx:174-205` — pill button has `aria-expanded` + `aria-haspopup` but no `aria-controls` linking to the popover (popover lacks an `id`). Add `id="transcription-popover"` + `aria-controls="transcription-popover"` for full ARIA contract.

4. [NIT] Missing WHY comment on Cancel discard

`TranscriptionPill.tsx:81-85` — Cancel handler discards the `ResultAsync` chain via `.mapErr(...)`. Same pattern as TranscribeButton.tsx:60-65 (also undocumented). Fire-and-forget intent matches the "event loop updates the slice on Cancelled" model, but a one-line WHY comment matching file's WHY-density would be in keeping.


Filed under ASR v2 milestone for batched cleanup.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/frontendTouches apps/desktop frontend (React/Vite/Tailwind/ESLint)priority/lowLow priority — defer until pressure justifies ittype/choreRoutine maintenance / repo hygiene

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions