failErr maps a plain error to a usage exit #211

closed cmc opened this on 2026-09-11 18:42 UTC

Discussion

cmc 2026-09-11 18:42 UTC

Ctx.failErr (internal/control/control.go) returns exit 2 (usage) for any error that is neither store.ErrNotFound nor internal. A duplicate milestone title took that path until #203 moved milestone create and org milestone create to exit 1 explicitly. Other callers of failErr still turn genuine failures ("already exists", refusals) into usage exits.

Audit the callers and either give failErr a failure default with an explicit usage path, or replace the calls that pass non-usage errors.

Found during the #203 review.

closed by commit b347d6c8c4 by cmc: control, e2e, wiki: failErr is a failure by default, failInput is usage

2026-09-11 23:42 UTC