025 — tp check fails on a missing check task that tp release will run (#157)

Status: in progress

Why

With a Taskfile.yml and no check: in task-plus.yml, tp release runs task check as its check step and fails outright when the Taskfile has no check task (task: Task "check" does not exist). tp check, whose job is to say whether the project is ready for tp release, only lists check among the missing standard tasks as a warning and exits 0. A project passes tp check and then cannot release; the two commands disagree about the same Taskfile.

A missing test or fmt task is a convention, and a warning is right for it. A missing check task is a release blocker whenever the release would run it, and tp check should say so at the level it means.

What changes

  • tp check, Taskfile section: when the release's check step resolves to task check (a Taskfile.yml is present and check: is unset) and the Taskfile has no check task, report an error naming the fix: add a check task or set check: in task-plus.yml. The other standard tasks stay warnings.
  • When check: is set to commands that do not run task check, the Taskfile's check task is not what the release runs; its absence stays the standard-task warning.
  • README tp check bullet for Taskfile.yml says which case is an error.

Acceptance

Taskfile.yml check: in task-plus.yml check task tp release check step tp check
present unset present task check ok
present unset missing task check fails: task does not exist error: add a check task or set check:; exit 1
present set, without task check missing the configured commands warning: missing standard task (as today)
present set, naming task check missing task check fails error, as the unset row
present set, without task check present the configured commands ok
absent unset — go fmt, go vet, go test when go.mod exists, else nothing warning: file not found (as today)

Out of scope

  • Checking that the configured check: commands exist or run.
  • Running the check task from tp check.

Decisions

none

Done when

  • tests express the acceptance table and pass
  • spec updated (README tp check)
  • ADR written if a fork was resolved (none needed)
  • roadmap ticked and stamped; changelog entry
  • issue closed with a link to the release