# Ronda 25 — Desbloqueo de PRs: CODEOWNERS + hallazgos Gitea 1.27 (OpenCode/GLM) ## Qué bloqueaba de verdad - protected_file_patterns bloqueaba el merge para TODOS (incluido pattern y hasta site-admin via API): ni CODEOWNERS+bypass ni is_admin lo liberan en 1.27 (probado: 405 "Changed protected files" para pattern-bypass y pattern-admin; site-admin cayce tambien bloqueado). - Los PRs #23/#25 nunca corrieron CI de pull_request (creados pre-workflow) — rebase+push los puso VERDE. - Resolución final: protected_file_patterns VACIO (instrucción del operador) + CODEOWNERS en main (documentación; 1.27 no auto-pide revisores: requested_reviewers=[] probado) + block_on_official_review_requests + approvals_whitelist=[pattern] + **la lista de exclusión del auto-merger como capa real** (probada: rehusa identity/outbox). - Tokens de pattern: uno generado por admin para las pruebas, REVOCADO al final. ## Pruebas (todas reales) - 2a-1: PR tocando outbox.mjs, CI verde → ci-bot 405 "Changed protected files" (con patrones) y con patrones fuera → auto-merger rehusa por su lista ✓. - 2a-2: pattern APRUEBA (review 200) y MERGEA (200) ✓. - 2b: PR sin paths protegidos (CODEOWNERS de bitcoinhotels) → auto-merge: 200 ✓. - Regla nueva adoptada: "esperando tu merge" solo con CI en verde. ## Resultado - El operador mergueó #23 (voz v3) y entity #3 a las 20:04. Hash v3 en despliegue VERIFICADO: c0f0ec05… - entity #2 sigue open (mergealo cuando quieras; checks de entity se activan DESPUÉS de ese merge para no bloquearlo). - Incidente arreglado: lessons.md (mutado por el ciclo retro) abortaba deploys de entity → autodeploy ahora lo preserva con stash/pop. - 3 commits de prueba en outbox.mjs (comentarios) quedaron en entity main tras las pruebas — inofensivos, desplegados con tests 27/27.