name: CI

# CI is nothing but the gate set. Every blocking check lives in gates.yml so
# that release.yml runs the identical set before it publishes anything
# (milestone-14 ruling 7). Nothing may be added here: a check that exists in
# CI but not in gates.yml is a check a release skips.
on:
  push:
    branches: [master]
  pull_request:
    branches: [master]
  # A runner pod replaced mid-job kills the job it is running: the step's log
  # stops dead, no epilogue is written, and Gitea marks the orphan failed.
  # Nothing in the tree is wrong when that happens and nothing in the tree can
  # fix it, so the gate set must be re-runnable without an empty commit. This
  # adds a trigger, not a check — the job list below stays the gate set alone.
  workflow_dispatch:

jobs:
  gates:
    uses: ./.gitea/workflows/gates.yml
