feat(workflows): pick a lane in the pipeline pass-rate panel

The panel aggregated every lane at once, which answers "does this stage get
proved across the project" but never "does THIS lane prove it". A lane picker
now narrows the same aggregation through ?lane=<id> on
GET /api/lanes/pipeline-stats, counting that lane plus its own archived
features — dropping the features would hide most of a lane's history the moment
it starts its next one.

The response carries a `lanes` array that the filter never narrows: it
populates the picker, so it has to keep offering every other lane even while
the counts show one. For the same reason the picker renders above the empty
branch rather than inside the populated one — narrowing to a lane that has
recorded nothing would otherwise be a one-way trip, with no control left to
select anything else. A lane filter that is not a positive integer is rejected
with 400 EBADLANE rather than silently aggregating everything.
This commit is contained in:
2026-08-26 11:19:39 +07:00
parent 9696698d40
commit 20d85d3450
12 changed files with 195 additions and 33 deletions
+4 -1
View File
@@ -246,13 +246,16 @@
"title": "Lane Pipeline Pass Rates",
"subtitle": "How often each stage of your own pipelines is actually passed",
"pipelineLabel": "Pipeline template",
"laneLabel": "Lane",
"allLanes": "All lanes",
"runs_one": "{{count}} run recorded",
"runs_other": "{{count}} runs recorded",
"legendEvidence": "passed with evidence",
"legendClaimed": "passed, no evidence",
"legendFailed": "failed",
"never": "never reached",
"empty": "No lane has recorded a stage yet. Create one with"
"empty": "No lane has recorded a stage yet. Create one with",
"emptyLane": "This lane has not recorded a stage yet."
},
"patterns": {
"title": "Detected Workflow Patterns",
+4 -1
View File
@@ -246,13 +246,16 @@
"title": "Tỉ lệ pass các node pipeline",
"subtitle": "Mỗi giai đoạn trong pipeline của bạn thực sự pass bao nhiêu lần",
"pipelineLabel": "Mẫu pipeline",
"laneLabel": "Lane",
"allLanes": "Tất cả lane",
"runs_one": "{{count}} lượt chạy được ghi nhận",
"runs_other": "{{count}} lượt chạy được ghi nhận",
"legendEvidence": "pass kèm bằng chứng",
"legendClaimed": "pass, không bằng chứng",
"legendFailed": "thất bại",
"never": "chưa từng tới",
"empty": "Chưa lane nào ghi nhận giai đoạn. Tạo lane bằng"
"empty": "Chưa lane nào ghi nhận giai đoạn. Tạo lane bằng",
"emptyLane": "Lane này chưa ghi nhận giai đoạn nào."
},
"patterns": {
"title": "Mẫu quy trình phát hiện được",