summaryrefslogtreecommitdiff
path: root/internal/askcli/command_start_deps.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-13 14:05:38 +0300
committerPaul Buetow <paul@buetow.org>2026-04-13 14:05:38 +0300
commit604f5aa7603498c4f7cc9a649a86d525b824e6c9 (patch)
tree814adfdd098e1594b74cbda3396b06723a469d3b /internal/askcli/command_start_deps.go
parent00981e0d9cd0bc00c3e21ec0124ffbcc52b4762a (diff)
Release v0.33.0: ask dependency UX and start gatingv0.33.0
Show only task alias IDs on ask info Depends lines. Block ask start until every dependency is completed. Bump version to 0.33.0. Made-with: Cursor
Diffstat (limited to 'internal/askcli/command_start_deps.go')
-rw-r--r--internal/askcli/command_start_deps.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/internal/askcli/command_start_deps.go b/internal/askcli/command_start_deps.go
new file mode 100644
index 0000000..94a6a9e
--- /dev/null
+++ b/internal/askcli/command_start_deps.go
@@ -0,0 +1,44 @@
+package askcli
+
+import (
+ "context"
+ "fmt"
+ "io"
+ "strings"
+)
+
+// verifyDependenciesCompletedForStart returns 0 if every dependency is completed,
+// or 1 after writing an error to stderr when the task must not be started yet.
+func (d *Dispatcher) verifyDependenciesCompletedForStart(ctx context.Context, task TaskExport, stderr io.Writer) int {
+ if len(task.Depends) == 0 {
+ return 0
+ }
+ aliases, err := ensureTaskAliasesForUUIDs(task.Depends)
+ if err != nil {
+ fmt.Fprintf(stderr, "error: failed to load task aliases: %v\n", err)
+ return 1
+ }
+ var incomplete []string
+ for _, depUUID := range task.Depends {
+ depTasks, code, err := d.exportTasks(ctx, []string{"uuid:" + depUUID, "export"}, stderr)
+ if err != nil {
+ writeInfoError(stderr, err)
+ return code
+ }
+ if len(depTasks) == 0 {
+ fmt.Fprintf(stderr, "error: dependency task not found (%s)\n", displayTaskAlias(depUUID, aliases))
+ return 1
+ }
+ status := strings.ToLower(strings.TrimSpace(depTasks[0].Status))
+ if status != "completed" {
+ label := displayTaskAlias(depUUID, aliases)
+ incomplete = append(incomplete, fmt.Sprintf("%s (%s)", label, depTasks[0].Status))
+ }
+ }
+ if len(incomplete) > 0 {
+ fmt.Fprintf(stderr, "error: cannot start until all dependencies are completed; incomplete: %s\n",
+ strings.Join(incomplete, ", "))
+ return 1
+ }
+ return 0
+}