fix(today): announce dashboard empty states - #1638
Conversation
Add a focused asynchronous loading-to-empty regression on the current Today/navigation ancestry. The unchanged source renders the three primary empty states without status live-region semantics, so this commit is the source-order RED. Signed-off-by: Seongho Bae <me@seonghobae.me>
|
Warning Review limit reachedNext included review available in 11 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (2)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Isolate only the three generated WorkspaceHome live-region changes on protected-develop ancestry so Git can perform an ordinary three-way integration into the active Today owner without copying stale dashboard source. Signed-off-by: Seongho Bae <me@seonghobae.me>
Ordinary three-way integration of the three live-region changes into the active #1608 successor. Preserve the focused RED test and all existing Today/navigation source.
|
@coderabbitai review Review current exact head |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
base="72bfd55426602147277b543de6103cd4b88b7644"
head="e54e46c3d46b30a1fe2af9ed6a3d4f8b3143e2f4"
component="frontend/src/components/WorkspaceHome.tsx"
test_file="frontend/src/components/WorkspaceHome.empty-live-region.test.tsx"
echo "== Exact commits =="
git show -s --format='BASE %H%n%s%n%an <%ae>%n%ad' --date=iso-strict "$base"
git show -s --format='HEAD %H%n%s%n%an <%ae>%n%ad' --date=iso-strict "$head"
echo
echo "== Complete effective name-status delta =="
git diff --name-status "$base" "$head"
echo
echo "== Scoped effective patch =="
git diff --no-ext-diff --unified=80 "$base" "$head" -- "$component" "$test_file"
echo
echo "== Component outline at exact head =="
git show "$head:$component" > /tmp/WorkspaceHome.tsx
ast-grep outline /tmp/WorkspaceHome.tsx --items all || true
echo
echo "== Focused test outline at exact head =="
git show "$head:$test_file" > /tmp/WorkspaceHome.empty-live-region.test.tsx
ast-grep outline /tmp/WorkspaceHome.empty-live-region.test.tsx --items all || true
echo
echo "== State and navigation references in component at exact head =="
grep -nE -C 4 \
'role=|aria-live|답변 대기|대기 작업|수신된 메일|loading|Loading|error|Error|unavailable|Unavailable|retry|Retry|navigate|router|href|onClick' \
/tmp/WorkspaceHome.tsx || true
echo
echo "== Deferred request and assertion references in focused test at exact head =="
grep -nE -C 5 \
'defer|Promise|resolve|reject|/api/emails|pending-replies|/api/tasks|waitFor|status|aria-live|답변 대기|대기 작업|수신된 메일|loading|Loading|error|Error|unavailable|Unavailable' \
/tmp/WorkspaceHome.empty-live-region.test.tsx || true
echo
echo "== Search for stale generated `#1633` markers or stale dashboard test/source references in effective delta =="
git diff --no-ext-diff "$base" "$head" | grep -nE -i -C 2 \
'1633|jules|workspacehome|dashboard|empty-live-region' || trueLength of output: 76599
Use the test framework wait utility, or explicitly flush the deferred promise chain inside The effective source delta otherwise contains only the two specified files. You are interacting with an AI system. |
Repair the current review finding by removing bounded real-timer polling from the dashboard loading-to-empty regression. Resolve and await the controlled response/body promises inside React act so runner speed cannot exhaust a fixed retry loop. Product source remains unchanged. Signed-off-by: Seongho Bae <me@seonghobae.me>
|
@coderabbitai review Re-review current exact head |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
base="72bfd55426602147277b543de6103cd4b88b7644"
head="e7e8754b17754f3d85f25477424da9087bf8e9ec"
component="frontend/src/components/WorkspaceHome.tsx"
test_file="frontend/src/components/WorkspaceHome.empty-live-region.test.tsx"
git cat-file -e "${base}^{commit}"
git cat-file -e "${head}^{commit}"
echo "== Effective file delta =="
git diff --name-status "$base" "$head"
echo "== Effective scoped patch =="
git diff --no-ext-diff --unified=60 "$base" "$head" -- "$component" "$test_file"
echo "== Component outline at head =="
git show "$head:$component" > /tmp/WorkspaceHome.tsx
ast-grep outline /tmp/WorkspaceHome.tsx --items all || true
echo "== Focused test outline at head =="
git show "$head:$test_file" > /tmp/WorkspaceHome.empty-live-region.test.tsx
ast-grep outline /tmp/WorkspaceHome.empty-live-region.test.tsx --items all || true
echo "== Component empty/loading/error/navigation contexts =="
rg -n -C 8 \
'role=|aria-live|답변 대기 중인 보낸 메일이 없습니다\.|대기 작업이 없습니다\.|수신된 메일이 없습니다\.|loading|Loading|error|Error|unavailable|Unavailable|retry|Retry|navigate|router|href|onClick' \
/tmp/WorkspaceHome.tsx || true
echo "== Test controlled-promise and act contexts =="
git show "$head:$test_file" > /tmp/WorkspaceHome.empty-live-region.test.tsx
rg -n -C 8 \
'act|Promise|resolve|json|/api/emails|pending-replies|/api/tasks|waitForCondition|setTimeout|setInterval|role|aria-live|답변 대기|대기 작업|수신된 메일' \
/tmp/WorkspaceHome.empty-live-region.test.tsx || true
echo "== Bounded polling indicators in focused test =="
rg -n -C 3 'setTimeout|setInterval|waitForCondition|for\s*\(|while\s*\(|20|delay|timer' \
/tmp/WorkspaceHome.empty-live-region.test.tsx || true
echo "== Stale generated-source indicators in effective delta =="
git diff --no-ext-diff "$base" "$head" | rg -n -i -C 3 '1633|jules|generated|dashboard' || trueLength of output: 83909
The effective delta contains only the requested two files.
The unavailable branches remain before and distinct from the empty branches. The effective component diff does not change Today recovery, startup-view selection, or navigation behavior. The focused test resolves and awaits all controlled response and JSON-body promises inside asynchronous React I found no stale generated You are interacting with an AI system. |
|
@coderabbitai review 현재 exact head |
🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
base="72bfd55426602147277b543de6103cd4b88b7644"
head="e7e8754b17754f3d85f25477424da9087bf8e9ec"
component="frontend/src/components/WorkspaceHome.tsx"
git cat-file -e "${base}^{commit}"
git cat-file -e "${head}^{commit}"
echo "== Exact commits =="
git show -s --format='%H%n%s%n%an <%ae>%n%ad' --date=iso-strict "$base"
git show -s --format='%H%n%s%n%an <%ae>%n%ad' --date=iso-strict "$head"
echo "== Effective file delta =="
git diff --name-status "$base" "$head"
echo "== Candidate focused test paths at exact head =="
git ls-tree -r --name-only "$head" | rg '(^|/)WorkspaceHome\.empty-live-regions?\.test\.tsx$' || true
test_file="$(git diff --name-only "$base" "$head" | rg '(^|/)WorkspaceHome\.empty-live-regions?\.test\.tsx$' | head -n 1)"
test -n "$test_file"
echo "== Selected test file =="
printf '%s\n' "$test_file"
echo "== Complete scoped patch =="
git diff --no-ext-diff --unified=80 "$base" "$head" -- "$component" "$test_file"
git show "$head:$component" > /tmp/WorkspaceHome.tsx
git show "$head:$test_file" > /tmp/WorkspaceHome.empty-live-region.test.tsx
echo "== Component structure =="
ast-grep outline /tmp/WorkspaceHome.tsx --items all || true
echo "== Focused test structure =="
ast-grep outline /tmp/WorkspaceHome.empty-live-region.test.tsx --items all || true
echo "== Component empty, loading, unavailable/error, and navigation contexts =="
rg -n -C 10 \
'role=|aria-live|답변 대기 중인 보낸 메일이 없습니다\.|대기 작업이 없습니다\.|수신된 메일이 없습니다\.|loading|Loading|unavailable|Unavailable|error|Error|retry|Retry|navigate|router|href|onClick' \
/tmp/WorkspaceHome.tsx || true
echo "== Test promise, act, fetch, assertion, and timer contexts =="
rg -n -C 12 \
'act|Promise|resolve|reject|json|fetch|/api/emails|pending-replies|/api/tasks|waitForCondition|setTimeout|setInterval|role|aria-live|답변 대기|대기 작업|수신된 메일' \
/tmp/WorkspaceHome.empty-live-region.test.tsx || true
echo "== Polling and real-timer indicators =="
rg -n -C 4 'waitForCondition|setTimeout|setInterval|requestAnimationFrame|for\s*\(|while\s*\(|timer|delay' \
/tmp/WorkspaceHome.empty-live-region.test.tsx || true
echo "== Stale generated-source indicators in exact effective diff =="
git diff --no-ext-diff "$base" "$head" | rg -n -i -C 3 '1633|jules|generated|dashboard' || trueLength of output: 90470 🏁 Script executed: #!/bin/bash
set -euo pipefail
base="72bfd55426602147277b543de6103cd4b88b7644"
head="e7e8754b17754f3d85f25477424da9087bf8e9ec"
echo "== Locate API client =="
fd -a '^api-client\.(ts|tsx|js|jsx)$' frontend/src || true
api_file="$(fd -a '^api-client\.(ts|tsx|js|jsx)$' frontend/src | head -n 1)"
test -n "$api_file"
echo "== API client outline =="
ast-grep outline "$api_file" --items all || true
echo "== API client fetch, JSON, get, and response-validation contexts =="
rg -n -C 14 \
'fetch\s*\(|\.json\s*\(|async\s+get|async\s+request|class .*Api|const apiClient|export.*apiClient|throw|ok\b' \
"$api_file" || true
echo "== Exact component changed-line count and patch =="
git diff --numstat "$base" "$head" -- frontend/src/components/WorkspaceHome.tsx
git diff --no-ext-diff --unified=3 "$base" "$head" -- frontend/src/components/WorkspaceHome.tsx
echo "== Exact test changed-line count and full source with line numbers =="
git diff --numstat "$base" "$head" -- frontend/src/components/WorkspaceHome.empty-live-region.test.tsx
git show "$head:frontend/src/components/WorkspaceHome.empty-live-region.test.tsx" | nl -baLength of output: 16375
정확한 effective delta는 다음 두 파일입니다.
참고로 exact head의 테스트 파일 이름은 테스트는 세 controlled response와 세 JSON-body promise를 비동기 React
각 unavailable branch는 해당 empty branch보다 먼저 유지됩니다. unavailable/error 처리, retry, Today recovery, startup-view 선택, navigation에는 effective diff가 없습니다. exact effective delta에서 stale generated
|
|
@codex review Please review only exact |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
@coderabbitai review Please review only current exact head |
|
@codex review Review current exact head |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
base="72bfd55426602147277b543de6103cd4b88b7644"
head="6e8c8919be264c0680d66f126d17da7f67071937"
component="frontend/src/components/WorkspaceHome.tsx"
git cat-file -e "${base}^{commit}"
git cat-file -e "${head}^{commit}"
echo "== Exact commits =="
git show -s --format='BASE %H%n%s%n%ad' --date=iso-strict "$base"
git show -s --format='HEAD %H%n%s%n%ad' --date=iso-strict "$head"
echo
echo "== Complete effective delta =="
git diff --name-status "$base" "$head"
echo
echo "== Locate focused test in effective delta =="
test_file="$(git diff --name-only "$base" "$head" | rg '(^|/)WorkspaceHome\.empty-live-regions?\.test\.tsx$' | head -n 1)"
test -n "$test_file"
printf '%s\n' "$test_file"
echo
echo "== Complete two-file patch =="
git diff --no-ext-diff --unified=100 "$base" "$head" -- "$component" "$test_file"
git show "$head:$component" > /tmp/WorkspaceHome.tsx
git show "$head:$test_file" > /tmp/WorkspaceHome.empty-live-region.test.tsx
echo
echo "== Component outline =="
ast-grep outline /tmp/WorkspaceHome.tsx --items all || true
echo
echo "== Focused test outline =="
ast-grep outline /tmp/WorkspaceHome.empty-live-region.test.tsx --items all || true
echo
echo "== Full focused test at exact head =="
nl -ba /tmp/WorkspaceHome.empty-live-region.test.tsx
echo
echo "== Component state, live-region, and navigation contexts =="
rg -n -C 12 \
'role=|aria-live|답변 대기 중인 보낸 메일이 없습니다\.|대기 작업이 없습니다\.|수신된 메일이 없습니다\.|loading|Loading|unavailable|Unavailable|error|Error|retry|Retry|navigate|router|href|onClick' \
/tmp/WorkspaceHome.tsx || true
echo
echo "== Controlled-response/body, intermediate assertion, act, and timer contexts =="
rg -n -C 12 \
'act|Promise|resolveResponse|resolveBody|response|json|fetch|/api/emails|pending-replies|/api/tasks|loading|Loading|role|aria-live|setTimeout|setInterval|waitForCondition' \
/tmp/WorkspaceHome.empty-live-region.test.tsx || true
echo
echo "== Locate API client and inspect response-to-body await sequence =="
api_file="$(fd -a '^api-client\.(ts|tsx|js|jsx)$' frontend/src | head -n 1)"
test -n "$api_file"
printf '%s\n' "$api_file"
ast-grep outline "$api_file" --items all || true
rg -n -C 12 'fetch\s*\(|\.json\s*\(|async\s+get|async\s+request|throw|ok\b' "$api_file" || true
echo
echo "== Effective-diff markers for out-of-scope or generated source =="
git diff --no-ext-diff "$base" "$head" | rg -n -i -C 3 \
'1633|jules|generated|dashboard|search|WorkspaceHome' || trueLength of output: 110530
The effective delta contains exactly these two files:
The test separately controls each HTTP response promise and each After the test resolves and awaits only the three response promises inside After the test resolves and awaits the three body promises inside
The effective component diff does not change Today recovery, startup-view behavior, or navigation. The exact delta contains no stale generated
|
Current authority — 2026-09-10
#1608@72bfd55426602147277b543de6103cd4b88b7644586108e72210db707c34a0ab3339f5bc7189dabce54e46c3d46b30a1fe2af9ed6a3d4f8b3143e2f4e7e8754b17754f3d85f25477424da9087bf8e9ec6e8c8919be264c0680d66f126d17da7f67071937WorkspaceHome.tsx.Generated #1633 identified valid dynamic-empty-state announcement gaps but crossed the active Search and Today owner lanes. This successor keeps only the Today part on the current #1570→#1578→#1601→#1608 ancestry. The three generated semantic hunks were isolated on protected-develop ancestry and integrated through ordinary Git three-way merge (#1639), preserving current Today recovery/unavailable-state behavior. No generated
.julesmetadata, dependency source, Search source, or stale dashboard source is effective here.RED
586108e...holds/api/emails,/api/emails/pending-replies?limit=3, and/api/taskspending, verifies visible loading states, then requires답변 대기 중인 보낸 메일이 없습니다.,대기 작업이 없습니다., and수신된 메일이 없습니다.each to becomerole="status"witharia-live="polite"after completion.CodeRabbit found that the predecessor harness used real zero-delay timer polling;
e7e8754...removed that timing dependency. Fresh static re-review found a second evidence defect: itsresolve()helper resolved the HTTP response and JSON body in the same call, so the test could not prove that the dashboard remains in loading after the response object arrives but whileresponse.json()is still pending. Exact6e8c891...changes only the focused test: each endpoint now has separateresolveResponse()andresolveBody()controls. The test first resolves all response objects and proves all three loading states remain with no empty live region, then resolves/awaits the exact body promises and requires the three polite status regions.WorkspaceHome.tsxis unchanged by this repair.Exact-head evidence boundary
This feature-base stacked PR cannot currently materialize Naruon’s repository-local Application CI/Bandit through ordinary
pull_requestsynchronization because their protected workflow filters name only default/release bases. Canonical fleet defect.github#2073owns the repair. Do not retarget this PR todevelop, push a dummy commit, copy central workflow source, or transfer predecessor checks. Any predecessor analysis/review is stale after the test-only source change;6e8c891...requires fresh exact-head execution and independent review.UI Delivery Gate: FAIL
Intentionality, content ownership, and source-level functional completeness are PASS. Exact-head hosted execution is absent until the canonical stacked-PR CI path is repaired, qualifying independent current-head review is absent, and browser/AT/keyboard evidence remains incomplete. No broad accessibility-conformance claim is authorized; #1608 and its prerequisites are not protected-integrated.
No force-push, destructive rebase, self-approval, historical-check transfer, cross-owner source copy, or gate weakening.