loadtoagent 1.1.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +7 -0
- package/README.md +7 -0
- package/README.zh-CN.md +7 -0
- package/docs/PROVIDER-CONTRACTS.md +23 -1
- package/docs/UI-AUDIT-100.md +118 -0
- package/docs/UI-AUDIT-101-200.md +120 -0
- package/docs/UI-AUDIT-201-300.md +120 -0
- package/main.js +135 -38
- package/package.json +13 -4
- package/preload.js +6 -0
- package/renderer/app-agent-actions.js +125 -53
- package/renderer/app-bootstrap.js +54 -19
- package/renderer/app-dashboard.js +190 -55
- package/renderer/app-drawer-content.js +48 -44
- package/renderer/app-drawer-data.js +26 -13
- package/renderer/app-drawer.js +72 -54
- package/renderer/app-events-dialogs.js +146 -37
- package/renderer/app-events-filters.js +172 -13
- package/renderer/app-events-navigation.js +77 -30
- package/renderer/app-events-sessions.js +156 -9
- package/renderer/app-events.js +2 -1
- package/renderer/app-graph-model.js +20 -38
- package/renderer/app-graph-orchestration.js +15 -13
- package/renderer/app-graph-view.js +228 -113
- package/renderer/app-management.js +211 -0
- package/renderer/app-provider-visibility.js +124 -0
- package/renderer/app-quality.js +568 -0
- package/renderer/app-run-modal.js +103 -33
- package/renderer/app-runtime-overview.js +312 -0
- package/renderer/app-session-render.js +94 -37
- package/renderer/app-tmux-render.js +52 -44
- package/renderer/app.js +153 -75
- package/renderer/i18n-messages.js +833 -16
- package/renderer/i18n.js +104 -0
- package/renderer/index.html +145 -59
- package/renderer/shared.js +17 -0
- package/renderer/styles-agent-map.css +6 -0
- package/renderer/styles-cards.css +26 -0
- package/renderer/styles-components.css +86 -9
- package/renderer/styles-management.css +355 -0
- package/renderer/styles-overlays.css +8 -2
- package/renderer/styles-product.css +24 -16
- package/renderer/styles-quality.css +312 -0
- package/renderer/styles-readability.css +862 -0
- package/renderer/styles-responsive-product.css +84 -12
- package/renderer/styles-responsive-runtime.css +22 -14
- package/renderer/styles-responsive-shell.css +44 -48
- package/renderer/styles-responsive-workflows.css +37 -3
- package/renderer/styles-run-composer.css +5 -0
- package/renderer/styles-runtime-overview.css +285 -0
- package/renderer/styles-settings.css +160 -0
- package/renderer/styles-terminal.css +339 -2
- package/renderer/styles-workflow-map.css +362 -15
- package/renderer/styles-workflows.css +69 -2
- package/renderer/styles.css +27 -12
- package/renderer/terminal-agent.js +17 -13
- package/renderer/terminal-events.js +233 -40
- package/renderer/terminal-workbench.js +165 -77
- package/renderer/terminal.js +341 -34
- package/src/agentMonitor/claudeParser.js +96 -7
- package/src/agentMonitor/codexParser.js +59 -4
- package/src/agentMonitor/executionActivity.js +282 -0
- package/src/agentMonitor/genericParser.js +56 -13
- package/src/agentMonitor/hierarchy.js +17 -0
- package/src/agentMonitor/responseIntent.js +51 -0
- package/src/agentMonitor.js +21 -3
- package/src/agentRunner.js +66 -1
- package/src/attentionNotifier.js +14 -10
- package/src/automationMonitor.js +258 -0
- package/src/contracts.js +10 -1
- package/src/ipc/registerAgentIpc.js +9 -3
- package/src/ipc/registerAppIpc.js +4 -1
- package/src/ipc/registerTerminalIpc.js +12 -6
- package/src/macUpdateHelper.js +210 -0
- package/src/monitorWorker.js +65 -6
- package/src/platformPath.js +80 -0
- package/src/processMonitor.js +80 -22
- package/src/providerVisibilityStore.js +45 -0
- package/src/sessionIntelligence.js +247 -0
- package/src/terminalHost.js +381 -0
- package/src/terminalHostDaemon.js +60 -0
- package/src/terminalManager.js +158 -3
- package/src/updateInstaller.js +175 -0
package/README.ko.md
CHANGED
|
@@ -87,11 +87,16 @@ LoadToAgent는 시작할 때 현재 패키지 버전과 GitHub의 최신 정식
|
|
|
87
87
|
|---|---|
|
|
88
88
|
| AI 작업 지도 | Claude, Codex, Gemini, Grok별 실시간 작업 |
|
|
89
89
|
| 연결 관계 | 사용자 요청, 선택한 메인 AI, 직접 나눠 맡긴 도움 AI |
|
|
90
|
+
| 실행 단위 | AI가 시작한 포그라운드 셸·백그라운드 셸·백그라운드 작업의 명령, 작업 폴더, 실행 ID와 현재 상태 |
|
|
91
|
+
| 운영 현황·확인함 | 실패·정체·컨텍스트 위험과 승인·결정·입력 요청을 우선순위로 모아 즉시 처리 |
|
|
90
92
|
| 작업 상세 | 대화, 도구 호출, 진행 과정, 모델, 작업 폴더, 상태 |
|
|
93
|
+
| 관리 요약 | 체크포인트, 관측 신뢰도, 완료 요약, 산출물과 검증 결과, 실행 제어 |
|
|
91
94
|
| 토큰 | 입력·출력·캐시·추론·전체 사용량과 보고된 컨텍스트 점유율 |
|
|
92
95
|
| 세션 터미널 | 선택한 AI의 이전 대화와 기존 PTY·tmux 화면을 나란히 보며 같은 세션에 이어서 입력 |
|
|
93
96
|
| tmux 작업 | macOS 또는 Windows WSL의 세션 → 창 → 패널 → AI 프로세스 관계 |
|
|
94
97
|
|
|
98
|
+
스케줄·루프, 세션 터미널, tmux 작업은 왼쪽의 **고급 도구** 아래에 모여 있어 일상적인 관제 흐름을 방해하지 않습니다.
|
|
99
|
+
|
|
95
100
|
LoadToAgent는 `직접 입력 가능`, `브리지 연결 후 입력 가능`, `원래 앱에서 계속해야 하는 보기 전용`, `종료된 세션`을 구분합니다. 임의의 외부 창에 키 입력을 보내지 않습니다.
|
|
96
101
|
|
|
97
102
|
## 연결된 터미널 사용
|
|
@@ -113,6 +118,8 @@ loadtoagent run claude -- --model claude-sonnet-4-6
|
|
|
113
118
|
|
|
114
119
|
이제 외부 터미널과 LoadToAgent 대시보드가 같은 LoadToAgent 전용 PTY를 조작합니다. AI 카드에서 `터미널에서 열기`를 누르면 새 셸을 만들지 않고 정확히 연결된 기존 터미널을 열며, 왼쪽에는 해당 세션의 이전 대화가 계속 표시됩니다. 터미널 탭을 바꿔도 PTY 출력은 지워지지 않고, 최신 대화 기록도 자동으로 갱신됩니다. 다른 곳에서 임의로 시작한 세션은 계속 볼 수 있지만, 원래 앱이 지원하는 연결 방식이 없으면 보기 전용으로 유지됩니다.
|
|
115
120
|
|
|
121
|
+
LoadToAgent가 연 터미널은 실행 중·유휴·자연 종료·시작 실패 등 상태와 관계없이 사용자가 `세션 종료`를 누를 때까지 세션 터미널 목록과 출력이 유지됩니다. 실행 중인 터미널이 하나라도 있을 때 창의 `X`를 누르면 시스템 트레이로 숨습니다. 트레이에서 `프로그램 끝내기`를 선택해 대시보드를 완전히 종료해도, 별도의 인증된 로컬 터미널 호스트가 살아 있는 PTY를 계속 유지합니다. 다음 실행에서는 같은 세션 ID·프로세스·출력에 다시 연결됩니다. 사용자가 `세션 종료`를 누르거나 터미널이 자연 종료되거나 운영체제 세션·터미널 호스트 자체가 끝날 때만 실행 중인 터미널이 종료됩니다.
|
|
122
|
+
|
|
116
123
|
## 로컬 퍼스트와 보안
|
|
117
124
|
|
|
118
125
|
- 세션 파일은 사용자 프로필에서 직접 읽습니다.
|
package/README.md
CHANGED
|
@@ -87,11 +87,16 @@ The `10-minute start guide` on Home lets you practice the same four steps. Progr
|
|
|
87
87
|
|---|---|
|
|
88
88
|
| Agent map | Live work grouped by Claude, Codex, Gemini, and Grok |
|
|
89
89
|
| Relationship view | The request origin, selected agent, and every directly delegated subagent |
|
|
90
|
+
| Execution units | Foreground shells, background shells, and background jobs started by an AI, including command, workspace, execution ID, and live status |
|
|
91
|
+
| Operations and attention inbox | Prioritized failures, stalls, context risk, approvals, decisions, and input requests with immediate actions |
|
|
90
92
|
| Session detail | Conversation, tool activity, lifecycle events, model, workspace, and status |
|
|
93
|
+
| Management summary | Checkpoints, observation confidence, completion summary, artifacts, verification, and run controls |
|
|
91
94
|
| Token view | Input, output, cached, reasoning, total, and reported context-window usage |
|
|
92
95
|
| Session terminal | The selected AI's prior conversation beside its existing PTY or tmux pane, with input continuing in that exact session |
|
|
93
96
|
| tmux workspace | Session → window → pane → AI process topology on macOS or Windows through WSL |
|
|
94
97
|
|
|
98
|
+
Schedules and loops, Session terminal, and tmux workspace live under **Advanced tools** so the everyday monitoring flow stays focused.
|
|
99
|
+
|
|
95
100
|
LoadToAgent distinguishes between a terminal it can control, a session that needs a bridge connection, a read-only session that must continue in its original app, and an ended session. It never types into an arbitrary external window.
|
|
96
101
|
|
|
97
102
|
## Use a connected terminal
|
|
@@ -113,6 +118,8 @@ loadtoagent run claude -- --model claude-sonnet-4-6
|
|
|
113
118
|
|
|
114
119
|
The external terminal and LoadToAgent dashboard control the same LoadToAgent-owned PTY. Opening a terminal from an AI card reuses the exact connected terminal instead of creating a new shell, keeps its PTY output intact across UI navigation, and shows that session's prior conversation in a live side rail. Sessions started arbitrarily elsewhere remain visible but read-only unless the original app exposes a supported handoff.
|
|
115
120
|
|
|
121
|
+
A terminal opened by LoadToAgent remains in the session-terminal list, with its output intact, whether it is running, idle, naturally exited, or failed to start. When any terminal is active, closing the window with `X` hides LoadToAgent in the system tray. An explicit `Quit app` closes the dashboard while a separate authenticated local terminal host keeps live PTYs running; the next launch reconnects to the same session ID, process, and output. A live terminal ends only when you choose `Close session`, the terminal exits naturally, or the operating-system session/terminal host itself stops.
|
|
122
|
+
|
|
116
123
|
## Local-first by design
|
|
117
124
|
|
|
118
125
|
- Session files are read directly from your user profile.
|
package/README.zh-CN.md
CHANGED
|
@@ -87,11 +87,16 @@ LoadToAgent 启动时会比较当前包版本与最新的稳定 GitHub Release
|
|
|
87
87
|
|---|---|
|
|
88
88
|
| 代理地图 | 按 Claude、Codex、Gemini 和 Grok 分组的实时任务 |
|
|
89
89
|
| 关系视图 | 用户请求、当前代理以及它直接委派的所有子代理 |
|
|
90
|
+
| 执行单元 | AI 启动的前台 Shell、后台 Shell 与后台任务,包括命令、工作目录、执行 ID 和实时状态 |
|
|
91
|
+
| 运行概览与待确认收件箱 | 按优先级集中展示失败、停滞、上下文风险、审批、决策和输入请求,并可立即处理 |
|
|
90
92
|
| 会话详情 | 对话、工具活动、执行过程、模型、工作目录和状态 |
|
|
93
|
+
| 管理摘要 | 检查点、观测置信度、完成摘要、产物、验证结果和执行控制 |
|
|
91
94
|
| Token 视图 | 输入、输出、缓存、推理、总量和已报告的上下文占用率 |
|
|
92
95
|
| 终端控制 | 本地 Shell,以及向 LoadToAgent 自有终端安全发送命令 |
|
|
93
96
|
| tmux 工作区 | macOS 或 Windows WSL 中的会话 → 窗口 → 面板 → AI 进程拓扑 |
|
|
94
97
|
|
|
98
|
+
计划与循环、会话终端和 tmux 工作区统一收纳在左侧的**高级工具**中,让日常监控流程保持聚焦。
|
|
99
|
+
|
|
95
100
|
LoadToAgent 会区分可直接控制的终端、需要桥接的会话、必须回到原应用继续的只读会话以及已结束会话。它不会向任意外部窗口注入键盘输入。
|
|
96
101
|
|
|
97
102
|
## 使用已连接的终端
|
|
@@ -113,6 +118,8 @@ loadtoagent run claude -- --model claude-sonnet-4-6
|
|
|
113
118
|
|
|
114
119
|
外部终端与 LoadToAgent 仪表盘会共同控制同一个 LoadToAgent 专用 PTY。在其他地方启动的现有会话仍然可见,但除非原应用提供受支持的交接方式,否则会保持只读。
|
|
115
120
|
|
|
121
|
+
LoadToAgent 打开的终端无论处于运行、空闲、自然退出或启动失败状态,都会连同输出保留在会话终端列表中。只要有终端仍在运行,点击窗口的 `X` 就会把 LoadToAgent 隐藏到系统托盘。即使从托盘明确选择“退出应用”来关闭仪表盘,独立且经过认证的本地终端主机仍会继续维护活动 PTY;下次启动会重新连接到相同的会话 ID、进程和输出。只有选择“关闭会话”、终端自然退出,或操作系统会话/终端主机本身停止时,活动终端才会结束。
|
|
122
|
+
|
|
116
123
|
## 本地优先与安全
|
|
117
124
|
|
|
118
125
|
- 会话文件直接从用户目录读取。
|
|
@@ -4,7 +4,29 @@ LoadToAgent는 제공사별 이벤트를 아래 공통 단계로 정규화합니
|
|
|
4
4
|
|
|
5
5
|
`queued → session-start → turn-start → reasoning/tool/message → turn-complete → session-end`
|
|
6
6
|
|
|
7
|
-
상태는 `starting`, `running`, `waiting`, `idle`, `completed`, `failed`, `cancelled` 중 하나입니다. 구조화 완료 이벤트가 없는 외부 세션은 파일 갱신 시각과 마지막 메시지 역할을 이용해 `running`, `waiting`, `idle`을 구분합니다.
|
|
7
|
+
상태는 `starting`, `running`, `paused`, `waiting`, `idle`, `completed`, `failed`, `cancelled` 중 하나입니다. `paused`는 LoadToAgent가 시작하고 사용자가 일시정지한 관리 실행에만 사용합니다. 구조화 완료 이벤트가 없는 외부 세션은 파일 갱신 시각과 마지막 메시지 역할을 이용해 `running`, `waiting`, `idle`을 구분합니다. 명시적인 사용자 입력 도구가 응답을 기다리거나 최종 assistant 메시지가 질문·선택 요청으로 끝나면, WCC 사용 여부와 관계없이 `waiting`으로 분류합니다. 이후 실제 사용자 메시지가 기록되면 해당 대기는 해제됩니다.
|
|
8
|
+
|
|
9
|
+
## 관리 인텔리전스 계약
|
|
10
|
+
|
|
11
|
+
제공사별 원본 세션은 화면에 전달되기 전에 다음 관리 정보로 보강됩니다.
|
|
12
|
+
|
|
13
|
+
- `attention`: 승인·결정·입력·오류·일시정지처럼 사용자 조치가 필요한 이유와 관측 신뢰도
|
|
14
|
+
- `progress`: 현재 단계, 완료율, 최근 체크포인트, 막힘 사유와 마지막 활동 시각
|
|
15
|
+
- `health`: 실패, 정체, 장시간 대기, 컨텍스트 위험, 반복 실패, 고아 에이전트 신호
|
|
16
|
+
- `controlCapabilities`: 실제 연결과 관리 실행 상태에 근거한 응답·중지·일시정지·재개·재시도·재배정 가능 여부
|
|
17
|
+
- `evidence`: 상태·계층·완료 판단이 직접 관측인지 추론인지와 근거 출처
|
|
18
|
+
- `outcome`: 완료 요약, 감지된 파일·테스트·커밋, 검증 이벤트와 완료 관측 여부
|
|
19
|
+
|
|
20
|
+
관측 이벤트가 없는 값은 사실로 단정하지 않고 `inferred` 또는 `unverified`로 표시합니다. 시간 기반 건강 신호는 매분 다시 계산됩니다.
|
|
21
|
+
|
|
22
|
+
## 셸·백그라운드 실행 계약
|
|
23
|
+
|
|
24
|
+
- 각 AI 세션은 `executions`에 자신이 시작한 셸과 백그라운드 실행을 별도 실행 단위로 보관합니다. 서브에이전트 세션과 섞어 세지 않습니다.
|
|
25
|
+
- 공통 필드는 `kind(shell|background)`, `mode(foreground|background)`, `status(running|completed|failed)`, 명령, 작업 폴더, 호출 ID, 시작·갱신·완료 시각입니다.
|
|
26
|
+
- Codex는 `shell_command`, `exec_command`와 `custom_tool_call: exec` 안의 `tools.exec_command(...)`를 인식합니다. 장기 실행이 반환한 cell/session ID는 후속 `wait`·`write_stdin` 호출과 연결합니다.
|
|
27
|
+
- Claude는 `Bash` 계열의 `run_in_background`와 후속 `TaskOutput`·`BashOutput`을 같은 실행으로 연결합니다. Gemini/Grok의 구조화 `tool_use`·`tool_result`에서도 셸 도구를 같은 계약으로 정규화합니다.
|
|
28
|
+
- 완료·실패 판정은 실행 도구의 바깥 결과 헤더와 실제 종료 코드 행을 우선합니다. 명령 출력 본문에 우연히 포함된 `session`이나 `exitCode` 문자열은 런타임 ID 또는 실패로 해석하지 않습니다.
|
|
29
|
+
- 스냅샷에는 최근 120개 실행을 보존하고, UI는 실행 중 항목을 먼저 표시한 뒤 최근 완료 기록을 제한적으로 보여 줍니다.
|
|
8
30
|
|
|
9
31
|
## Claude
|
|
10
32
|
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# UI 버튼 전수 점검 — 버그 수정·기능 개선 100
|
|
2
|
+
|
|
3
|
+
이 문서는 실제 제품 코드에 반영한 항목만 `[x]`로 표시하는 구현 장부다. 기존에 이미 동작하던 기능이나 테스트 개수는 100개에 포함하지 않는다.
|
|
4
|
+
|
|
5
|
+
## 탐색·검색·필터 (1–20)
|
|
6
|
+
|
|
7
|
+
1. [x] `Cmd/Ctrl+1~7`로 일곱 개 주요 화면을 바로 연다.
|
|
8
|
+
2. [x] 화면 버튼에 실제 단축키를 `aria-keyshortcuts`로 노출한다.
|
|
9
|
+
3. [x] 사이드바에서 위·아래 방향키로 다음 화면 버튼에 이동한다.
|
|
10
|
+
4. [x] 사이드바에서 Home·End로 첫/마지막 화면 버튼에 이동한다.
|
|
11
|
+
5. [x] `/`를 누르면 어느 화면에서든 전체 작업 검색으로 이동한다.
|
|
12
|
+
6. [x] 검색어가 있을 때 전용 지우기 버튼을 표시한다.
|
|
13
|
+
7. [x] 검색 지우기 버튼이 입력값·내부 필터·결과를 함께 초기화한다.
|
|
14
|
+
8. [x] 검색 입력에서 Escape로 검색어를 즉시 지운다.
|
|
15
|
+
9. [x] 검색 완료 후 결과 개수를 보조 기술에 알린다.
|
|
16
|
+
10. [x] 검색을 지운 뒤 검색 입력에 초점을 유지한다.
|
|
17
|
+
11. [x] ‘더 보기’ 후 새로 나타난 첫 작업 카드로 초점을 옮긴다.
|
|
18
|
+
12. [x] ‘더 보기’로 추가된 작업 개수를 알린다.
|
|
19
|
+
13. [x] 제공사 필터 칩을 방향키·Home·End로 탐색한다.
|
|
20
|
+
14. [x] 제공사 현황 카드를 방향키·Home·End로 탐색한다.
|
|
21
|
+
15. [x] 작업 폴더 목록을 위·아래 방향키·Home·End로 탐색한다.
|
|
22
|
+
16. [x] 정렬 변경 후 정렬 기준과 결과 개수를 알린다.
|
|
23
|
+
17. [x] 검색·제공사·작업 폴더·정렬을 한 번에 초기화하는 버튼을 추가한다.
|
|
24
|
+
18. [x] 제공사 필터 칩의 클릭 영역을 키운다.
|
|
25
|
+
19. [x] 검색 지우기 버튼의 터치 영역을 44px로 보강한다.
|
|
26
|
+
20. [x] 검색 입력에 `/` 단축키 정보를 노출한다.
|
|
27
|
+
|
|
28
|
+
## 모달·서랍·폼 접근성 (21–40)
|
|
29
|
+
|
|
30
|
+
21. [x] 대화상자가 열리면 앱 본문 전체를 `inert`로 격리한다.
|
|
31
|
+
22. [x] 건너뛰기 링크도 대화상자 뒤에서 초점되지 않도록 앱 셸 안으로 이동한다.
|
|
32
|
+
23. [x] 새 작업 모달이 열릴 때 모달 자체의 `inert`를 해제한다.
|
|
33
|
+
24. [x] 새 작업 모달의 `aria-hidden` 상태를 열림/닫힘과 동기화한다.
|
|
34
|
+
25. [x] 작업 상세 서랍이 열릴 때 배경 상호작용을 막는다.
|
|
35
|
+
26. [x] 작업 상세 서랍의 `aria-hidden` 상태를 열림/닫힘과 동기화한다.
|
|
36
|
+
27. [x] tmux 생성 모달이 열릴 때 배경 상호작용을 막는다.
|
|
37
|
+
28. [x] tmux 생성 모달의 `aria-hidden` 상태를 열림/닫힘과 동기화한다.
|
|
38
|
+
29. [x] 마지막 대화상자가 닫힌 뒤에만 앱 본문 상호작용을 복원한다.
|
|
39
|
+
30. [x] AI 선택기를 보조 기술용 `radiogroup`으로 변경한다.
|
|
40
|
+
31. [x] AI 선택 항목을 `radio`와 `aria-checked` 상태로 표현한다.
|
|
41
|
+
32. [x] AI 선택기에 선택 항목 한 개만 Tab 정지점으로 둔다.
|
|
42
|
+
33. [x] AI 선택기에서 네 방향키로 선택 항목을 바꾼다.
|
|
43
|
+
34. [x] AI 선택기에서 Home·End로 처음/마지막 항목을 선택한다.
|
|
44
|
+
35. [x] 최근 작업 폴더 버튼에 현재 선택 상태를 노출한다.
|
|
45
|
+
36. [x] 최근 작업 폴더를 좌우 방향키·Home·End로 탐색한다.
|
|
46
|
+
37. [x] 필수 입력 검증 실패를 `aria-invalid`로 표시한다.
|
|
47
|
+
38. [x] 잘못된 입력을 고치면 `aria-invalid`를 즉시 제거한다.
|
|
48
|
+
39. [x] tmux 작업 이름 규칙을 입력과 연결된 도움말로 제공한다.
|
|
49
|
+
40. [x] 새 작업 요청이 7,200자를 넘으면 8,000자 한도 접근 경고를 표시한다.
|
|
50
|
+
|
|
51
|
+
## 비동기 버튼·중복 실행 방지 (41–60)
|
|
52
|
+
|
|
53
|
+
41. [x] 공통 UI 비동기 버튼에 단일 실행 잠금을 추가한다.
|
|
54
|
+
42. [x] 처리 중인 버튼에 `aria-busy`와 시각적 진행 상태를 표시한다.
|
|
55
|
+
43. [x] AI 설치 문서 열기 버튼의 연속 클릭을 막는다.
|
|
56
|
+
44. [x] AI 설치 상태 재확인 버튼의 연속 클릭을 막는다.
|
|
57
|
+
45. [x] 새 작업 폴더 찾기 버튼의 연속 클릭을 막는다.
|
|
58
|
+
46. [x] 작업 폴더 추가 버튼의 연속 클릭을 막는다.
|
|
59
|
+
47. [x] 작업 폴더 제거 버튼의 연속 클릭을 막는다.
|
|
60
|
+
48. [x] AI 연결 상태 재확인 버튼의 연속 클릭을 막는다.
|
|
61
|
+
49. [x] 터미널 작업별 실행 중 상태를 추적하는 잠금 레지스트리를 추가한다.
|
|
62
|
+
50. [x] 같은 종류의 터미널 생성이 중복 실행되지 않게 한다.
|
|
63
|
+
51. [x] 같은 터미널의 재시작이 중복 실행되지 않게 한다.
|
|
64
|
+
52. [x] 같은 터미널의 종료가 중복 실행되지 않게 한다.
|
|
65
|
+
53. [x] tmux 새로고침이 중복 실행되지 않게 한다.
|
|
66
|
+
54. [x] 같은 tmux 칸 연결이 중복 실행되지 않게 한다.
|
|
67
|
+
55. [x] 같은 tmux 관리 명령이 중복 실행되지 않게 한다.
|
|
68
|
+
56. [x] 같은 tmux 레이아웃 변경이 중복 실행되지 않게 한다.
|
|
69
|
+
57. [x] tmux 생성 제출 버튼에 처리 중 잠금과 `aria-busy`를 적용한다.
|
|
70
|
+
58. [x] 업데이트 확인 버튼의 연속 클릭을 막고 처리 상태를 알린다.
|
|
71
|
+
59. [x] 업데이트 다운로드·설치 버튼의 연속 클릭을 막고 처리 상태를 알린다.
|
|
72
|
+
60. [x] GitHub 릴리스 열기 버튼의 연속 클릭을 막는다.
|
|
73
|
+
|
|
74
|
+
## 터미널·tmux 조작 (61–80)
|
|
75
|
+
|
|
76
|
+
61. [x] 터미널 세션 버튼에 현재 선택 상태를 노출한다.
|
|
77
|
+
62. [x] 터미널의 tmux 칸 버튼에 현재 선택 상태를 노출한다.
|
|
78
|
+
63. [x] tmux 배포판 노드에 현재 선택 상태를 노출한다.
|
|
79
|
+
64. [x] tmux 세션 노드에 현재 선택 상태를 노출한다.
|
|
80
|
+
65. [x] tmux 창 노드에 현재 선택 상태를 노출한다.
|
|
81
|
+
66. [x] tmux 칸 노드에 현재 선택 상태를 노출한다.
|
|
82
|
+
67. [x] Windows 터미널 생성 버튼을 실행 중 비활성화한다.
|
|
83
|
+
68. [x] Linux 터미널 생성 버튼을 실행 중 비활성화한다.
|
|
84
|
+
69. [x] tmux 새로고침 버튼을 실행 중 비활성화한다.
|
|
85
|
+
70. [x] tmux 직접 조작 연결 버튼을 실행 중 비활성화한다.
|
|
86
|
+
71. [x] 각 tmux 관리 버튼을 해당 명령 실행 중 비활성화한다.
|
|
87
|
+
72. [x] tmux 시작 폴더를 파일 선택기로 고르는 버튼을 추가한다.
|
|
88
|
+
73. [x] tmux 생성 실패 시 오류 메시지로 초점을 이동한다.
|
|
89
|
+
74. [x] tmux 이름에 공백을 입력하면 안전한 하이픈으로 정리하는 기능을 추가한다.
|
|
90
|
+
75. [x] tmux 필수 입력 검증 실패를 `aria-invalid`로 표시한다.
|
|
91
|
+
76. [x] tmux 입력을 고치면 `aria-invalid`를 즉시 제거한다.
|
|
92
|
+
77. [x] tmux 생성 창을 닫을 때 이전 오류 상태를 초기화한다.
|
|
93
|
+
78. [x] 터미널 명령 전송 중 보내기 버튼에 진행 상태를 표시한다.
|
|
94
|
+
79. [x] 터미널 명령 입력에 8,000자 제한과 실시간 글자 수를 표시한다.
|
|
95
|
+
80. [x] 터미널·tmux 세션 목록을 방향키·Home·End로 탐색한다.
|
|
96
|
+
|
|
97
|
+
## 버튼 계약·모바일·오류 복구 (81–100)
|
|
98
|
+
|
|
99
|
+
81. [x] 빈 작업 화면의 새 작업 버튼에 명시적 `type="button"`을 추가한다.
|
|
100
|
+
82. [x] 상세 서랍 닫기 버튼에 명시적 `type="button"`을 추가한다.
|
|
101
|
+
83. [x] 상세 서랍 탭 세 개에 명시적 버튼 타입을 추가한다.
|
|
102
|
+
84. [x] 동적으로 생성되는 작업 중단 버튼에 명시적 버튼 타입을 추가한다.
|
|
103
|
+
85. [x] 동적으로 생성되는 작업 재개 버튼에 명시적 버튼 타입을 추가한다.
|
|
104
|
+
86. [x] 아이콘 전용 버튼의 기본 클릭 영역을 40px로 키운다.
|
|
105
|
+
87. [x] 작업 폴더 제거 버튼의 클릭 영역을 40px로 키운다.
|
|
106
|
+
88. [x] 모달·서랍 닫기 버튼의 클릭 영역을 40px로 키운다.
|
|
107
|
+
89. [x] 터치 입력 환경의 모든 버튼·요약 컨트롤을 최소 44px로 만든다.
|
|
108
|
+
90. [x] 잘못된 폼 입력에 명확한 테두리와 초점 링을 표시한다.
|
|
109
|
+
91. [x] 처리 중인 버튼에 진행 커서와 명도 변화를 표시한다.
|
|
110
|
+
92. [x] 모바일 더보기 메뉴에서 방향키·Home·End로 이동한다.
|
|
111
|
+
93. [x] 모바일 더보기 메뉴 바깥을 누르면 메뉴를 닫는다.
|
|
112
|
+
94. [x] 모바일 더보기 메뉴를 닫을 때 더보기 버튼으로 초점을 돌린다.
|
|
113
|
+
95. [x] 상세 서랍 탭에서 위·아래 방향키도 지원한다.
|
|
114
|
+
96. [x] 상세 서랍 탭 목록의 가로 방향 정보를 보조 기술에 제공한다.
|
|
115
|
+
97. [x] 제공사 표시 설정 저장 실패 시 체크 상태와 필터를 원래대로 되돌린다.
|
|
116
|
+
98. [x] 새 작업 실행 실패 시 오류 메시지로 초점을 이동한다.
|
|
117
|
+
99. [x] 새 작업 제출 중 닫기·취소로 상태가 어긋나지 않게 보호한다.
|
|
118
|
+
100. [x] 모든 필터·화면 전환 결과를 하나의 상태 알림 규칙으로 통일한다.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# UI 버튼 전수 점검 — 신규 버그 수정·기능 개선 101–200
|
|
2
|
+
|
|
3
|
+
기존 [`UI-AUDIT-100.md`](./UI-AUDIT-100.md)의 1–100은 제외 기준으로 고정한다. 아래 항목은 실제 Electron UI, 접근성 트리, 112개 조작 선택자의 3회 전수 실행에서 새로 분리한 항목이며, 코드와 검증에 반영된 뒤에만 `[x]`로 바꾼다.
|
|
4
|
+
|
|
5
|
+
모든 항목은 현재 파일과 기대 동작이 명확해 `auto-fixable`로 분류했다. 심각도는 키보드·입력 손실·오류 복구를 `high`, 상태 전달·탐색을 `medium`, 편의 기능을 `low`로 두었다.
|
|
6
|
+
|
|
7
|
+
## 빠른 이동·전역 버튼 계약 (101–120)
|
|
8
|
+
|
|
9
|
+
101. [x] (`medium`) `Cmd/Ctrl+K`로 빠른 이동 창을 연다.
|
|
10
|
+
102. [x] (`low`) 빠른 이동 창에서 주요 화면과 자주 쓰는 작업을 한 번에 찾는다.
|
|
11
|
+
103. [x] (`medium`) 빠른 이동 검색어에 맞춰 명령 목록을 즉시 거른다.
|
|
12
|
+
104. [x] (`medium`) 빠른 이동 목록을 위·아래 방향키로 순환한다.
|
|
13
|
+
105. [x] (`medium`) 빠른 이동 목록에서 Home·End로 처음과 끝에 이동한다.
|
|
14
|
+
106. [x] (`medium`) 빠른 이동 창에서 Enter로 선택 명령을 실행한다.
|
|
15
|
+
107. [x] (`medium`) 빠른 이동 창에서 Escape로 닫고 원래 초점으로 돌아간다.
|
|
16
|
+
108. [x] (`medium`) 빠른 이동 배경을 눌러 닫아도 원래 초점으로 돌아간다.
|
|
17
|
+
109. [x] (`high`) 빠른 이동 입력이 현재 항목을 `aria-activedescendant`로 알린다.
|
|
18
|
+
110. [x] (`medium`) 빠른 이동 결과가 없을 때 상태 메시지를 알린다.
|
|
19
|
+
111. [x] (`low`) `?` 키로 키보드 단축키 도움말을 연다.
|
|
20
|
+
112. [x] (`low`) 상단에 단축키 도움말을 여는 전용 버튼을 추가한다.
|
|
21
|
+
113. [x] (`medium`) 단축키 도움말을 Escape로 닫고 초점을 복원한다.
|
|
22
|
+
114. [x] (`medium`) 단축키 도움말 배경을 눌러 닫고 초점을 복원한다.
|
|
23
|
+
115. [x] (`high`) 새 전역 대화상자도 본문을 `inert`로 격리하고 초점을 가둔다.
|
|
24
|
+
116. [x] (`medium`) 일곱 화면 이동 버튼을 실제 제어 영역과 `aria-controls`로 연결한다.
|
|
25
|
+
117. [x] (`medium`) 화면 이동 버튼의 접근 가능한 이름에 최신 개수를 동기화한다.
|
|
26
|
+
118. [x] (`low`) AI 재확인 버튼을 제공사 상태 영역과 연결한다.
|
|
27
|
+
119. [x] (`low`) 작업 폴더 추가 버튼을 작업 폴더 목록과 연결한다.
|
|
28
|
+
120. [x] (`low`) 업데이트 안내 버튼을 설정의 업데이트 패널과 연결한다.
|
|
29
|
+
|
|
30
|
+
## 검색·필터·작업 폴더 상태 보존 (121–140)
|
|
31
|
+
|
|
32
|
+
121. [x] (`medium`) 대시보드 조건을 버전이 있는 로컬 저장 형식으로 보존한다.
|
|
33
|
+
122. [x] (`medium`) 다시 열었을 때 검색어를 복원한다.
|
|
34
|
+
123. [x] (`medium`) 다시 열었을 때 복수 AI 필터를 복원한다.
|
|
35
|
+
124. [x] (`medium`) 다시 열었을 때 작업 폴더 필터를 복원한다.
|
|
36
|
+
125. [x] (`medium`) 다시 열었을 때 정렬 기준을 복원한다.
|
|
37
|
+
126. [x] (`high`) 손상되거나 오래된 저장값은 안전한 기본값으로 복구한다.
|
|
38
|
+
127. [x] (`medium`) 검색어를 240자로 제한해 과도한 렌더링을 막는다.
|
|
39
|
+
128. [x] (`low`) 검색 비교에서 연속 공백을 하나로 정규화한다.
|
|
40
|
+
129. [x] (`low`) 현재 결과 개수를 화면에 보이는 요약으로 표시한다.
|
|
41
|
+
130. [x] (`medium`) 검색·필터·정렬·더 보기 후 결과 요약을 즉시 갱신한다.
|
|
42
|
+
131. [x] (`medium`) 검색 입력에서 아래 방향키로 첫 결과 카드에 이동한다.
|
|
43
|
+
132. [x] (`medium`) 검색 결과가 하나면 Enter로 바로 상세를 연다.
|
|
44
|
+
133. [x] (`low`) 필터 때문에 빈 화면이 되면 ‘조건 지우기’ 버튼을 제공한다.
|
|
45
|
+
134. [x] (`low`) ‘조건 지우기’ 버튼은 실제 조건이 있을 때만 표시한다.
|
|
46
|
+
135. [x] (`medium`) 빈 화면의 ‘조건 지우기’가 모든 조건을 초기화하고 검색에 초점을 둔다.
|
|
47
|
+
136. [x] (`medium`) 작업 폴더 선택 목록에 명시적인 그룹 이름을 제공한다.
|
|
48
|
+
137. [x] (`medium`) AI 필터를 키보드 도구 모음으로 표현한다.
|
|
49
|
+
138. [x] (`medium`) AI 필터에는 한 개의 순회 Tab 정지점만 둔다.
|
|
50
|
+
139. [x] (`medium`) AI 현황 카드에도 한 개의 순회 Tab 정지점만 둔다.
|
|
51
|
+
140. [x] (`medium`) 조건 변경·초기화 직후 저장 상태를 실제 UI와 동기화한다.
|
|
52
|
+
|
|
53
|
+
## 새 AI 작업 작성·검증 (141–160)
|
|
54
|
+
|
|
55
|
+
141. [x] (`medium`) 새 작업 작성 상태를 버전이 있는 세션 초안으로 보존한다.
|
|
56
|
+
142. [x] (`high`) 작성 중인 요청 내용을 닫았다 다시 열어도 복원한다.
|
|
57
|
+
143. [x] (`high`) 작성 중인 작업 폴더를 닫았다 다시 열어도 복원한다.
|
|
58
|
+
144. [x] (`medium`) 직접 지정한 모델을 닫았다 다시 열어도 복원한다.
|
|
59
|
+
145. [x] (`high`) 파일 수정 허용 선택을 닫았다 다시 열어도 복원한다.
|
|
60
|
+
146. [x] (`medium`) 선택한 AI를 닫았다 다시 열어도 복원한다.
|
|
61
|
+
147. [x] (`high`) 손상된 초안 저장값은 입력을 막지 않고 기본값으로 복구한다.
|
|
62
|
+
148. [x] (`low`) 작성 중인 값을 한 번에 비우는 ‘초안 지우기’ 버튼을 추가한다.
|
|
63
|
+
149. [x] (`medium`) 초안 지우기 후 모든 작성 상태를 초기화하고 요청 입력에 초점을 둔다.
|
|
64
|
+
150. [x] (`medium`) 요청 입력을 실시간 글자 수와 `aria-describedby`로 연결한다.
|
|
65
|
+
151. [x] (`high`) 공백만 있는 요청을 유효한 필수 입력으로 통과시키지 않는다.
|
|
66
|
+
152. [x] (`high`) 공백만 있는 작업 폴더를 유효한 필수 입력으로 통과시키지 않는다.
|
|
67
|
+
153. [x] (`high`) 제출 검증 실패 시 첫 번째 잘못된 입력으로 초점을 옮긴다.
|
|
68
|
+
154. [x] (`medium`) 요청 공백 오류를 구체적인 메시지로 표시한다.
|
|
69
|
+
155. [x] (`medium`) 작업 폴더 공백 오류를 구체적인 메시지로 표시한다.
|
|
70
|
+
156. [x] (`medium`) 사용자가 입력을 고치기 시작하면 이전 실행 오류를 지운다.
|
|
71
|
+
157. [x] (`low`) 제출 버튼에 `Cmd/Ctrl+Enter` 단축키 정보를 노출한다.
|
|
72
|
+
158. [x] (`low`) 모델 입력의 브라우저 자동완성을 끈다.
|
|
73
|
+
159. [x] (`low`) 모델 입력의 맞춤법 교정을 끈다.
|
|
74
|
+
160. [x] (`high`) 모달 안에서 누르기 시작해 바깥에서 놓아도 실수로 닫히지 않게 한다.
|
|
75
|
+
|
|
76
|
+
## 런타임·상세 서랍 탐색 (161–180)
|
|
77
|
+
|
|
78
|
+
161. [x] (`medium`) 실행 루프 선택 영역을 `tablist`로 표현한다.
|
|
79
|
+
162. [x] (`medium`) 실행 루프 선택 버튼을 `tab`으로 표현한다.
|
|
80
|
+
163. [x] (`medium`) 선택한 실행 루프를 `aria-selected`로 알린다.
|
|
81
|
+
164. [x] (`medium`) 실행 루프에는 한 개의 순회 Tab 정지점만 둔다.
|
|
82
|
+
165. [x] (`medium`) 실행 루프를 좌우·상하 방향키로 전환한다.
|
|
83
|
+
166. [x] (`medium`) 실행 루프에서 Home·End로 처음과 끝을 선택한다.
|
|
84
|
+
167. [x] (`medium`) 예약 목록을 `listbox`로 표현한다.
|
|
85
|
+
168. [x] (`medium`) 각 예약을 읽을 수 있는 `option`으로 표현한다.
|
|
86
|
+
169. [x] (`medium`) 연결된 대화가 없는 예약도 키보드 초점을 받을 수 있게 한다.
|
|
87
|
+
170. [x] (`medium`) 예약 목록을 위·아래 방향키로 이동한다.
|
|
88
|
+
171. [x] (`medium`) 예약 목록에서 Home·End로 처음과 끝에 이동한다.
|
|
89
|
+
172. [x] (`low`) 상세 서랍 탭을 `Ctrl+PageUp`으로 이전 탭으로 전환한다.
|
|
90
|
+
173. [x] (`low`) 상세 서랍 탭을 `Ctrl+PageDown`으로 다음 탭으로 전환한다.
|
|
91
|
+
174. [x] (`low`) 상세 서랍에서 전체 작업 ID를 복사하는 버튼을 제공한다.
|
|
92
|
+
175. [x] (`low`) 상세 서랍에서 전체 작업 폴더 경로를 복사하는 버튼을 제공한다.
|
|
93
|
+
176. [x] (`medium`) Clipboard API가 없을 때도 안전한 복사 대체 경로를 사용한다.
|
|
94
|
+
177. [x] (`medium`) 복사 성공과 실패를 상태 메시지로 알린다.
|
|
95
|
+
178. [x] (`low`) 잘린 상세 제목의 전체 텍스트를 툴팁으로 제공한다.
|
|
96
|
+
179. [x] (`medium`) 상세 다시 시도 버튼의 중복 클릭을 막고 진행 상태를 표시한다.
|
|
97
|
+
180. [x] (`medium`) 상세 재개 버튼의 중복 클릭을 막고 진행 상태를 표시한다.
|
|
98
|
+
|
|
99
|
+
## 터미널·tmux 키보드와 오류 복구 (181–200)
|
|
100
|
+
|
|
101
|
+
181. [x] (`medium`) 일반 터미널 세션 목록을 `listbox`로 표현한다.
|
|
102
|
+
182. [x] (`medium`) 터미널 세션을 선택 가능한 `option`과 `aria-selected`로 표현한다.
|
|
103
|
+
183. [x] (`medium`) 터미널 세션에는 한 개의 순회 Tab 정지점만 둔다.
|
|
104
|
+
184. [x] (`medium`) tmux 칸 목록을 `listbox`로 표현한다.
|
|
105
|
+
185. [x] (`medium`) tmux 칸을 선택 가능한 `option`과 `aria-selected`로 표현한다.
|
|
106
|
+
186. [x] (`medium`) tmux 칸 목록에도 한 개의 순회 Tab 정지점만 둔다.
|
|
107
|
+
187. [x] (`low`) 세션이나 tmux 칸 선택 후 명령 입력으로 바로 이동한다.
|
|
108
|
+
188. [x] (`low`) 명령 입력에서 Escape로 현재 초안을 지운다.
|
|
109
|
+
189. [x] (`low`) 마우스로도 쓸 수 있는 명령 초안 지우기 버튼을 추가한다.
|
|
110
|
+
190. [x] (`low`) 대상별로 성공한 명령 기록을 보존한다.
|
|
111
|
+
191. [x] (`low`) 명령 입력에서 위 방향키로 이전 명령을 불러온다.
|
|
112
|
+
192. [x] (`low`) 명령 입력에서 아래 방향키로 다음 명령을 불러온다.
|
|
113
|
+
193. [x] (`medium`) 명령 기록 탐색을 끝내면 원래 작성 중이던 초안을 복원한다.
|
|
114
|
+
194. [x] (`medium`) 명령이 7,200자를 넘으면 한도 접근 경고를 표시한다.
|
|
115
|
+
195. [x] (`high`) 명령 전송 실패 시 오류 상태 메시지로 초점을 옮긴다.
|
|
116
|
+
196. [x] (`low`) 중단·화면 정리 버튼에 실제 키 조합을 `aria-keyshortcuts`로 노출한다.
|
|
117
|
+
197. [x] (`medium`) 터미널 다시 시작 버튼에 중복 실행 방지와 진행 상태를 표시한다.
|
|
118
|
+
198. [x] (`medium`) 터미널 종료 버튼에 중복 실행 방지와 진행 상태를 표시한다.
|
|
119
|
+
199. [x] (`medium`) tmux 지도 노드를 방향키·Home·End로 탐색한다.
|
|
120
|
+
200. [x] (`medium`) tmux 탐색 경로의 현재 위치와 키보드 이동을 보조 기술에 제공한다.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# UI 버튼 전수 점검 — 신규 버그 수정·기능 개선 201–300
|
|
2
|
+
|
|
3
|
+
기존 [`UI-AUDIT-100.md`](./UI-AUDIT-100.md)의 1–100과 [`UI-AUDIT-101-200.md`](./UI-AUDIT-101-200.md)의 101–200은 제외 기준으로 고정한다. 아래 항목은 전역 버튼·입력 제어의 상태 복구, 포커스, 작은 화면 조작, 저장소 안전성을 새로 분리한 항목이며, 코드와 검증에 반영된 뒤에만 `[x]`로 바꾼다.
|
|
4
|
+
|
|
5
|
+
모든 항목은 현재 파일과 기대 동작이 명확해 `auto-fixable`로 분류했다. 심각도는 입력·포커스 손실과 저장소 복구를 `high`, 제어 상태 전달과 모바일 조작을 `medium`, 마찰 감소를 `low`로 두었다.
|
|
6
|
+
|
|
7
|
+
## 전역 제어 상태와 입력 방식 (201–220)
|
|
8
|
+
|
|
9
|
+
201. [x] (`medium`) 전역 품질 설정을 버전이 있는 로컬 저장 형식으로 분리한다.
|
|
10
|
+
202. [x] (`high`) 손상된 품질 설정 저장값은 기본값으로 복구한다.
|
|
11
|
+
203. [x] (`medium`) 마지막 입력 방식이 키보드인지 포인터인지 상태에 기록된다.
|
|
12
|
+
204. [x] (`medium`) 키보드 조작으로 전환되면 본문에 키보드 모드 클래스를 적용한다.
|
|
13
|
+
205. [x] (`medium`) 포인터 조작으로 전환되면 키보드 모드 클래스를 해제한다.
|
|
14
|
+
206. [x] (`low`) 입력 방식 상태는 다음 실행에도 보존된다.
|
|
15
|
+
207. [x] (`medium`) 품질 설정의 모션 선호값을 본문 데이터 속성으로 반영한다.
|
|
16
|
+
208. [x] (`medium`) 품질 설정의 밀도 선호값을 본문 데이터 속성으로 반영한다.
|
|
17
|
+
209. [x] (`low`) 품질 설정 기본값을 한 함수에서 재사용한다.
|
|
18
|
+
210. [x] (`medium`) 품질 설정 저장 실패를 복구 가능한 오류로 보고한다.
|
|
19
|
+
211. [x] (`medium`) 전역 제어 보강은 중복 설치되지 않는다.
|
|
20
|
+
212. [x] (`medium`) 전역 제어 보강 설치 후 기존 제어 요소를 즉시 스캔한다.
|
|
21
|
+
213. [x] (`medium`) 새로 렌더링되는 제어 요소도 MutationObserver로 보강한다.
|
|
22
|
+
214. [x] (`low`) 제어 보강 재스캔은 animation frame으로 묶어 과도한 반복을 줄인다.
|
|
23
|
+
215. [x] (`medium`) disabled 속성이 바뀌면 제어 상태를 다시 계산한다.
|
|
24
|
+
216. [x] (`medium`) aria-disabled 속성이 바뀌면 제어 상태를 다시 계산한다.
|
|
25
|
+
217. [x] (`low`) 클래스 변경으로 크기나 라벨이 바뀌어도 제어 상태를 다시 계산한다.
|
|
26
|
+
218. [x] (`low`) 제목과 접근 가능한 이름 변경도 보강 대상으로 잡는다.
|
|
27
|
+
219. [x] (`medium`) 뷰포트 폭을 mobile/tablet/desktop 상태로 분류한다.
|
|
28
|
+
220. [x] (`medium`) 창 크기 변경 후 뷰포트 분류를 갱신한다.
|
|
29
|
+
|
|
30
|
+
## 버튼 라벨·터치 타깃·눌림 상태 (221–240)
|
|
31
|
+
|
|
32
|
+
221. [x] (`high`) 아이콘 버튼에 접근 가능한 이름이 없으면 기존 텍스트와 title에서 보완한다.
|
|
33
|
+
222. [x] (`high`) 상단 아이콘 액션에 접근 가능한 이름이 없으면 보완한다.
|
|
34
|
+
223. [x] (`high`) 닫기 버튼에 접근 가능한 이름이 없으면 보완한다.
|
|
35
|
+
224. [x] (`medium`) 모든 버튼에 품질 제어 데이터 표식을 추가한다.
|
|
36
|
+
225. [x] (`medium`) role=button 요소에도 품질 제어 데이터 표식을 추가한다.
|
|
37
|
+
226. [x] (`low`) input 요소에도 품질 제어 데이터 표식을 추가한다.
|
|
38
|
+
227. [x] (`low`) select 요소에도 품질 제어 데이터 표식을 추가한다.
|
|
39
|
+
228. [x] (`low`) textarea 요소에도 품질 제어 데이터 표식을 추가한다.
|
|
40
|
+
229. [x] (`medium`) type이 없는 button은 기본 submit으로 새지 않도록 button 타입을 지정한다.
|
|
41
|
+
230. [x] (`medium`) 필수 input은 aria-required를 함께 노출한다.
|
|
42
|
+
231. [x] (`medium`) 필수 textarea는 aria-required를 함께 노출한다.
|
|
43
|
+
232. [x] (`medium`) 필수 select는 aria-required를 함께 노출한다.
|
|
44
|
+
233. [x] (`medium`) 40px보다 작은 버튼은 터치 타깃 보강 상태로 표시한다.
|
|
45
|
+
234. [x] (`low`) 작은 터치 타깃은 가상 hit area를 제공한다.
|
|
46
|
+
235. [x] (`medium`) pointerdown 시 버튼 눌림 상태를 데이터 속성으로 표시한다.
|
|
47
|
+
236. [x] (`medium`) pointerup 시 버튼 눌림 상태를 해제한다.
|
|
48
|
+
237. [x] (`medium`) pointercancel 시 버튼 눌림 상태를 해제한다.
|
|
49
|
+
238. [x] (`medium`) pointerleave 시 버튼 눌림 상태를 해제한다.
|
|
50
|
+
239. [x] (`medium`) Space 키로 버튼을 누를 때도 눌림 상태를 표시한다.
|
|
51
|
+
240. [x] (`medium`) Enter 키로 버튼을 누를 때도 눌림 상태를 표시한다.
|
|
52
|
+
|
|
53
|
+
## 비활성·오버플로·폼 복구 (241–260)
|
|
54
|
+
|
|
55
|
+
241. [x] (`medium`) keyup 후 키보드 눌림 상태를 해제한다.
|
|
56
|
+
242. [x] (`medium`) disabled 버튼은 품질 비활성 상태로 표시한다.
|
|
57
|
+
243. [x] (`medium`) aria-disabled 버튼은 품질 비활성 상태로 표시한다.
|
|
58
|
+
244. [x] (`low`) 다시 활성화된 버튼은 품질 비활성 상태를 제거한다.
|
|
59
|
+
245. [x] (`medium`) 비활성 버튼에 설명이 없으면 기본 비활성 사유를 제공한다.
|
|
60
|
+
246. [x] (`medium`) 비활성 사유 문구를 한국어로 제공한다.
|
|
61
|
+
247. [x] (`medium`) 비활성 사유 문구를 영어로 제공한다.
|
|
62
|
+
248. [x] (`medium`) 비활성 사유 문구를 중국어로 제공한다.
|
|
63
|
+
249. [x] (`low`) 제어 라벨 후보는 aria-label을 우선한다.
|
|
64
|
+
250. [x] (`low`) 제어 라벨 후보는 title을 두 번째로 사용한다.
|
|
65
|
+
251. [x] (`low`) 제어 라벨 후보는 보이는 텍스트를 세 번째로 사용한다.
|
|
66
|
+
252. [x] (`low`) 제어 라벨 후보는 i18n 키와 id까지 안전하게 fallback한다.
|
|
67
|
+
253. [x] (`medium`) 라벨 후보의 연속 공백을 하나로 정규화한다.
|
|
68
|
+
254. [x] (`medium`) 라벨 후보를 180자로 제한해 과도한 title을 막는다.
|
|
69
|
+
255. [x] (`medium`) 넘치는 버튼 라벨에는 title을 자동 보완한다.
|
|
70
|
+
256. [x] (`medium`) 넘치는 내비게이션 항목에는 title을 자동 보완한다.
|
|
71
|
+
257. [x] (`medium`) 넘치는 메타 칩에는 title을 자동 보완한다.
|
|
72
|
+
258. [x] (`low`) 넘치는 세션 카드 제목에는 title을 자동 보완한다.
|
|
73
|
+
259. [x] (`low`) 넘치는 터미널 세션 카드에는 title을 자동 보완한다.
|
|
74
|
+
260. [x] (`medium`) 창 크기 변경 후 오버플로 title을 다시 계산한다.
|
|
75
|
+
|
|
76
|
+
## 입력 오류 회복과 고급 설정 보존 (261–280)
|
|
77
|
+
|
|
78
|
+
261. [x] (`high`) 사용자가 잘못된 입력을 고치면 aria-invalid를 자동 해제한다.
|
|
79
|
+
262. [x] (`high`) 사용자가 폼 입력을 고치면 보이는 폼 오류를 자동 숨긴다.
|
|
80
|
+
263. [x] (`medium`) 빈 값 입력은 오류 해제를 성급하게 하지 않는다.
|
|
81
|
+
264. [x] (`medium`) 모델 입력은 blur 시 앞뒤 공백을 제거한다.
|
|
82
|
+
265. [x] (`medium`) tmux 작업 묶음 이름은 blur 시 앞뒤 공백을 제거한다.
|
|
83
|
+
266. [x] (`medium`) tmux 시작 폴더는 blur 시 앞뒤 공백을 제거한다.
|
|
84
|
+
267. [x] (`medium`) 새 작업 고급 설정 펼침 상태를 품질 설정에 보존한다.
|
|
85
|
+
268. [x] (`medium`) 새 작업 고급 설정은 다시 열 때 이전 펼침 상태를 복원한다.
|
|
86
|
+
269. [x] (`medium`) 고급 설정 toggle 후 저장 실패를 복구 가능한 오류로 보고한다.
|
|
87
|
+
270. [x] (`low`) 줄어든 모션 설정은 전체 전환 시간을 최소화한다.
|
|
88
|
+
271. [x] (`low`) 줄어든 모션 설정은 전체 애니메이션 시간을 최소화한다.
|
|
89
|
+
272. [x] (`low`) 줄어든 모션 설정은 반복 애니메이션을 1회로 제한한다.
|
|
90
|
+
273. [x] (`low`) 줄어든 모션 설정은 부드러운 스크롤을 끈다.
|
|
91
|
+
274. [x] (`medium`) 키보드 모드에서는 focus-visible 윤곽선을 더 강하게 표시한다.
|
|
92
|
+
275. [x] (`medium`) 모든 품질 제어는 터치 조작을 manipulation으로 제한한다.
|
|
93
|
+
276. [x] (`low`) 눌림 상태는 밝기와 위치 변화로 즉시 보인다.
|
|
94
|
+
277. [x] (`low`) 비활성 상태는 not-allowed 커서로 드러난다.
|
|
95
|
+
278. [x] (`low`) compact 밀도 상태에서는 세션 격자 간격을 줄인다.
|
|
96
|
+
279. [x] (`low`) compact 밀도 상태에서는 터미널 레이아웃 간격을 줄인다.
|
|
97
|
+
280. [x] (`medium`) 모바일 뷰포트에서는 품질 모달 모서리 처리를 화면 하단에 맞춘다.
|
|
98
|
+
|
|
99
|
+
## 검증·계약·회귀 방지 (281–300)
|
|
100
|
+
|
|
101
|
+
281. [x] (`high`) 201–300 문서는 정확히 100개의 완료 항목만 포함한다.
|
|
102
|
+
282. [x] (`high`) 1–300 전체 문서는 정확히 300개의 완료 항목만 포함한다.
|
|
103
|
+
283. [x] (`high`) 201–300 번호는 이전 1–200 번호와 겹치지 않는다.
|
|
104
|
+
284. [x] (`high`) 201–300 문서에는 미완료 체크박스가 없다.
|
|
105
|
+
285. [x] (`medium`) 품질 설정 저장 키가 회귀 테스트 계약에 포함된다.
|
|
106
|
+
286. [x] (`medium`) 품질 설정 버전이 회귀 테스트 계약에 포함된다.
|
|
107
|
+
287. [x] (`medium`) 기본 품질 설정 함수가 회귀 테스트 계약에 포함된다.
|
|
108
|
+
288. [x] (`medium`) 품질 설정 적용 함수가 회귀 테스트 계약에 포함된다.
|
|
109
|
+
289. [x] (`medium`) 품질 제어 보강 함수가 회귀 테스트 계약에 포함된다.
|
|
110
|
+
290. [x] (`medium`) 전역 품질 guard 설치 함수가 회귀 테스트 계약에 포함된다.
|
|
111
|
+
291. [x] (`medium`) 입력 방식 추적 함수가 회귀 테스트 계약에 포함된다.
|
|
112
|
+
292. [x] (`medium`) 버튼 눌림 상태 mirror 함수가 회귀 테스트 계약에 포함된다.
|
|
113
|
+
293. [x] (`medium`) 폼 오류 회복 함수가 회귀 테스트 계약에 포함된다.
|
|
114
|
+
294. [x] (`medium`) 고급 설정 상태 보존 함수가 회귀 테스트 계약에 포함된다.
|
|
115
|
+
295. [x] (`medium`) 오버플로 title 보강 함수가 회귀 테스트 계약에 포함된다.
|
|
116
|
+
296. [x] (`medium`) 뷰포트 안전 클래스 함수가 회귀 테스트 계약에 포함된다.
|
|
117
|
+
297. [x] (`medium`) disabled 기본 사유 번역 키가 회귀 테스트 계약에 포함된다.
|
|
118
|
+
298. [x] (`medium`) 터치 타깃 보강 CSS가 회귀 테스트 계약에 포함된다.
|
|
119
|
+
299. [x] (`medium`) 줄어든 모션 품질 CSS가 회귀 테스트 계약에 포함된다.
|
|
120
|
+
300. [x] (`medium`) 키보드 모드 포커스 CSS가 회귀 테스트 계약에 포함된다.
|