23ba7b8ec5
- Gitea branch protection enabled on stage and main: - Direct pushes disabled (non-admin) - stage requires "Dev — Build & local smoke test / build-smoke" to pass - main requires "Stage — Build, push & deploy to marketing-stage / deploy-stage" to pass - Enforcement step added to stage.yaml and deploy.yaml: - stage only accepts merges from dev - main only accepts merges from stage - workflow_dispatch exempt (allows manual redeploy) - Direct non-admin pushes are blocked at the Gitea layer before CI runs