feat(roadmap-planner): W4 — sprint card 4 lanes (todo/in_progress/done/cancelled)#193
Conversation
| "DEPLOY", | ||
| "Designing", | ||
| "Developing", | ||
| "Doc Reviewing", |
There was a problem hiding this comment.
Critical Issue (bug/data-integrity): The Done lane includes "using" which appears to be a typo or erroneous status name. This doesn't look like a valid Jira status and could cause incorrect classification of issues. Please verify if this is intentional or should be removed.
| // English defaults. | ||
| {"Backlog", LaneTodo, true}, | ||
| {"Blocked", LaneTodo, true}, | ||
| {"In Progress", LaneInProgress, true}, |
There was a problem hiding this comment.
Suggestion (test/coverage): Consider adding test coverage for the "Open" status which is in the default Todo lane but not covered by the current test cases.
| {"Cancelled", LaneCancelled, true}, | ||
|
|
||
| // Chinese (DEVOPS Epic workflow). | ||
| {"待处理", LaneTodo, true}, |
There was a problem hiding this comment.
Suggestion (test/coverage): Consider adding a test case for the "using" status in the Done lane to confirm the current behavior is intentional (or to catch if it's a bug).
| out.InProgress++ | ||
| } | ||
| } | ||
| if err := rows.Err(); err != nil { |
There was a problem hiding this comment.
Suggestion (refactor/clarity): Consider logging a warning when Classify returns known=false for unknown statuses, as mentioned in the code comments. This would help operators discover missing status mappings in their Jira workflow.
🤖 AI Code Review
SummaryThis PR adds a 4-lane sprint card classification (todo/in_progress/done/cancelled) to replace the previous WIP/Done-only approach. It introduces a StatusClassifier that maps Jira statuses to lanes, updates the backend to use the classifier instead of Review Statistics
Critical Issues
Warnings
Positive Feedback
ℹ️ About this reviewThis review was automatically generated using the
|
…e/cancelled) Audit follow-up B7 (2026-05-19). Pre-W4 the sprint card collapsed Backlog / Blocked / In Progress under a single "wip" bucket because the classifier only checked `resolved_at IS NULL`. Cancelled issues were silently bucketed with WIP. - `SprintStats` JSON gains `todo`, `in_progress`, `cancelled`. `wip` stays for one release as a derived alias `todo + in_progress`. - `contributions/status_lanes.go` owns the configurable classifier (`StatusClassifier`) and the W4 baseline `DefaultStatusLanes()` derived from a live DEVOPS query — 37 statuses across 17 issue types, mix of English + Chinese. - `team_analytics.statuses` config block, four optional lists. Each lane independently inherits the default when empty. - `sprintCounts` uses the classifier instead of the resolved-at heuristic. - Frontend: profile sprint card renders six KPI tiles (todo / in_progress / done / cancelled / PRs open / PRs merged); grid widened to six columns. Tests: - `TestStatusClassifier` covers English + Chinese statuses, case-fold, whitespace, unknown fallback. - `TestStatusClassifierConfigOverrideOneLane` proves per-lane override semantics. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
3e8112e to
05ec4f6
Compare
Audit follow-up B7 — 2026-05-19. Pre-W4 the sprint card collapsed Backlog / Blocked / In Progress under one
wipbucket because the classifier only checkedresolved_at IS NULL. Cancelled issues silently rolled up as WIP.Summary
contributions/status_lanes.gowithStatusClassifier+DefaultStatusLanes()pulled live from DEVOPS Jira (37 statuses × 17 issue types, English + Chinese).SprintStatsJSON gainstodo,in_progress,cancelled.wipstays for one release as a derived aliastodo + in_progress.team_analytics.statusesconfig block — each lane optional, falls back to the default when empty.sprintCountsreads the classifier instead ofresolved_at IS NULL.Default mapping
Override semantics
Each lane is independent — overriding
todo: ["Inbox"]in config keeps the defaultin_progress / done / cancelledlists intact. To replace a lane, supply the full intended list.Test plan
go test ./...+go vet ./...— greenTestStatusClassifiercovers English + Chinese statuses, case-fold, whitespace, unknown-status fallbackTestStatusClassifierConfigOverrideOneLaneproves the per-lane override fallbackRollback
Drop
team_analytics.statusesfrom the ConfigMap — defaults take over.🤖 Generated with Claude Code