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

  1. Answer the prompt with an accepted value (e.g. 'y', 'yes') to proceed
  2. Handle it with errors.Is(err, logger.ErrPromptCancelled) and surface a graceful TaskCancelledByUserError / clean exit
  3. 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

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


AI-assisted analysis of go-task/task@385e5ad92a (2026-09-05). Data as JSON: /api/errors/b7cd09316175a5b5. Report an issue: GitHub.