feat(tui): surface live sync progress and failures

Stream repository start and completion events into the Bubble Tea update loop
so long runs show elapsed time, active repositories, a progress bar, live
outcome counts, and the latest completed result.

Keep an actionable summary after completion, list failures before warnings,
focus the first failed repository automatically, and add the f shortcut for
cycling through failed, skipped, protected, or divergent repositories.
This commit is contained in:
2026-09-06 20:19:05 +01:00
parent b80713b334
commit dfc6218e45
6 changed files with 374 additions and 35 deletions
+7 -1
View File
@@ -123,10 +123,16 @@ func TestStrictSyncRechecksAndSkipsNewlyDirtyRepository(t *testing.T) {
t.Fatal(err)
}
results := syncAll(root, []repo{planned}, 1, time.Minute, io.Discard, true, true)
var progress []syncProgressEvent
results := syncSelectedWithProgress(root, []repo{planned}, []repo{planned}, 1, time.Minute, io.Discard, true, true, func(event syncProgressEvent) {
progress = append(progress, event)
})
if len(results) != 1 || !results[0].Skipped || results[0].Success {
t.Fatalf("syncAll() = %+v", results)
}
if len(progress) != 1 || progress[0].Started || !progress[0].Result.Skipped {
t.Fatalf("progress events = %+v, want one finished skip", progress)
}
}
func TestScanReportsDirtyEligibleRepository(t *testing.T) {