gate / frontend (push) Successful in 51s
gate / backend (push) Successful in 1m13s
Add .gitea/workflows/check.yml so the quality gate runs on the lab act_runner, machine-independent, on every push/PR — the review's "no server-side CI" gap. Two parallel jobs mirror the two local lanes: - frontend (node:20-bookworm, matching the prod build image): tsc + eslint + prettier --check + knip + vitest. - backend (nikolaik/python-nodejs python3.12+node): ruff + the full pytest suite against a real postgres:16 service, with ffmpeg installed and SIFTLODE_TEST_REQUIRE_DB=1 so a DB/ffmpeg that failed to come up is a hard error, never a silent skip. Notes for this runner: pytest runs natively against the service (the docker-compose bind-mount is unreliable under a mounted-socket runner), and the backend uses a baked python+node image rather than actions/setup-python, which can't reach GitHub's python-versions download from the lab.