go-task/task · warning
prompt cancelled
Error message
prompt cancelled
What it means
internal/logger defines ErrPromptCancelled, returned by Logger.Prompt when the user declines a confirmation (e.g. answering anything outside the accepted continue values, or cancelling). Callers map it to a user-cancelled task result.
Source
Thrown at internal/logger/logger.go:20
import (
"bufio"
"io"
"slices"
"strconv"
"strings"
"github.com/Ladicle/tabwriter"
"github.com/fatih/color"
"github.com/go-task/task/v3/errors"
"github.com/go-task/task/v3/experiments"
"github.com/go-task/task/v3/internal/env"
"github.com/go-task/task/v3/internal/term"
)
var (
ErrPromptCancelled = errors.New("prompt cancelled")
ErrNoTerminal = errors.New("no terminal")
)
var (
attrsReset = envColor("COLOR_RESET", color.Reset)
attrsFgBlue = envColor("COLOR_BLUE", color.FgBlue)
attrsFgGreen = envColor("COLOR_GREEN", color.FgGreen)
attrsFgCyan = envColor("COLOR_CYAN", color.FgCyan)
attrsFgYellow = envColor("COLOR_YELLOW", color.FgYellow)
attrsFgMagenta = envColor("COLOR_MAGENTA", color.FgMagenta)
attrsFgRed = envColor("COLOR_RED", color.FgRed)
attrsFgHiBlue = envColor("COLOR_BRIGHT_BLUE", color.FgHiBlue)
attrsFgHiGreen = envColor("COLOR_BRIGHT_GREEN", color.FgHiGreen)
attrsFgHiCyan = envColor("COLOR_BRIGHT_CYAN", color.FgHiCyan)
attrsFgHiYellow = envColor("COLOR_BRIGHT_YELLOW", color.FgHiYellow)
attrsFgHiMagenta = envColor("COLOR_BRIGHT_MAGENTA", color.FgHiMagenta)
attrsFgHiRed = envColor("COLOR_BRIGHT_RED", color.FgHiRed)
)View on GitHub (pinned to 385e5ad92a)
Solutions
- Answer the prompt with an accepted value (e.g. 'y', 'yes') to proceed
- Handle it with errors.Is(err, logger.ErrPromptCancelled) and surface a graceful TaskCancelledByUserError / clean exit
- Pipe 'y' into stdin for non-interactive automation to auto-confirm
Example fix
// before
if err := e.Logger.Prompt(logger.Yellow, p, "n", "y", "yes"); err != nil {
return err
}
// after
if err := e.Logger.Prompt(logger.Yellow, p, "n", "y", "yes"); err != nil {
if errors.Is(err, logger.ErrPromptCancelled) {
return &errors.TaskCancelledByUserError{TaskName: call.Task}
}
return err
} Defensive patterns
Strategy: try-catch
Validate before calling
// Not pre-validatable; ensure stdin is interactive or pre-answer confirmations:
if !isInteractive(os.Stdin) {
// echo "y" | task ... or use --force/non-interactive flags
} Type guard
func isPromptCancelled(err error) bool {
return errors.Is(err, logger.ErrPromptCancelled)
} Try / catch
if err := e.Logger.Prompt(logger.Yellow, p, "n", "y", "yes"); err != nil {
switch {
case errors.Is(err, logger.ErrNoTerminal):
return &errors.TaskCancelledNoTerminalError{TaskName: name}
case errors.Is(err, logger.ErrPromptCancelled):
return &errors.TaskCancelledByUserError{TaskName: name}
default:
return err
}
} Prevention
- Use errors.Is against logger.ErrPromptCancelled, never string matching
- For automation, pipe 'y' into stdin or use non-interactive modes
- Only prompt when a TTY is attached; otherwise fail fast with ErrNoTerminal handling
When it happens
Trigger: Logger.Prompt(color, prompt, defaults, continueValues...) is called (e.g. task.go:244 for internal call confirmation) and the typed input, lowercased/trimmed, is not in the continue values list.
Common situations: User answers 'n'/esc at a 'proceed?' confirmation prompt when running a task with internal calls; automation answers with an unexpected string.
Related errors
- prompt cancelled
- no options provided
- no continue values provided
- enum reference %q must resolve to a list
- enum reference %q must contain only strings
AI-assisted analysis of go-task/task@385e5ad92a (2026-09-05).
Data as JSON: /api/errors/b7cd09316175a5b5.
Report an issue: GitHub.