Skip to content

[UX][polish] Copy and formatting nits: pluralization, durations, key labels, cryptic badges #73

Closed

Description

@GeekCmore

Summary

Batch of small copy/formatting defects. Each is minor; grouped for one polish pass.

Formatting (UX-14)

  • "⏵ 1 jobs" — count never singularized: packages/mayfly/src/transcript/status-jobs.ts:35 (siblings pluralize carefully: pane-agents.ts:185, pane-workflow.ts:135).
  • Durations ≥ 1 h render as "125m 3s" (no hours): agent-presentation.ts:16-20 — used by activity row, agents pane, workflow pane.
  • Loader elapsed time renders raw milliseconds ("12345ms"): packages/mayfly/src/core/ui-patterns.ts:400. Dormant today (no producer passes elapsedMs) but admitted by the contract/validator.
  • A blocked goal without a blockedReason renders a bare blocked: row with nothing after it: pane-todo.ts:213-215, :241-251.
  • [image] placeholder rendered twice per image: projection inlines it into visibleText (packages/mayfly/src/conversation/projection.ts:149-156) and UserMessageComponent renders per-attachment rows (transcript/components.ts:254-289).
  • /provider list key status computed once at build time, never observes credential changes: provider-commands.ts:51-56, :78.
  • Clear-key failure claims "Provider removed" when nothing was removed: provider-edit.ts:260.
  • Mixed ellipsis styles: interrupting... (pane-activity.ts:85), plan... (mode-status.ts:22) use ASCII ... while the rest of the UI uses ….
  • (Suspected) a tool/result after turn/end revives a stale "working" activity row: conversation/facts.ts:189-206 handles results with no turn guard.

Key labels and action naming (UX-23)

  • F7 is "toggle" in the transcript panel footer but "switch" in the status bar; footer shows "F8 close · Esc close" — duplicate labels for the same effect: session-transcript-panel.ts:94 vs agent-view-status.ts:23.
  • Todo footer hardcodes ctrl+t while siblings resolve hints dynamically: pane-todo.ts:256, :262 vs interaction/keys.ts:37-40.
  • displayKey renders Shift+f6 but F6 — function keys inside modifier chords stay lowercase: core/key-actions.ts:62-73.

Confusing chrome (UX-30)

  • Refresh buttons on immutable /version and /changelog content: session-commands.ts:55, :62-67.
  • /settings lists raw namespace ids (llm-pi-ai) with no friendly labels while translations sit orphaned (settings-command.ts:145 vs locale.ts:237-246).
  • Cryptic badges: up 1.2.3 for update-available (plugin-commands.ts:129); "Engines" row renders >=0.1.7-rc.1 >=0.1.1 >=22 with no per-engine labels (plugin-commands.ts:283-288).
  • Validator admission failures expose developer paths like $.child.children[2].id is required to end users: ui-interaction-surface.ts:243-245, ui-validator.ts:151.
  • /help title is lowercase help while siblings are capitalized; the promised "two aligned columns" layout renders ragged: help.ts:28-34.
  • Capitalized Reminders badge among lowercase badges: session-list-model.ts:155-157.

Acceptance criteria

  • Each listed nit fixed; singular/plural, duration, and key-label formatting share the existing helpers.

Audit reference

docs/audits/2026-09-28-ui-ux-audit-data-and-layout.md § UX-14 · docs/audits/2026-09-28-ui-ux-audit-interaction-and-usability.md § UX-23, UX-30 (baseline 27bc188, 2026-09-28)

Activity

  1. self-assigned this
    on Sep 28, 2026
  2. GeekCmore commented on Sep 28, 2026

    @GeekCmore
    CollaboratorAuthor

    In progress (status:in-progress). Covered by the unified display-value / formatting pass:

    • Shared core/format.ts: pluralize, durations with hours, ms → human duration; status-jobs, loader, agent-presentation use it.
    • Key labels: function keys inside chords (Shift+F6); one action name per effect in the transcript footer.
    • provider-edit.ts clear-key no longer claims "Provider removed"; provider-commands.ts key status refreshes on credential change; no Refresh on immutable /version / /changelog.
    • /settings namespace ids → friendly labels; Engines row labelled per engine; /help title + aligned columns; Reminders casing; one ellipsis (…) convention.
    • [image] rendered once: attachment rows in transcript/components.ts become the single owner; conversation/projection.ts stops inlining it on the user-message render path.

    Remaining localization-only items are tracked with #62/#63/#64. Branch fix/display-layout-fidelity.

  3. GeekCmore commented on Sep 28, 2026

    @GeekCmore
    CollaboratorAuthor

    大部分处理中 / Mostly in progress — PR #79 (feat/i18n-hardening)。

    已覆盖:

    • 单复数:job 计数、read/search/command/agents group 头。
    • 时长:≥1h 显示小时(2h 5m 3s),loader 不再显示原始毫秒。
    • 键名标签:displayKey 和弦内功能键大写(Shift+F6),pane-todo 的 ctrl+t 改为动态 hint。
    • cryptic badge:up {version}、Engines 行改为逐引擎标签。
    • Reminders badge 小写化为 reminders;/version 与 /changelog 移除无意义的 Refresh。

    未覆盖(本 issue 保持开启):/settings 原始 namespace id 的友好标签、/help 标题大小写与两列版式。

    PR: #79

  4. GeekCmore commented on Sep 28, 2026

    @GeekCmore
    CollaboratorAuthor

    Implementation opened as #81 (branch fix/display-layout-fidelity). pnpm run verify:full is green (typecheck, lint, build, shots, coverage, happy smoke). Manual runtime acceptance is pending before merge.

  5. added 2 commits that reference this issue on Sep 28, 2026
  6. GeekCmore commented on Sep 29, 2026

    @GeekCmore
    CollaboratorAuthor

    Closing as fixed, verified on current main; two small residuals moved to #75.

    Done (via #79 + #81, re-verified on main today):

    • Pluralization: ⏵ 1 job / ⏵ {count} jobs (transcript/status-jobs.ts).
    • Hours-aware durations: compactElapsedSeconds → 2h 5m 3s (transcript/agent-presentation.ts), formatDuration → 2h 5m / 3d 4h (interaction/session-list-model.ts), formatJobDuration hours-aware (interaction/jobs.ts).
    • Key labels: chords through displayKey (function keys inside chords, e.g. Shift+F6).
    • Cryptic badges: update {version} on /plugin, per-engine labels on the Engines row.
    • /help title capitalized (t('Help'), overlay + panel).
    • Immutable /version / /changelog no longer offer a meaningless Refresh.
    • Friendly field labels: the LABELS map in interaction/settings-model.ts covers mayfly/shell/permission/agent-preset-registry/llm-deepseek/web-search keys.
    • The Reminders badge no longer exists after the feat: browse sessions by workspace with fast loading and animated progress #82 sessions rework — item moot.

    Moved to #75 (polish batch):

    • Loader durations ≥ 1h: formatElapsedMs (core/ui-patterns.ts) caps at m+s, so a ≥1h loader renders 125m 3s instead of 2h 5m 3s.
    • /help remains a single-column flowing layout, not two-column aligned label/description.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingstatus:in-progressWork has started on this issue

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions