fix(ui): handle indexing errors in frontend and ignore local npm cache#549
fix(ui): handle indexing errors in frontend and ignore local npm cache#549sahil-mangla wants to merge 1 commit into
Conversation
d9550be to
bee202e
Compare
|
Linter Fix (clang-format): The second force-push was made to wrap a long string literal in src/main.c that exceeded the maximum line length check, which was causing the CI formatting job (lint-format) to fail. No logic changes were introduced. |
|
Hey @DeusData shall i close the PR or should i wait for you to merge it first? |
|
Hey @sahil-mangla, a bit of patience please. At the moment there is a lot of "background work" happening. Coming back to you ASAP :) |
|
Thanks @sahil-mangla — the UI error-banner half is good and we'd like it. The blocker is the Could you split this PR: keep the UI error-handling, and gate the always-start-server behavior behind an explicit opt-in (e.g. a |
|
@DeusData I agree that removing the CBM_EMBEDDED_FILE_COUNT > 0 guard changes the existing behavior contract for --ui, even if the listener is loopback-only. I’ll split the changes and update this PR to keep only the UI error-handling improvements. I’ll revert the src/main.c change from this PR and keep the development-server behavior as a separate follow-up, potentially behind an explicit opt-in flag such as --dev-api. |
|
Thanks @sahil-mangla — the Could you reduce this to just the |
c67bf0c to
4a6ad9b
Compare
|
@DeusData Can you check and verify if any other changes or something looks off to you i will fix them right away or is it all good. |
|
Thanks @sahil-mangla — the frontend fix is a real bug: Two things before it lands:
The |
|
@DeusData Will you please check it out now! |
|
@DeusData anything else needed please let me know! |
|
Thanks for the UI/dev-mode fix. The non-merge commit appears signed; if CI flags only the branch merge commits for DCO, please refresh the branch. Please also include the frontend test command/output and confirm the dev API hosting remains local-only. |
|
Hi! I have rebased the branch on upstream/main to remove the unsigned merge commits and force-pushed the update. The PR now contains only the single signed commit. Also verified that the dev API hosting is strictly loopback (local-only) |
|
Thank you — the core fix is right and wanted: the backend's /api/index-status already emits status:error with detail, and the UI was silently swallowing it; this is also fully complementary to the per-file skipped[] reporting that just landed server-side (different channel: whole-job failure vs per-file skips). Three asks before merge: (1) retitle/re-describe — the 'dev mode API hosting' half no longer exists in the diff after your force-push, and the title still claims it; (2) please change 'fixes #524' to 'refs #524' — #524's OOM root cause isn't fixed by surfacing the error, and we don't want the merge to auto-close it; (3) optional: route 'Indexing Failed'/'Dismiss' through useUiMessages() so the zh locale stays complete. Thanks! Update: to keep momentum on the bug backlog, we're going to carry the changes above over the line ourselves shortly — a distilled follow-up on current main implementing the notes in this thread, with you credited as |
…e (refs DeusData#524) Signed-off-by: sahil-mangla <manglasahil2017@gmail.com>
|
Thanks for the guidance! I have made the requested updates:
All tests run and pass successfully: # inside graph-ui
npm test |
…leting The backend /api/index-status reports status:"error" plus an error message for failed indexing jobs, but IndexProgress treated any non-"indexing" state as successful completion: the spinner vanished with no feedback (e.g. after an OOM-killed indexer subprocess), the project never appeared, and no error was shown. Render a visible error banner (path + error text) with a Dismiss button instead, and keep the success flow unchanged. Beyond the original PR: - Restore the empty-jobs guard the PR dropped: the backend keeps finished jobs listed as "done"/"error" (handle_index_status only skips idle slots), so an empty list mid-index only occurs on transient state loss and must not be treated as completion. - Route the new user-facing strings through the i18n system (projects.indexingFailed, common.dismiss; EN + zh entries). - Cover error banner + dismiss, success flow and the empty-jobs guard with vitest cases on the now-exported IndexProgress. Distilled from DeusData#549. Refs DeusData#524 Co-authored-by: sahil-mangla <manglasahil2017@gmail.com> Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
|
Thank you — the core fix was right and needed: the backend already emitted status:error with detail and the UI was silently swallowing it. We carried it over the line as bfd9b89 (PR #816) with you credited as co-author, with the review deltas folded in: the empty-jobs guard restored (verified against the backend's status transitions — an empty list can only mean transient state loss, so treating it as success would be wrong), the new strings routed through i18n (EN+zh), and the issue reference kept as 'refs #524' since the OOM root cause there is still open. Your test shapes carried over almost verbatim. Closing in favor of the distill — thanks again! |
Surface indexing failures in UI and enable backend API startup in development mode
What does this PR do?
This PR addresses a poor user experience when indexing fails, particularly for extremely large repositories that may exhaust available memory.
Changes
Why is this needed?
During investigation of issue #524, I reproduced indexing failures using a synthetic repository containing approximately 200,000 Python files.
The indexing subprocess was terminated by the OS with exit code 137 (SIGKILL / out-of-memory condition). The backend correctly transitioned the job status to "error".
However, the frontend previously treated any non-"indexing" state as completion:
if (data.length > 0 &&
data.every((j) => j.status !== "indexing")) {
onDone();
}
As a result:
This made indexing failures appear as if indexing had silently completed or hung.
This PR surfaces those failures directly in the UI so users receive immediate feedback when indexing fails.
Reproduction
Testing
Manual testing performed
Verified that:
Checklist