Configuración de Repositorio Privado — runbook¶
Lee en tu idioma: English · Português · Español
Estado del alcance (post-congelación de alcance 2026-05-10) — Ver ARCHITECTURE.md para los 37 MÓDULOs canónicos + 7 Test Kinds + arquitectura de safety DOM/CPOS/PIE-PA. ADRs 0014, 0019-0025 cubren adiciones post-Freeze.
Secuencia de onboarding: Este es setup solo del mantenedor (una vez, por el dueño del repo). Una vez configurado, los operadores siguen: Acceso → Clone → Instalar · alternativa: Instalación air-gap.> Estado: Activo. La visibilidad del repositorio es PRIVATE desde 2026-05-06. Plan: GitHub Pro.
Por qué existe esto¶
Este proyecto está licenciado bajo PolyForm Noncommercial 1.0.0 + Appendix A — la audiencia está restringida a empleados de Cisco y partners certificados. Un repositorio público contradice esa política de audiencia. El 2026-05-06 el repositorio fue movido a privado para alinear el mecanismo de distribución con la licencia.
Este documento es el runbook de ese cambio: qué se hizo, por qué, y cómo revertir o evolucionar.
Decisiones tomadas¶
| Decisión | Elección | Trade-off |
|---|---|---|
| Visibilidad del repositorio | Privado | Pierde discoverability pública; alinea con política de audiencia |
| Plan GitHub | Pro ($4/mes) | Habilita branch protection, Pages privado, 3000 min/mes de Actions |
| Branch protection | 8 checks obligatorios + 1 review + linear history | Fricción en cada merge — por diseño |
| GitHub Pages | Sitio público, source privado | Operadores fuera de Cisco leen docs; solo usuarios autorizados ven el código |
Qué cambió en la configuración del Org GitHub¶
1. Visibilidad¶
gh repo edit nollagluiz/AI_forSE --visibility private --accept-visibility-change-consequences
Verificar:
gh repo view nollagluiz/AI_forSE --json visibility,isPrivate
# esperado: {"visibility":"PRIVATE","isPrivate":true}
2. Branch protection en main¶
8 status checks obligatorios, 1 review aprobado obligatorio, linear history obligatorio, force-push y deletions bloqueados, conversaciones obligatoriamente resueltas.
gh api -X PUT repos/nollagluiz/AI_forSE/branches/main/protection --input - <<'EOF'
{
"required_status_checks": {
"strict": true,
"contexts": [
"dashboard — typecheck, lint, test, build",
"agent — typecheck & test",
"go — vet & test (persona-seeder, mock-engine, har-engine) (persona-seeder)",
"go — vet & test (persona-seeder, mock-engine, har-engine) (mock-engine)",
"go — vet & test (persona-seeder, mock-engine, har-engine) (har-engine)",
"gitleaks",
"trivy — dashboard",
"dashboard — license compliance"
]
},
"enforce_admins": false,
"required_pull_request_reviews": {
"dismiss_stale_reviews": true,
"require_code_owner_reviews": false,
"required_approving_review_count": 1,
"require_last_push_approval": false
},
"restrictions": null,
"required_linear_history": true,
"allow_force_pushes": false,
"allow_deletions": false,
"required_conversation_resolution": true,
"lock_branch": false,
"required_signatures": false
}
EOF
enforce_admins: false es intencional — el único admin (propietario del proyecto) necesita la capacidad de hacer push directo en emergencias reales (respuesta a incidente, rollback). Para deshabilitar temporalmente la protección en una emergencia:
# Deshabilitar
gh api -X DELETE repos/nollagluiz/AI_forSE/branches/main/protection
# Hacer el push
git push origin main --force-with-lease # si es necesario
# Re-habilitar usando el bloque PUT de arriba
3. Re-publicar GitHub Pages¶
Cuando el repo se hizo privado, el sitio Pages existente fue destruido. Re-publicar:
gh api -X POST repos/nollagluiz/AI_forSE/pages -f build_type=workflow
gh workflow run docs.yml
Verificar con:
curl -s -o /dev/null -w "%{http_code}\n" https://nollagluiz.github.io/AI_forSE/
# esperado: 200
El sitio Pages permanece públicamente legible (cualquiera navega los docs renderizados en nollagluiz.github.io/AI_forSE), pero el repositorio-fuente es privado. Esto es intencional — operadores y potenciales evaluadores se benefician de docs públicos; el código fuente está restringido.
Para hacer Pages en sí privado (feature del Pro: "Visibility: Private"):
gh api -X PUT repos/nollagluiz/AI_forSE/pages -f public=false
Checklist de operaciones día-a-día¶
Todo PR tocando branches protegidas debe:
- ✅ Pasar los 8 status checks obligatorios
- ✅ Recibir 1 review aprobado (codeowner no obligatorio)
- ✅ Tener todas las conversaciones del PR resueltas
- ✅ Ser mergeado vía squash (linear history obligatorio, merge commits bloqueados)
- ✅ Branch eliminada tras merge (auto-delete habilitado)
Si un check está fallando consistentemente en main y no es accionable (dependencia externa flaky, etc.), abre un issue antes; no lo remuevas silenciosamente de la lista de protección — eso evade la traza de auditoría.
Onboarding de nuevos usuarios autorizados¶
La licencia restringe el uso a "empleados de Cisco y partners certificados". Para otorgar acceso:
- Verificar la afiliación del solicitante (email Cisco o prueba de certificación de partner)
- Asegurar que haya firmado (o aceptado electrónicamente) el License Acceptance Modal en el primer login (ver flujo en
LicenseAcceptanceModal.tsx) - Añadir como colaborador con permiso
pull(read):gh api -X PUT repos/nollagluiz/AI_forSE/collaborators/{username} -f permission=pull - Promover a
pushsolo si va a contribuir activamente, y solo tras la firma del CLA (cuando el CLA se implemente)
Revocar acceso¶
gh api -X DELETE repos/nollagluiz/AI_forSE/collaborators/{username}
Auditar el log de acceso periódicamente:
gh api repos/nollagluiz/AI_forSE/collaborators --jq '[.[]|{login,permissions}]'
Lo que esto NO protege¶
- Usuarios autorizados copiando código fuente a dispositivo personal — se resuelve con NDAs, no con GitHub
- Usuarios autorizados contribuyendo a proyectos derivados públicos — se resuelve con CLA + enforcement de licencia
- Un clone filtrado apareciendo en otra plataforma — se resuelve con DMCA + fingerprinting forense (planificado)
Este runbook es una capa. Los términos de la licencia (PolyForm + Appendix A) son la capa legal. Fingerprinting forense y CLA son tareas de follow-up pendientes, rastreadas por separado.
Revertir a público¶
Si la política de audiencia cambia y el repo necesita volver a ser público:
gh repo edit nollagluiz/AI_forSE --visibility public --accept-visibility-change-consequences
Las reglas de branch protection sobreviven al cambio de visibilidad. Pages necesitará reconfigurarse si estaba configurado como privado.
Relacionados¶
LICENSE— PolyForm Noncommercial 1.0.0 + Appendix AUSAGE_POLICY.es.md— restricciones de audiencia y campo de usoPRIVACY_POLICY.es.md— qué se recopila cuando usuarios autorizados aceptan la licenciaAUDIT_LOG.md— qué actividades se loguean para compliance