Communitygithub.com

lguidolin/higiene-de-cambio-y-artesanía-de-código

Úsalo al escribir o refactorizar código, estructurar un commit o PR, o decidir si abstraer duplicación. Síntomas: mezclar reorganización con cambios de lógica, un PR que hace varias cosas a la vez, un archivo que crece demasiado, la segunda copia de código similar, o dudas sobre si aplicar DRY.

¿Qué es higiene-de-cambio-y-artesanía-de-código?

Este skill establece principios fundamentales para dar forma a cambios y escribir código de alta calidad. Se centra en dos temas principales: separar cambios estructurales de cambios de comportamiento, y expresar las intenciones con la menor complejidad posible que funcione. La higiene de cambio exige que las reorganizaciones (dividir archivos, renombrar, añadir comentarios) sean un paso independiente y verificable antes de alterar la lógica, evitando mezclas que dificulten la revisión. El arte de escribir código promueve nombres descriptivos, comentarios sobre el 'por qué' en lugar del 'cómo', unidades pequeñas con un solo propósito, y aplicar DRY con criterio: la duplicación es una señal para decidir, no un error automático. También aborda tensiones como DRY vs. abstracción prematura y DRY vs. DAMP, y proporciona racionalizaciones comunes para evitar excusas típicas. Es compatible con cualquier entorno de desarrollo de software, como Claude Code, Cursor, Codex, etc.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lguidolin/agent-skills/tree/main/skills/change-hygiene-and-code-craft

Preguntar en tu IA favorita

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

Documentación

Higiene de Cambio y Artesanía de Código

Resumen

Cómo se dan forma a los cambios y cómo se escribe código. Dos temas: separar el cambio estructural del cambio de comportamiento, y decir lo que quieres decir con la menor complejidad que funcione.

Higiene de Cambio

  • Cambios estructurales antes que cambios de comportamiento, validados de forma independiente. Reorganizar (dividir archivos, renombrar, añadir comentarios) es un paso separado y verificable de forma independiente de cambiar el comportamiento (nuevas restricciones, lógica alterada). Nunca los mezcles en un solo cambio indivisible: un revisor no puede distinguir una reorganización segura de cambios de lógica reales.
  • Un solo propósito por cambio. Un cambio tiene un único propósito enunciable.
  • Mejora el código en el que trabajas cuando sus problemas afectan tu tarea (deja el campamento más limpio) — pero no comiences una refactorización no relacionada. Mantente enfocado en el objetivo.

Artesanía de Código

  • Explícito sobre implícito. Sin comodines donde corresponden nombres, sin conversiones implícitas, sin cadenas vacías ni centinelas mágicos. Di lo que quieres decir.
  • Nombres descriptivos. Las funciones/variables describen lo que hacen; sigue los modismos del lenguaje y el ecosistema.
  • Comenta la intención, no el mecanismo. Explica por qué cuando no sea obvio; omite comentarios sobre código evidente.
  • Unidades pequeñas y de un solo propósito. Para cualquier unidad deberías poder indicar qué hace, cómo usarla, de qué depende — sin leer sus internos. Un archivo grande generalmente está haciendo demasiado.
  • DRY en código de producción, con criterio. La duplicación es una señal, no un error automático. La segunda ocurrencia casi idéntica desencadena una decisión deliberada: abstraer, o registrar por qué no. Abstrae el significado compartido, nunca la forma coincidente — las cosas que se parecen pero cambian por razones diferentes se mantienen separadas.
  • Sigue los estándares del ecosistema. Usa los modismos y las bibliotecas bien soportadas que un profesional competente espera. No reinventes lo que la plataforma ya resolvió.

Las Tensiones Nombradas

  • DRY vs. abstracción prematura: el código de producción abstrae sobre repetición demostrada de intención, no sobre repetición anticipada de forma. Cuando no estés seguro, espera a la tercera ocurrencia (YAGNI gobierna el desempate).
  • DRY vs. DAMP: el código de producción es DRY; el código de prueba es DAMP (claridad sobre des-duplicación, ver pruebas-como-control). Aplicar DRY a las pruebas es una violación.

Racionalizaciones Comunes

ExcusaRealidad
"Renombraré y añadiré la funcionalidad en un solo commit"Estructura y comportamiento en un solo diff no son revisables. Divídelos.
"Dos copias, debo aplicar DRY ahora"Segunda ocurrencia = decidir. Misma forma ≠ mismo significado. La duplicación coincidente debe mantenerse separada.
"Ya que estoy aquí, déjame refactorizar este otro módulo"La refactorización no relacionada amplía el alcance y el riesgo. Anótalo; no lo hagas ahora.
"Una línea ingeniosa es más elegante"Lo explícito vence a lo ingenioso. Optimiza para el próximo lector.

Señales de Alerta — DETENTE

  • Un diff que mueve código y cambia su comportamiento
  • Un PR cuyo propósito necesita la palabra "y" para describirse
  • Abstraer ante la primera señal de similitud, o ante repetición anticipada (no real)
  • Un archivo que ya no puedes mantener en tu cabeza

Razonamiento completo: Artículos V y VI de la constitución, agrupados en engineering-constitution/references/engineering-constitution.md.

Individual skills in this repo

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

lguidolin/cloud-delivery-aks

Use when deploying to Kubernetes or Azure Kubernetes Service (AKS), configuring cloud secrets, setting up progressive rollout/canary, per-PR ephemeral environments, or k8s health probes. Keywords — Kubernetes, AKS, Key Vault, Argo Rollouts, Flagger, canary, blue-green, liveness, readiness, PodDisruptionBudget, HPA, rollback, GHCR.

lguidolin/commit-history-rewrite

Use when an existing repository has messy commit history that needs to conform to conventional commits before adopting release-please, or when intermediate WIP/fixup/merge commits need to be cleaned up.

lguidolin/conventional-commits-and-releases

Use when committing, writing a commit message, opening a PR that will be squash-merged, or configuring automated versioning/changelogs. Keywords — conventional commits, release-please, semver, feat/fix/chore, breaking change, changelog.

lguidolin/defense-in-depth-security

Use when handling untrusted input, secrets, authentication/authorization, or dependencies — or threat-modeling a new surface. Keywords — STRIDE, threat model, least privilege, secrets management, supply chain, dependency scanning, input validation, audit log, defense in depth.

lguidolin/designing-before-building

Use when starting a feature, fixing a non-trivial bug, or about to write implementation code — before any code exists. Symptoms you need this: "this is simple, I'll just code it", reaching for the editor before a design is approved, or an idea that hasn't been turned into a spec and plan.

lguidolin/engineering-constitution

Use when starting work in a project that follows the engineering constitution, orienting to its rules, or deciding which engineering practice applies to a task — spec writing, commits, testing, security, deploys, database, or UI work.

lguidolin/graphql-contract-testing

Use when writing a GraphQL query/mutation that the UI and a test will share, or building route/schema contract or smoke tests. Symptoms — copying a query into a test, a test asserting on query text, schema change that didn't break the UI build, or RLS/permission drift. Keywords — graphql-codegen, typed document, contract test, route smoke test.

lguidolin/init-repo-CI

Use when setting up a new repository with conventional commits, release-please, and CI automation, or when retrofitting an existing repository that lacks automated versioning and PR validation workflows.

lguidolin/interface-craft-and-accessibility

Use when building or styling UI — components, layouts, forms, design tokens — or making accessibility decisions. Keywords — a11y, WCAG, keyboard navigation, focus state, contrast, design system, minimalist UI, component reuse, ARIA, semantic HTML.

lguidolin/merge-gates-and-automation

Use when setting up or changing CI, pre-push hooks, or a task runner, or deciding what must pass before merge. Symptoms — tempted to put authoritative checks only in a local hook, skip CI, bypass with --no-verify, or unsure what gates a merge vs. runs locally.

lguidolin/observability-and-slos

Use when adding logging, metrics, tracing, health checks, SLOs, or alerting — or when building a service surface that needs to be operable and debuggable. Keywords — structured logs, OpenTelemetry, correlation id, RED metrics, liveness, readiness, SLI, SLO, error budget, alerting.

lguidolin/performance-and-scale

Use when working on hot paths, list endpoints, pagination, data-access in loops, or public interfaces/schemas. Symptoms — unbounded queries, N+1 access, no latency budget, optimizing without measuring, or changing an interface many consumers depend on. Keywords — pagination, N+1, Hyrum's Law, performance budget, bundle size.

lguidolin/postgres-postgraphile-rls-and-sql

Use when writing PostgreSQL, PostGraphile config, Row-Level Security policies, SQL schema files, or working on the Browser→App→PostGraphile→Postgres data path. Keywords — RLS, SECURITY DEFINER, search_path, pgSettings, grants, roles, GraphQL depth limit, query cost, statement_timeout, SQL file organization.

lguidolin/recording-decisions

Use when a design or architecture decision has been made and needs to be captured — writing a decision record or ADR, updating a decision index, noting a deferred idea, or superseding a past decision. Keywords — ADR, decision record, rationale, rejected alternatives, dependency index.

lguidolin/resilience-and-deploy-safety

Use when planning a deploy, designing a rollback, or responding to an incident or writing a postmortem. Keywords — deploy safety, rollback, immutable artifact, progressive delivery, canary, blast radius, incident response, blameless postmortem, error budget.

lguidolin/ship-it

Use when the user wants to ship work — push, PR, archive decision records, merge, and clean up. Handles the full lifecycle from committing final changes through post-merge cleanup including converting specs/plans to compact decision records.

lguidolin/tests-as-a-control

Use when writing or modifying tests, when a test breaks during a refactor, or when testing permission/role rules. Symptoms — tempted to edit a test to make it pass, testing only the happy path, a deny-test that started passing, flaky tests, or unsure what to assert.

lguidolin/zero-downtime-migrations

Use when changing a database schema where data must survive the change — adding/removing/renaming columns, constraints, indexes, or backfilling. Symptoms — a destructive migration bundled with a code deploy, a NOT NULL column with a backfill, a table-locking UPDATE, or a rename. Keywords — expand/contract, parallel change, backfill, NOT VALID, CREATE INDEX CONCURRENTLY, graphile-migrate.

Skills relacionados