fix(ui): show dashboard backend unavailability - #1485
Conversation
|
Important Approval pendingCodeRabbit has no unresolved comments, but it has not reviewed the latest commit. Use the checkbox below to review the latest commit. CodeRabbit will approve the changes if it finds no blocking issues.
📝 WalkthroughWalkthroughThe Today dashboard now treats mail, pending-reply, and task API failures as one unavailable state. KPI and list views show check-required messages, and an alert provides retry guidance. Component and end-to-end tests cover the behavior. ChangesToday dashboard unavailable state
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: 🟡 Moderate · up to The dashboard now exposes backend read failures, but malformed successful responses can still appear as truthful zero counts or empty lists, potentially hiding missing data; the unavailable state can also temporarily coexist with loading or placeholder values. Merge should wait for these bounded display-correctness issues to be addressed or explicitly accepted. Sequence Diagram(s)sequenceDiagram
participant Dashboard
participant useDashboardData
participant CoreAPIs
participant RetryButton
Dashboard->>useDashboardData: load dashboard data
useDashboardData->>CoreAPIs: request mail, pending replies, and tasks
CoreAPIs-->>useDashboardData: request failure
useDashboardData-->>Dashboard: unavailable status
Dashboard->>Dashboard: show check-required KPI and list states
Dashboard->>RetryButton: show retry action
RetryButton->>Dashboard: reload dashboard
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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 |
|
PR governance metadata gate is not ready for
|
|
@coderabbitai review |
|
|
Implemented the final dashboard recovery follow-up at
The browser-network errors in that Playwright scenario are expected test stimuli because it intentionally aborts |
There was a problem hiding this comment.
Devin Review found 1 new potential issue.
⚠️ 1 issue in files not directly in the diff
⚠️ Literal attachment names are rewritten
unquote decodes ordinary percent sequences in MIME filenames as URL escapes. Valid names are corrupted, and generic attachments can gain a false parser extension.
|
Exact-head follow-up for
Verification:
All review threads are resolved at this head. The existing |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4e2cb3b39f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Bound the three core dashboard reads with one native abort signal. Preserve 401/403 status for a login recovery state while transport and malformed responses retain the retry path. Assisted-by: OpenAI Codex Signed-off-by: Seongho Bae <me@seonghobae.me>
Superseded predecessor — succession verified 2026-09-07
This PR is preserved as historical provenance for the Today-dashboard unavailable/auth recovery work. It is no longer an active Naruon source writer.
develop@042b0c70531b229af3acbd0421a2f23098d848b3796083106d46cff494836004937bb767fbb9672ea48e8ba85b6d3a4ceb78e110582b3d5bc76d0d7cWhat was inherited
A fresh file-by-file audit compared this predecessor with #1570.
All five non-document source/test/CHANGELOG paths are represented by #1570. The successor preserves and strengthens the valid contracts from this branch:
로그인이 필요합니다.and로그인 설정 열기, not a blind retry;#1570 additionally replaces this predecessor's coupled core-read behavior with independent per-source settlement, retry-generation stale-response rejection, calendar/WebDAV auth handling, retry recovery, and browser coverage. No predecessor check/review result is transferred.
Documentation audit
Two documentation deltas were intentionally not copied into the product successor.
docs/operations/source-of-truth-and-writeback-sovereignty.mdsaid the mail, pending-reply and task reads fail closed as a group. That prose is now obsolete because fix(home): expose retryable backend unavailable state #1570 deliberately settles all five sources independently and preserves confirmed evidence while another source is loading/unavailable. Retaining the grouped-failure wording would contradict the current product contract, so it is explicitly rejected rather than silently dropped.docs/product-technical-gap-baseline.mdis owned by canonical writer docs(architecture): repair Noema consumer boundary #1557. That live ledger already records the fix(home): expose retryable backend unavailable state #1570 lineage; copying the old point-in-time line into this product lane would recreate a parallel Gap writer.Therefore every valid source, test, fixture, contract and documentation obligation from this predecessor is either inherited by the correct successor owner or deliberately rejected because it is superseded by the stronger current contract. This satisfies the successor-close condition without discarding a valid delta.
No force-push, destructive rebase, self-approval, gate weakening, predecessor-evidence transfer, or protected-branch bypass is involved.