taskplane 0.28.1 → 0.28.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dashboard/public/app.js +24 -18
- package/extensions/taskplane/extension.ts +5135 -5135
- package/package.json +1 -1
package/dashboard/public/app.js
CHANGED
|
@@ -517,9 +517,11 @@ function renderSummary(batch) {
|
|
|
517
517
|
const checkboxDone = ws.checked === ws.total && ws.total > 0;
|
|
518
518
|
const pastWave = ws.waveIdx < currentWaveIdx;
|
|
519
519
|
const batchDone = batch.phase === "completed";
|
|
520
|
-
// TP-178: During merging, only past waves are done
|
|
520
|
+
// TP-178: During merging, only past waves are truly done. The current wave's
|
|
521
|
+
// checkboxDone/allSucceeded can be true (tasks finished) but the wave itself
|
|
522
|
+
// isn't done until the merge completes. (#493)
|
|
521
523
|
const isMerging = batch.phase === "merging";
|
|
522
|
-
const isDone =
|
|
524
|
+
const isDone = batchDone || pastWave || (!isMerging && (checkboxDone || ws.allSucceeded));
|
|
523
525
|
const isMergingWave = isMerging && ws.waveIdx === currentWaveIdx;
|
|
524
526
|
const isCurrent = ws.waveIdx === currentWaveIdx && (batch.phase === "executing" || isMerging);
|
|
525
527
|
const isFuture = ws.waveIdx > currentWaveIdx && (batch.phase === "executing" || isMerging);
|
|
@@ -711,7 +713,10 @@ function renderLanesTasks(batch, sessions) {
|
|
|
711
713
|
// TP-176: Succeeded tasks always show 100% regardless of sidecar/statusData (#491).
|
|
712
714
|
let progressHtml = "";
|
|
713
715
|
const v2p = ls && ls._v2Progress;
|
|
714
|
-
const
|
|
716
|
+
const taskMatch = v2p && ls.taskId === task.taskId;
|
|
717
|
+
// Split V2 usage: progress needs totals > 0, but step/iter can be used whenever present
|
|
718
|
+
const useV2Progress = taskMatch && v2p.total > 0;
|
|
719
|
+
const useV2Step = taskMatch && !!v2p.currentStep;
|
|
715
720
|
if (task.status === "succeeded") {
|
|
716
721
|
// #491 fix: succeeded tasks always show 100%
|
|
717
722
|
progressHtml = `
|
|
@@ -719,9 +724,9 @@ function renderLanesTasks(batch, sessions) {
|
|
|
719
724
|
<div class="task-progress-bar"><div class="task-progress-fill pct-hi" style="width:100%"></div></div>
|
|
720
725
|
<span class="task-progress-text">100%</span>
|
|
721
726
|
</div>`;
|
|
722
|
-
} else if (
|
|
723
|
-
const displayChecked =
|
|
724
|
-
const displayTotal =
|
|
727
|
+
} else if (useV2Progress || (sd && sd.total > 0)) {
|
|
728
|
+
const displayChecked = useV2Progress ? v2p.checked : sd.checked;
|
|
729
|
+
const displayTotal = useV2Progress ? v2p.total : sd.total;
|
|
725
730
|
const displayProgress = displayTotal > 0 ? Math.round((displayChecked / displayTotal) * 100) : 0;
|
|
726
731
|
const fillClass = pctClass(displayProgress);
|
|
727
732
|
progressHtml = `
|
|
@@ -731,20 +736,20 @@ function renderLanesTasks(batch, sessions) {
|
|
|
731
736
|
</div>
|
|
732
737
|
<span class="task-progress-text">${displayProgress}% ${displayChecked}/${displayTotal}</span>
|
|
733
738
|
</div>`;
|
|
734
|
-
} else if (task.status === "pending") {
|
|
735
|
-
progressHtml = `
|
|
736
|
-
<div class="task-progress">
|
|
737
|
-
<div class="task-progress-bar"><div class="task-progress-fill pct-0" style="width:0%"></div></div>
|
|
738
|
-
<span class="task-progress-text">0%</span>
|
|
739
|
-
</div>`;
|
|
740
739
|
} else if (task.status === "running") {
|
|
741
|
-
//
|
|
742
|
-
// This covers non-final
|
|
740
|
+
// #494 fix: running tasks without meaningful totals show executing indicator
|
|
741
|
+
// This covers non-final segments, early execution before sidecar captures, and stale 0/0 data
|
|
743
742
|
progressHtml = `
|
|
744
743
|
<div class="task-progress">
|
|
745
744
|
<div class="task-progress-bar"><div class="task-progress-fill pct-low task-progress-executing" style="width:100%"></div></div>
|
|
746
745
|
<span class="task-progress-text">executing…</span>
|
|
747
746
|
</div>`;
|
|
747
|
+
} else if (task.status === "pending") {
|
|
748
|
+
progressHtml = `
|
|
749
|
+
<div class="task-progress">
|
|
750
|
+
<div class="task-progress-bar"><div class="task-progress-fill pct-0" style="width:0%"></div></div>
|
|
751
|
+
<span class="task-progress-text">0%</span>
|
|
752
|
+
</div>`;
|
|
748
753
|
} else {
|
|
749
754
|
progressHtml = '<span style="color:var(--text-faint)">—</span>';
|
|
750
755
|
}
|
|
@@ -756,10 +761,11 @@ function renderLanesTasks(batch, sessions) {
|
|
|
756
761
|
if (task.status === "succeeded") {
|
|
757
762
|
// TP-178: Succeeded tasks always show "Complete" regardless of sidecar data (#491)
|
|
758
763
|
stepHtml = '<span style="color:var(--green)">Complete</span>';
|
|
759
|
-
} else if (sd ||
|
|
760
|
-
|
|
761
|
-
const
|
|
762
|
-
const
|
|
764
|
+
} else if (sd || useV2Step) {
|
|
765
|
+
// #488 fix: prefer V2 step name whenever present (even if totals are 0)
|
|
766
|
+
const stepName = useV2Step ? v2p.currentStep : (sd ? sd.currentStep : "Unknown");
|
|
767
|
+
const iter = (useV2Step && v2p.iteration != null) ? v2p.iteration : (sd ? sd.iteration : 0);
|
|
768
|
+
const revs = (useV2Step && v2p.reviews != null) ? v2p.reviews : (sd ? sd.reviews : 0);
|
|
763
769
|
stepHtml = escapeHtml(stepName);
|
|
764
770
|
if (iter > 0) stepHtml += `<span class="task-iter">i${iter}</span>`;
|
|
765
771
|
if (revs > 0) stepHtml += `<span class="task-iter">r${revs}</span>`;
|