From ff316b058174f6a2afb3d0b98dba2cc3af4fa24c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 21 Oct 2026 01:49:52 +0000 Subject: [PATCH 1/3] Initial plan From 0cd5b4ce824cd9ad83ca871ada8247ab9657a091 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 21 Oct 2026 01:54:48 +0000 Subject: [PATCH 2/3] Add failing test for duplicated Repeat description (#6080) Co-Authored-By: GitHub Copilot unknown (unknown) <223556219+Copilot@users.noreply.github.com> Co-authored-by: BayuAri <8419585+BayuAri@users.noreply.github.com> --- .../__tests__/DesktopCommandUniverse.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/components/__tests__/DesktopCommandUniverse.ts diff --git a/src/components/__tests__/DesktopCommandUniverse.ts b/src/components/__tests__/DesktopCommandUniverse.ts new file mode 100644 index 00000000000..7aff3f73e12 --- /dev/null +++ b/src/components/__tests__/DesktopCommandUniverse.ts @@ -0,0 +1,15 @@ +import { screen } from '@testing-library/react' +import { desktopCommandUniverseActionCreator as desktopCommandUniverse } from '../../actions/desktopCommandUniverse' +import createTestApp, { cleanupTestApp } from '../../test-helpers/createTestApp' +import dispatch from '../../test-helpers/dispatch' + +beforeEach(createTestApp) +afterEach(cleanupTestApp) + +// https://github.com/cybersemics/em/issues/6080 +it.skip('shows the Repeat description once', async () => { + await dispatch(desktopCommandUniverse()) + + const description = screen.getByText(/^Repeats the last command\./) + expect(description).toHaveTextContent(/^Repeats the last command\.$/) +}) From a4894193c0cf18e4dd161e3ac1a09f9744d67b8e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 21 Oct 2026 01:56:16 +0000 Subject: [PATCH 3/3] Fix duplicated Repeat description (#6080) Co-Authored-By: GitHub Copilot unknown (unknown) <223556219+Copilot@users.noreply.github.com> Co-authored-by: BayuAri <8419585+BayuAri@users.noreply.github.com> --- docs/commands.md | 2 +- src/commands/repeat.ts | 2 +- src/components/__tests__/DesktopCommandUniverse.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/commands.md b/docs/commands.md index bb4f15e293b..2488194679f 100644 --- a/docs/commands.md +++ b/docs/commands.md @@ -869,7 +869,7 @@ Redo the last undone action. ### Repeat -Repeats the last command. Repeats the last command. +Repeats the last command. Navigation and non-undoable commands are ignored, so Repeat always repeats the last command that changed the thoughtspace. diff --git a/src/commands/repeat.ts b/src/commands/repeat.ts index 17cdb272aa3..3885b95a879 100644 --- a/src/commands/repeat.ts +++ b/src/commands/repeat.ts @@ -4,7 +4,7 @@ import { noop } from '../constants' const repeatCommand = { id: 'repeat', label: 'Repeat' as const, - description: 'Repeats the last command. Repeats the last command.', + description: 'Repeats the last command.', keyboard: { key: '.', meta: true }, // Repeat has no multicursor behavior of its own. It is resolved to the last command before multicursor handling, so the repeated command's own multicursor behavior is applied. multicursor: false, diff --git a/src/components/__tests__/DesktopCommandUniverse.ts b/src/components/__tests__/DesktopCommandUniverse.ts index 7aff3f73e12..759a6600011 100644 --- a/src/components/__tests__/DesktopCommandUniverse.ts +++ b/src/components/__tests__/DesktopCommandUniverse.ts @@ -7,7 +7,7 @@ beforeEach(createTestApp) afterEach(cleanupTestApp) // https://github.com/cybersemics/em/issues/6080 -it.skip('shows the Repeat description once', async () => { +it('shows the Repeat description once', async () => { await dispatch(desktopCommandUniverse()) const description = screen.getByText(/^Repeats the last command\./)