Reference · the enforceable halfReferencia · la mitad exigible

Quality GatesQuality Gates

Generative Specification is only as good as what a machine can verify. These are the deterministic gates that make the discipline enforceable: standard CI hooks, grouped by the property each defends. An LLM may write the code, but a non-LLM checker verifies it — these gates are those checkers. La Generative Specification vale lo que una máquina puede verificar. Estos son los gates deterministas que hacen exigible la disciplina: hooks de CI estándar, agrupados por la propiedad que defiende cada uno. La IA escribe el código, pero un verificador que NO es IA lo chequea — estos gates son ese verificador.

You do not need a proprietary tool. Point a capable AI at the white paper and this page and ask it to wire the applicable gates for your stack. The tools below are the JS/TS defaults; the assistant substitutes per language. No necesitás una herramienta propietaria. Apuntá una IA capaz al white paper y a esta página, y pedile que cablee los gates que apliquen a tu stack. Las herramientas de abajo son los defaults JS/TS; el asistente sustituye por lenguaje.

The gates, by propertyLos gates, por propiedad

PropertyPropiedad Gate — what it checksGate — qué chequea Standard toolHerramienta RuleRegla LevelNivel
Boundedfile lengthlargo de archivowc / loc≤ ~300 linesblocking
Boundedfunction length + paramslargo de función + paramseslintmax-lines-per-function, max-paramsblocking
Boundedcyclomatic complexitycomplejidad ciclomáticaeslint complexityfunction CC ≤ 10blocking
Boundedcode duplicationduplicaciónjscpd~5-10% ceilingadvisory
Boundeddead codecódigo muertots-prune / knipno unused exportsadvisory
Composablelayer boundarieslímites de capasdependency-cruisercontroller ↛ repo; domain pureblocking
Composablecircular importsimports circularesmadgeno cyclesblocking
Verifiabletype strictnesstipos estrictostsc --strictstrict passes; no anyblocking
Verifiableline/branch coveragecoberturac8 / istanbul≥ target (e.g. 70%)blocking
Verifiablemutation scorescore de mutaciónstryker≥ targetadvisory
Executablebehavioural probes vs liveprobes contra app vivahurl (o newman)acceptance criteria pass on deployblocking
Executablemodule boot smokesmoke de bootCI boot scriptevery module bootsblocking
Defendedsecrets scanescaneo de secretosgitleaksno secrets in diffblocking
Defendeddependency auditauditoría de depsnpm audit / osvno high/critical vulnsblocking
Defendedforbidden patternspatrones prohibidoseslint customno eval, no DB-in-controllerblocking
Self-describingscreaming architecture + sentinel presentarquitectura que grita + sentinelastructure checkchequeo de estructuranames announce domain; CLAUDE.md routesadvisory
Auditableconventional commitsconventional commitscommitlintcommits parse by type/scopeblocking
AuditableTDD phase order + decision recordsorden TDD + decision recordscommit-history hookhook de historiatest:[RED] before feat:; ADR/EDRadvisory
Reproducibleregression fixtures + determinismfixtures + determinismosnapshots / seeded runssnapshots / seedsflaky tests fail CIadvisory
Observablestructured-logging / trace presencelogging estructurado / trazaspresence checkchequeo de presenciakey paths emit structured logsnot yet gatedaún no
Blocking vs advisory mirrors the maturity score: a codebase is rated by how many of these gates it actually enforces. Observable is the honest ungated gap today; nothing is scored where no gate evidences it. Blocking vs advisory refleja el score de madurez: una base de código se califica por cuántos de estos gates realmente hace cumplir. Observable es el hueco honesto sin gate hoy; no se puntúa nada donde ningún gate lo evidencia.
The ratchet. Each new defect that slips becomes a new blocking gate, derived from a real incident. The set only grows, and it only tightens. That accumulation is the value. El trinquete. Cada defecto nuevo que se escapa se vuelve un gate blocking nuevo, derivado de un incidente real. El conjunto solo crece, y solo se ajusta. Esa acumulación es el valor.