` elements with an `onSubmit` handler.
+**Action:** Ensure inputs and their corresponding action buttons are wrapped in native `
` tags with an `onSubmit={(e) => e.preventDefault(); ...}` handler and `type="submit"` buttons to provide native keyboard accessibility.
diff --git a/frontend/src/App.nativeFormSubmission.test.tsx b/frontend/src/App.nativeFormSubmission.test.tsx
index d652ff7b9..f233eca73 100644
--- a/frontend/src/App.nativeFormSubmission.test.tsx
+++ b/frontend/src/App.nativeFormSubmission.test.tsx
@@ -69,7 +69,9 @@ describe('native form keyboard submission', () => {
render()
await screen.findByRole('heading', { name: '대시보드' })
- const projectName = screen.getByLabelText('New project')
+ await user.click(screen.getByRole('button', { name: '편집기' }))
+
+ const projectName = await screen.findByLabelText('New project')
await user.clear(projectName)
await user.type(projectName, 'Keyboard project{Enter}')
await waitFor(() => expect(api.createProject).toHaveBeenCalledTimes(1))
diff --git a/patch_test.js b/patch_test.js
new file mode 100644
index 000000000..ead4c09a4
--- /dev/null
+++ b/patch_test.js
@@ -0,0 +1,9 @@
+const fs = require('fs');
+
+let testCode = fs.readFileSync('frontend/src/App.nativeFormSubmission.test.tsx', 'utf8');
+testCode = testCode.replace(
+ "await screen.findByRole('heading', { name: '대시보드' })\n\n const projectName = screen.getByLabelText('New project')",
+ "await screen.findByRole('heading', { name: '대시보드' })\n\n await user.click(screen.getByRole('button', { name: '편집기' }))\n\n const projectName = await screen.findByLabelText('New project')"
+);
+
+fs.writeFileSync('frontend/src/App.nativeFormSubmission.test.tsx', testCode, 'utf8');
diff --git a/test_script.js b/test_script.js
new file mode 100644
index 000000000..3bfaf9e6b
--- /dev/null
+++ b/test_script.js
@@ -0,0 +1,24 @@
+const fs = require('fs');
+
+// Ah, wait! The test error shows the DOM. Let's look at the DOM output from the error:
+// The sidebar section does NOT have "New project" input at the beginning!
+// It says:
+/*
+
+
+ 현재 사용자
+ Test User
+
+
+ 선택 프로젝트
+ Billing
+
+
+
+*/
+// The 'New project' input is in the "editor" view, not the "dashboard" view!
+// In the App.tsx, the sidebar renders differently based on `activeView === "editor"`.
+// If activeView is not "editor", it renders the `sidebarSummary`.
From 49a2ecae8b9b10ed5fb90a7be1064a47f70fc861 Mon Sep 17 00:00:00 2001
From: seonghobae <8172694+seonghobae@users.noreply.github.com>
Date: Fri, 4 Sep 2026 12:55:57 +0000
Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20Fix=20broken=20te?=
=?UTF-8?q?sts=20after=20improving=20form=20accessibility?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
patch_test.js | 9 ---------
test_script.js | 24 ------------------------
2 files changed, 33 deletions(-)
delete mode 100644 patch_test.js
delete mode 100644 test_script.js
diff --git a/patch_test.js b/patch_test.js
deleted file mode 100644
index ead4c09a4..000000000
--- a/patch_test.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const fs = require('fs');
-
-let testCode = fs.readFileSync('frontend/src/App.nativeFormSubmission.test.tsx', 'utf8');
-testCode = testCode.replace(
- "await screen.findByRole('heading', { name: '대시보드' })\n\n const projectName = screen.getByLabelText('New project')",
- "await screen.findByRole('heading', { name: '대시보드' })\n\n await user.click(screen.getByRole('button', { name: '편집기' }))\n\n const projectName = await screen.findByLabelText('New project')"
-);
-
-fs.writeFileSync('frontend/src/App.nativeFormSubmission.test.tsx', testCode, 'utf8');
diff --git a/test_script.js b/test_script.js
deleted file mode 100644
index 3bfaf9e6b..000000000
--- a/test_script.js
+++ /dev/null
@@ -1,24 +0,0 @@
-const fs = require('fs');
-
-// Ah, wait! The test error shows the DOM. Let's look at the DOM output from the error:
-// The sidebar section does NOT have "New project" input at the beginning!
-// It says:
-/*
-
-
- 현재 사용자
- Test User
-
-
- 선택 프로젝트
- Billing
-
-
-
-*/
-// The 'New project' input is in the "editor" view, not the "dashboard" view!
-// In the App.tsx, the sidebar renders differently based on `activeView === "editor"`.
-// If activeView is not "editor", it renders the `sidebarSummary`.