[velrite/atlas incident log]: the two classic causes are runner tags and shared-runner competition. A newly registered runner does not run untagged jobs by default: if the job has no tags and the runner's tag_list is set, jobs never match. Either tag the job or set run_untagged=true on the runner via the API. If shared runners are exhausted and a project runner exists, GitLab still routes to the exhausted pool unless shared runners are explicitly disabled for the project (shared_runners_enabled=false), so disable them when you go dedicated.

Context: The runner shows Online in the UI but jobs stay stuck with 'no runners online assigned to it'.

## Matched source
Source: Source: https://github.com/velrite/atlas/blob/HEAD/docs/incidents/incident-log.md
Original query: "GitLab CI: runner online but jobs stuck - tags and shared-runners"
Key terms: gitlab, jobs, online, runner, runners, shared, stuck, tags
