| Task doesn't exist | Inheritance not applied — check inheritedBy conditions in .moon/tasks/**/* against project's toolchains, stack, layer, tags via moon project <name> --json | moon task <target> --json | references/config-mistakes.md |
| "Nothing to do" | --affected + no changes, runInCI: false, or inheritedBy mismatch (global task not inherited) | Check flags, options.runInCI, and inheritedBy | references/decision-tree.md |
--affected misses changed files v2.4+ | Shallow git clone in CI — merge base can't be resolved, so diffs are inaccurate (moon now logs a warning) | Check clone depth; use full history or --filter=blob:none | references/decision-tree.md |
| Task fails: "requirement check failed" v2.4+ | A requirement check script exited non-zero, so the task refuses to run | moon task <target> --json — inspect checks | references/config-mistakes.md |
| Task skipped, not affected/CI-related v2.4+ | All condition checks passed, so the task was intentionally skipped | moon run <target> --log debug — look for "conditional checks have passed" | references/config-mistakes.md |
| Task errors on execution | Wrong command/script, bad toolchain | moon run <target> --log debug | references/config-mistakes.md |
| Stale cache (cached when it shouldn't be) | Inputs too narrow, missing env vars, or dep cacheStrategy: 'ignored' (the v2.3 default for output-less deps) | moon hash <hash> | references/cache-issues.md |
| Cache miss (re-runs every time) | Inputs too broad, volatile outputs, or dep cacheStrategy: 'hash' propagating upstream churn | moon hash <h1> <h2> | references/cache-issues.md |
Cache miss from a fingerprint check v2.4+ | A fingerprint check's script output is volatile (timestamps, PIDs), changing the hash every run | moon hash <h1> <h2> — look for the check hash | references/cache-issues.md |
| Outputs not restored after cache hit | outputs misconfigured | Check .moon/cache/outputs/ | references/cache-issues.md |
| Build re-runs on every upstream input change v2.3+ | Dep using default cacheStrategy: 'hash' instead of 'outputs' | moon task <target> --json — inspect dep entries | references/cache-issues.md |
Task not matched by #tag target v2.3+ | Missing tags on the task, or mergeTags dropped them during inheritance | moon task <target> --json — check tags | references/config-mistakes.md |
| Task hangs / pipeline stuck | Persistent task in deps chain (hard error in v2) | moon action-graph <target> | references/config-mistakes.md |
| Task is slow | Dep chain bottleneck, no parallelism | moon action-graph <target> | references/decision-tree.md |
| Task does nothing (no-op) | Command is noop/nop/no-op | moon task <target> --json | references/config-mistakes.md |
| Task fails silently | allowFailure: true hiding errors | Check options.allowFailure | references/config-mistakes.md |
| Task skipped locally | runInCI: 'only' set | Check options.runInCI | references/config-mistakes.md |
| Task skipped in CI | runInCI: false or 'skip' | Check options.runInCI | references/config-mistakes.md |
| Mutex contention / deadlock | Two tasks share same mutex | Check options.mutex | references/config-mistakes.md |
| Task times out | timeout option set too low | Check options.timeout | references/config-mistakes.md |