Skip to content

Add dashboard filters & drilldown + async chart job UX (Steps 5–6)#37

Merged
rad1092 merged 2 commits into
mainfrom
codex/check-remaining-tasks-and-unused-md-files-1qeo3l
Feb 15, 2026
Merged

Add dashboard filters & drilldown + async chart job UX (Steps 5–6)#37
rad1092 merged 2 commits into
mainfrom
codex/check-remaining-tasks-and-unused-md-files-1qeo3l

Conversation

@rad1092
Copy link
Copy Markdown
Owner

@rad1092 rad1092 commented Feb 15, 2026

Motivation

  • Improve dashboard usability by making KPI/insight discovery faster with filters and drilldown so users can quickly inspect evidence behind insights.
  • Support large/multi-file visualizations by introducing an asynchronous chart job workflow with polling and retry to avoid blocking the UI.
  • Surface consistent user-facing errors and detailed technical details from the backend so the frontend can rely on a stable error contract.

Description

  • Frontend: extended bitnet_tools/ui/index.html, bitnet_tools/ui/app.js, and bitnet_tools/ui/styles.css to add an intent input + intent action suggestions, dashboard filters (file/column/type), an insight list with clickable items, and a drilldown evidence panel that renders JSON evidence.
  • Frontend: implemented structured insight extraction (buildStructuredInsights), filter rendering, insight list rendering, drilldown view, and mode/intent routing to wire quick/advanced flows.
  • Async charts: added chart job controls in the multi-CSV panel (startChartsJob / retryChartsJob) with server submission to /api/charts/jobs, polling (pollChartJobOnce / startChartPolling), lifecycle status rendering, and automatic retry enablement on failure.
  • Backend: added Handler._error_payload helper and updated GET/POST error responses to return { "error": <msg>, "error_detail": <detail> } for a stable client/server error shape.

Testing

  • Ran unit tests with pytest -q and all tests passed (26 passed).
  • Launched the UI with python -m bitnet_tools.cli ui --host 0.0.0.0 --port 8765 and ran a Playwright smoke script that exercised dashboard rendering, filters, drilldown, and chart-job UX, producing a screenshot at artifacts/ui-step5-6-dashboard-chartjob.png.
  • Verified manual flows in the running UI: multi-analyze → render dashboard → filter/inspect insights → start/retry chart job polling behaved as expected in the smoke run.

Codex Task

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e6feb43638

ℹ️ 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".

Comment thread bitnet_tools/ui/app.js
Comment on lines +95 to 97
UI.startChartsJobBtn,
UI.retryChartsJobBtn,
...document.querySelectorAll('.mode-btn'),
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Exclude retry button from global busy-state toggling

toggleBusy(false) re-enables every target in its list, including retryChartsJobBtn, so the retry button becomes clickable after any completed request (analyze/run/multi/chart start), even when no chart job has failed. This overrides the explicit disabled = true set in startChartsJob/retryChartsJob and lets users trigger duplicate chart submissions while a previous job is still running or already succeeded.

Useful? React with 👍 / 👎.

Comment thread bitnet_tools/ui/app.js
Comment on lines +400 to +404
if (result.status === 'done') {
stopChartPolling();
UI.retryChartsJobBtn.disabled = true;
setStatus('차트 작업 완료');
} else if (result.status === 'failed') {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Treat not_found chart-job status as terminal failure

The polling handler only stops on done or failed, but the backend can return status: "not_found" for missing jobs (e.g., after a server restart), so this path keeps polling forever and never reports a terminal error state. In that scenario the UI burns repeated requests and does not clearly recover unless the user manually intervenes.

Useful? React with 👍 / 👎.

@rad1092 rad1092 merged commit feceed3 into main Feb 15, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant