CommunityProgramación y desarrollogithub.com

tderoussel/ship-gate

Puerta de verificación para un stack Next.js-on-Vercel + Supabase + GitHub Actions, para ejecutar antes de afirmar que algo está enviado, desplegado, en vivo, fusionado, pasando o terminado.

¿Qué es ship-gate?

Ship Gate es una habilidad diseñada para equipos que usan el stack de Next.js en Vercel, Supabase y GitHub Actions, proporcionando una verificación rigurosa antes de hacer afirmaciones sobre despliegues, fusiones de PR, CI verde o estado de producción. Evita falsos positivos codificando trampas donde la comprobación obvia devuelve un pase falso, como verificar solo el primer contexto de CI, confiar en comandos canalizados o asumir que un dashboard refleja el SHA desplegado real. La habilidad cubre verificación de despliegue (confirmar el SHA actual en producción, no solo estado READY), validación de CI (verificar todos los contextos requeridos, evitar piped commands, detectar trabajos no ejecutados), gates de tipo y lint (con heap de Node aumentado para TypeScript grande, cobertura de directorios de funciones edge) y verificación de base de datos (nunca empujar migraciones casualmente, medir radio de explosión contra datos reales). También incluye trampas ambientales como zona horaria, identidad git y variables de entorno. La salida debe declarar cada gate como PASS (con evidencia) o NOT CHECKED (con razón), y si algún gate falla o no se verifica, se debe retener la afirmación.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tderoussel/agent-skills/tree/main/skills/ship-gate

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Ship gate (Puerta de envío)

Cada regla aquí existe porque la comprobación obvia devolvió un falso pase en algún momento. Ejecuta la puerta antes de la afirmación, no después.

Adapta los detalles a tu stack; la forma — ¿qué haría que esta afirmación fuera falsa? — es la parte transferible.

La regla de la afirmación

Una afirmación sobre producción requiere una consulta contra producción.

Una prueba que pasa no es producción. Un PR fusionado no es producción. Un despliegue verde no es producción. Cada uno de esos es una afirmación sobre un sistema diferente al que estás afirmando.

Si ningún humano ha visto el resultado, no está "verificado" — di lo que realmente comprobaste en su lugar.

Verificación de despliegue

  • Sepa qué desencadena realmente un despliegue. En un host integrado con git, es el push, no una invocación de CLI. Desplegar por CLI cuando el proyecto despliega por push produce una compilación que no es la que los usuarios reciben.
  • Verifique la cuenta que posee el proyecto. Un CLI iniciado sesión localmente puede estar autenticado como una cuenta personal que no posee el proyecto de producción — cada comando entonces tiene éxito contra el destino equivocado, en silencio.
  • Verifique con el estado del commit contra el SHA desplegado, no un vistazo al dashboard.
  • Confirme el despliegue que es producción actual, no meramente uno que está LISTO. Varios pueden estar listos a la vez.
  • Las funciones edge/serverless se despliegan por separado de la aplicación. Un PR fusionado no despliega una función edge; verifica su versión explícitamente.
  • Los cambios solo de cliente pueden no necesitar un despliegue de función — no esperes uno que nunca llegará.
  • Vuelve a obtener el manifiesto en vivo antes de afirmar una versión. El trabajo paralelo incrementa las versiones por debajo de ti.

Verificación de CI

  • Filtra por cada contexto requerido, no solo el primero verde.
  • Nunca filtres por un comando canalizado. some-check | tail reporta el código de salida de tail, ocultando la falla real. En shells sin PIPESTATUS (zsh difiere de bash aquí), es fácil equivocarse — verifica el estado propio del comando.
  • steps: 0 significa que el trabajo nunca se ejecutó, no que pasó. Una API de comprobaciones puede reportar una conclusión para un trabajo que no hizo nada.
  • Una falla sospechosamente rápida sin pasos suele ser un problema de facturación o permisos, no un problema de YAML.
  • Re-ejecutar solo trabajos fallidos reproduce una instantánea obsoleta de la rama. Actualiza la rama primero, luego re-ejecuta.
  • Una lista de comprobaciones omite trabajos que nunca se crearon. La ausencia de una falla no es evidencia de un pase.
  • gh pr create requiere un --base explícito. Los heredocs encadenados alrededor de él pueden fallar en silencio.

Gates de tipo y lint

  • Los proyectos grandes de TypeScript pueden necesitar un heap de Node aumentado; sin él tsc muere de una manera que parece un error de código.
  • Sepa qué directorios cubren realmente su verificador de tipos y linter. Los directorios de funciones edge están frecuentemente excluidos de ambos. Si se ejecutan en un runtime diferente, verifíquelos con el verificador propio de ese runtime — un trabajo de prueba no es un gate de tipo.
  • Compile en worktrees o checkouts limpios, no en un directorio de trabajo con deriva no confirmada.

Base de datos

  • Nunca empujes esquemas ni ejecutes migraciones casualmente contra producción. Aplica el esquema a través de la ruta revisada que el proyecto ha elegido, una vez.
  • Llama a nuevos procedimientos almacenados contra la base de datos real antes de creerlos. Los mocks ocultan errores de tiempo de ejecución que solo aparecen con tipos reales y ambigüedad real.
  • Si la suite de pruebas simula la base de datos globalmente, una prueba unitaria que pasa no prueba nada sobre la base de datos.
  • Nunca hagas comparar-y-establecer en una columna gestionada por disparadores — el disparador la cambia por debajo de la escritura.
  • Mide el radio de explosión de un cambio contra datos de producción antes de fusionar. Un filtro que parece estrecho contra una semilla local puede coincidir con una proporción muy diferente de filas reales.

Trampas ambientales

  • Nunca asumas la zona horaria de la máquina — ejecuta date. Las pruebas dependientes de fecha fallan en el desfase, y la falla parece un error de código.
  • Una identidad git no configurada puede bloquear despliegues y aparecer como un error de red no relacionado.
  • Establece variables de entorno de host desde un archivo en lugar de asignación en línea; los shells y CLIs pueden incrustar saltos de línea finales que corrompen el valor invisiblemente.
  • El éxito de un trabajo programado no es éxito del efecto del trabajo: un runner que reporta succeeded significa que la invocación retornó, no que el trabajo sucedió. Verifica el efecto.

Salida

Estado cada gate como PASS (evidencia) o NOT CHECKED (por qué).

Nunca impliques que un gate se ejecutó cuando no lo hizo. Si algún gate falla o no está verificado, di claramente que el cambio no está verificado — retener la afirmación es correcto.

Individual skills in this repo

This repo contains 8 individual skills — each has its own dedicated page.

tderoussel/codebase-audit

Runs a ranked, evidence-backed audit of a product, codebase, or subsystem, ending in a verify list that separates proven findings from inferred ones. Use when the user asks for an audit, a gap analysis, a deep read, a bug hunt, a readiness check, a re-audit, a state reconciliation, or asks what they are not seeing. Trigger phrases include "audit", "gap analysis", "what am I missing", "deep audit", "readiness", "bug hunt", "review the whole thing". Produces findings and a verify list; does not fix.

tderoussel/competitive-teardown

Researches a competing product against your own and produces a ranked build-or-ignore verdict, plus optional comparison-page copy. Use when the user names a competitor or asks how their product stacks up against one. Trigger phrases include "vs us", "competitor", "what does X have", "should we copy", "competitive gap", "teardown", "are we behind". Produces a ranked verdict with effort estimates and an explicit not-worth-copying list.

tderoussel/decision-council

Run a structured multi-perspective review of a decision instead of getting one agreeable answer. Use when the user says run a council, get me perspectives on this, should I do X, stress-test this decision, or is this a good idea.

tderoussel/fleet-brief

Authors a workstream brief for dispatching multiple parallel build agents across one codebase, with per-lane file ownership, shared-ground warnings, and a derived DO-NOT list. Use whenever work is about to be split across concurrent agents, workers, lanes, or waves — even if the user does not say "write a brief". Trigger phrases include "fan out", "parallel agents", "orchestrate this", "split into lanes", "workstreams", "run these in parallel", "review-gated build". Produces the brief; does not dispatch.

tderoussel/inbox-triage

Triage an email inbox — sort what needs a reply, draft the replies, flag what needs a decision, and surface what can be ignored or unsubscribed. Use when the user says triage my inbox, do my email, what's in my inbox, or clean up my email.

tderoussel/overnight-build

Composes an autonomous unattended Claude Code build prompt that survives usage-limit resets via BUILD_LOG.md checkpointing, plus the launcher that restarts it. Use when the user asks for an overnight build, an autonomous build, a build to run while they sleep, an unattended or unsupervised session, or any long build they will not be monitoring. Trigger phrases include "overnight build", "run overnight", "build while I sleep", "autonomous build", "let it run", "unattended". Produces a single copyable prompt; does not run the build.

tderoussel/session-log

Write a durable record of a work session — what was built, root-caused, or shipped — into the project's notes. Use when the user says log this session, write a session log, record this, or when a substantial piece of work has just finished and needs to be handed off to a future session.

tderoussel/vault-doctor

Audits and repairs an Obsidian vault's structural health — broken [[wikilinks]], ambiguous duplicate filenames, missing or malformed frontmatter, stale status markers, and hub notes whose state sections have gone cold. Use when the user asks about vault health, broken links, vault cleanup, dead links, orphan notes, tag consistency, or says the vault feels messy or out of date. Trigger phrases include "vault health", "broken links", "clean up the vault", "audit the vault", "is the vault current". Read-only by default; every repair is proposed before it is made.

Skills relacionados