feat(scheduling): add Queue tab with provider lanes and execution analytics#86
feat(scheduling): add Queue tab with provider lanes and execution analytics#86
Conversation
DiffGuard AI AnalysisAI Review Summary🏆 Overall Score: 82/100 The PR adds a comprehensive Queue tab to the Scheduling page with four well-organized cards displaying queue status, provider lanes, bucket summaries, and recent runs. The implementation follows existing patterns well but has minor UX and robustness gaps. ✅ Key Strengths
|
| Issue Type | Issue Name | Affected Components | Description | Impact/Severity |
|---|---|---|---|---|
| Maintainability | Missing Error Boundaries | web/pages/Scheduling.tsx (Queue tab) |
No error UI for failed data fetches—users see only loading text indefinitely if requests fail. | Low |
| UX | Time Format Readability | Queue Overview Card | Large wait times display as large minute counts (e.g., "120m") rather than human-readable hours. | Low |
🔚 Conclusion
This is a clean, well-structured feature addition that integrates smoothly with existing code. No blocking issues found—only minor UX polish and robustness enhancements worth considering. Ready to merge with optional follow-ups.
Analyzed using z-ai/glm-5
jonit-dev
left a comment
There was a problem hiding this comment.
AI Review Summary
🏆 Overall Score: 88/100
The PR adds a comprehensive Queue tab to the Scheduling page with four well-organized cards displaying queue status, provider lanes, bucket summaries, and recent runs. The implementation follows existing patterns and integrates cleanly with the existing data fetching logic.
✅ Key Strengths
- Clean Component Architecture: The three new chart components (ProviderLanesChart, ProviderBucketSummary, RecentRunsChart) are well-typed with proper interfaces and follow the project's existing patterns.
- Defensive Null Handling: Proper use of optional chaining (
queueStatus?.running,queueAnalytics?.averageWaitSeconds) prevents runtime errors when data is loading. - Consistent Code Style: Follows existing conventions including
.jsimport extensions, Card component usage, and Tailwind CSS styling patterns.
⚠️ Areas for Improvement
- Time Display Formatting: Times over 60 minutes display as raw minutes (e.g., "90m" instead of "1h 30m"). Consider a utility function like
formatDuration()used in RecentRunsChart to format durations more readably in the Queue Overview card. - Hardcoded Running Job Count:
queueStatus?.running ? 1 : 0assumes single-job execution. If the system supports parallel jobs, this logic may need adjustment.
📋 Issues Found
| Issue Type | Issue Name | Affected Components | Description | Impact/Severity |
|---|---|---|---|---|
| UX | Time Format Readability | Queue Overview Card | Large wait times display as large minute counts (e.g., "120m") rather than human-readable hours. | Low |
| Maintainability | Hardcoded Running Count | web/pages/Scheduling.tsx:789 |
Assumes single concurrent job; may break if parallel execution is enabled. | Low |
🔚 Conclusion
This is a clean, well-structured feature addition that integrates smoothly with existing code. The failing CI tests (core-flow-smoke) return exit code 127 (command not found), which is a pre-existing CI environment issue unrelated to these UI changes. Ready to merge.
🔍 Reviewed by GLM-5
✅ Ready for Human ReviewNight Watch has reviewed this PR (score: 82/100) and found no issues requiring automated fixes. This PR is ready for human code review and merge. |
f977cb5 to
8702b77
Compare
DiffGuard AI AnalysisAI Review Summary🏆 Overall Score: 82/100 This PR adds a new "Queue" tab to the Scheduling page with four informational cards displaying queue status and analytics. The implementation is clean, follows existing patterns, and uses proper null-safety throughout. ✅ Key Strengths
|
| Issue Type | Issue Name | Affected Components | Description | Impact/Severity |
|---|---|---|---|---|
| Maintainability | Inline Tab Content | Scheduling.tsx |
Large inline JSX block in tabs array makes the file harder to navigate and maintain. | Medium |
| Testing | Missing Test Coverage | Scheduling.tsx |
No test file changes included to verify the new Queue tab renders correctly. | Low |
| Performance | Array Recreation | Scheduling.tsx:1026+ |
The tabs array with large content objects is recreated on every component render. | Low |
🔚 Conclusion
This is a solid, well-structured addition that follows existing codebase patterns. The main concerns are maintainability due to the large inline JSX and the absence of error handling states. Consider extracting the Queue tab content and adding useMemo before merging, though neither is strictly blocking.
Analyzed using z-ai/glm-5
Night Watch QA ReportChanges Classification
Test ResultsUI Tests (Playwright)
Unit Tests (Vitest)
Test Files Added
Test CoverageThe tests cover:
ArtifactsScreenshots and videos captured in Night Watch QA Agent
|
✅ Ready for Human ReviewNight Watch has reviewed this PR (score: 85/100) and found no issues requiring automated fixes. This PR is ready for human code review and merge. |
3 similar comments
✅ Ready for Human ReviewNight Watch has reviewed this PR (score: 85/100) and found no issues requiring automated fixes. This PR is ready for human code review and merge. |
✅ Ready for Human ReviewNight Watch has reviewed this PR (score: 85/100) and found no issues requiring automated fixes. This PR is ready for human code review and merge. |
✅ Ready for Human ReviewNight Watch has reviewed this PR (score: 85/100) and found no issues requiring automated fixes. This PR is ready for human code review and merge. |
…lytics Adds a new 'Queue' tab to the Scheduling page that visualizes: - Queue overview (running, pending, avg wait, oldest pending) - Provider lanes chart showing jobs grouped by provider bucket - Provider bucket summary with running/pending counts - Recent runs chart with execution history This completes Phase 4 of the Provider-Aware Queue PRD. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
53b69b7 to
0a29338
Compare
- Extract nested ternary into if-else chain in review.ts - Fix import sorting in config.ts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… use useMemo - Extract Queue tab content to separate QueueTab.tsx component for better maintainability - Add error states for queueStatus and queueAnalytics with proper error UI - Wrap tabs array in useMemo to prevent unnecessary recreation on each render - Add tests for Queue tab rendering and error states Addresses review feedback on PR #86. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix TypeScript errors in Scheduling.test.tsx by using correct property names (enqueuedAt instead of createdAt, projectPath instead of projectName, removed completed from byProviderBucket) - Add fake claude binary to PATH in core-flow-smoke tests to fix exit code 127 errors in reviewer tests Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Summary
This PR completes the Provider-Aware Queue implementation (Phase 4 of the Provider-Aware Weighted Scheduling PRD).
Changes
Implementation Status
The Provider-Aware Queue PRD phases 1-3 were already implemented:
This PR adds the Phase 4 UI components to visualize the queue state.
Test plan
yarn verifypasses🤖 Generated with Claude Code
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com