# CI quality-gate orchestration `config/ci/gates.json` is the executable registry for all 26 gates and the sole workflow model. `.gitea/workflows/quality-gates.yml` is generated from that strict v2 contract; it is not an independent configuration authority. Update the registry, run `corepack pnpm generate:ci-workflow`, and commit the generated bytes together. `corepack pnpm check:ci-workflow` rejects missing, stale, CRLF, or otherwise byte-different output. `corepack pnpm check:ci` runs artifact-schema checking, the typed contract checker, and this workflow drift check. The Gitea adapter runs each gate as an independent matrix check with full fan-out and no soft-fail wiring. Contract loading validates every registered command entry against the authoritative root package-script graph and lifecycle/install policy before the runner enters its execution callback. Foreign cwd/workspace script dispatch, argument-sensitive dispatchers, and ineffective lifecycle suppression therefore fail preflight even when the later `check:ci` command would never run. For npm, that root-only boundary also parses options following an explicit `run`/`run-script` target or implicit `test`/`start`/`stop`/`restart` target: `--workspace`, `-w`, `--workspaces`, and `--prefix` are foreign manifest scope and are rejected before execution. The first literal `--` ends npm option parsing, so later tokens are ordinary script arguments. pnpm and Yarn differ: their options following the selected script name are forwarded to that script; their cwd/workspace selectors are rejected only where the manager consumes them before script selection. The npm graph includes existing root-manifest `pre