Principios

00 · Principios

Umbral es un laboratorio de datos independiente y de código abierto. Publica sobre desapariciones, delito y gasto público en México. Todo lo que aquí se define es vinculante salvo que un humano indique lo contrario.

Umbral = el punto donde la evidencia se vuelve significativa.

Los cinco principios

1. El título es la afirmación. Una gráfica se titula con el hallazgo, no con el tema, y el hallazgo tiene que sostenerse con lo que la gráfica muestra. Si el título dice algo que la figura no puede probar, la figura está decorando una afirmación que nadie verificó.

2. La incertidumbre es visible. Intervalos en las proyecciones, IC en las estimaciones, n y denominador en las tasas. Un estimado puntual sin intervalo afirma una precisión que el método no tiene. Es la firma del laboratorio: se reconoce una gráfica de Umbral porque muestra lo que no sabe.

3. Los huecos se declaran. El dato faltante es información. Interpolarlo, rellenarlo con cero o recortar el periodo hasta que desaparezca cambia la conclusión sin que el lector pueda saberlo.

4. El lenguaje causal es deliberado. «Asociado con» para lo descriptivo. «Efecto» y «reduce» solo con una estrategia de identificación nombrada junto al estimado. Es la diferencia entre un laboratorio y una nota de opinión con gráficas.

5. Las personas se cuentan, nunca se hacen espectáculo. Detrás de cada registro del RNPDNO hay una persona y una familia. El tratamiento sobrio no es frialdad: es la forma de respeto que puede ofrecer un laboratorio de datos.

Cómo leer esta guía

La guía es prosa; la norma es rules/rules.yaml. Cada capítulo incluye sus reglas desde ahí en vez de reescribirlas, de modo que no puedan separarse.

Cuando veas un recuadro con un identificador —UMB-COL-004— estás leyendo el texto normativo, generado. Cuando leas párrafos como éste, estás leyendo explicación, que orienta pero no obliga.

Severidad Qué significa
■ error Bloquea el release. CI falla o la revisión rechaza.
▲ advertencia Se reporta y hay que justificarla.
· guía Orienta.

La cadena normativa

rules/rules.yaml  +  tokens/src/*.tokens.json      ← aquí se decide
        ↓ build
tokens/build/*  ·  rules/rules.json                ← generado, versionado, nunca a mano
        ↓ consumido por
guide/*.md  ·  site/  ·  packages/  ·  skills/  ·  tools/umbral-lint

Tres consecuencias que gobiernan todo lo demás:

■ UMB-PRO-003 · Proceso · error

Ningún archivo fuera de tokens/src/ escribe un valor que ya existe como token

Es la forma concreta que toma la deriva: el valor se copia una vez, la fuente cambia, y la copia se queda.

Importar desde tokens/build/.
No Pegar #128273 en un notebook.

Comprobación: Automática — umbral-lint, comprobación hardcoded-value.

Ver también: UMB-COL-002

Desde v1.0. Regla normativa: rules/rules.yaml.

■ UMB-PRO-002 · Proceso · error

La prosa no enuncia ninguna regla que rules.yaml no enuncie también

Es el mecanismo que impide que la guía y la norma se separen. En v1.0 el brand book y el documento de ingeniería se contradecían sobre el tercer color de serie, y ganó el que fallaba contraste.

Añadir la regla aquí, con su ID, y citarla desde el capítulo.
No Escribir «nunca hagas X» en un capítulo y dejarlo ahí.

Comprobación: Automática — verify-guide, comprobación prose-rule-drift.

Origen: audit/2026-07-conformance.md §3.5.

Desde v1.1. Regla normativa: rules/rules.yaml.

■ UMB-PRO-001 · Proceso · error

Los archivos generados nunca se editan a mano

Editar la salida rompe la cadena normativa en silencio: la fuente y lo publicado dejan de coincidir y nada lo detecta hasta que alguien reconstruye.

Cambiar tokens/src/ o rules/rules.yaml y reconstruir.
No Corregir un hex en tokens/build/tokens.css.

Comprobación: Automática — umbral-lint, comprobación generated-file-edited.

Origen: CLAUDE.md §2, tercera consecuencia dura; formalizada como regla en 1.1.

Desde v1.1. Regla normativa: rules/rules.yaml.

Por qué existe este repositorio

La versión 1.0 de la marca era buena y estaba bien aplicada. La auditoría de julio de 2026 encontró que aun así el 44% del texto del sitio principal no alcanzaba el contraste mínimo de accesibilidad — y que casi ningún defecto era un error de aplicación. Eran instrucciones que se siguieron al pie de la letra:

De ahí la arquitectura: un valor se enuncia en un solo lugar, y lo que no se puede comprobar automáticamente se comprueba en una lista corta que cabe en una página.

■ UMB-PRO-004 · Proceso · error

Cambiar el valor de un token es un cambio MAYOR de versión

El semver aplica al sistema de diseño, no solo al código: un token que cambia re-renderiza todos los productos que lo consumen.

MAYOR para un valor de token o una regla que sube a error; MENOR para una regla nueva en warning; PARCHE para prosa.
No Cambiar un hex en un parche.

Comprobación: Manual. Se verifica al preparar el release, contra CHANGELOG.md.

Desde v1.0. Regla normativa: rules/rules.yaml.

■ UMB-PRO-005 · Proceso · error

El capítulo de la guía y la entrada de la regla se actualizan juntos

Separarlos es exactamente cómo se produce la deriva que este repositorio existe para eliminar.

Un PR que toca rules.yaml también toca su capítulo, y al revés.
No Añadir una regla y dejar la guía para después.

Comprobación: En revisión.

Origen: CLAUDE.md §4, definición de done; formalizada como regla en 1.1.

Ver también: UMB-PRO-002

Desde v1.1. Regla normativa: rules/rules.yaml.

Índice de reglas

69 reglas · 58 error · 10 advertencia · 1 guía.

Marca

ID Regla Comprobación
UMB-BRD-001 El wordmark es «umbral_» en minúsculas, Space Grotesk 500, con el guión bajo en signal review
UMB-BRD-002 La barra del isotipo guarda proporción 5:44 y cruza a la izquierda del centro logo-geometry
UMB-BRD-003 El espacio de respeto es una altura de barra en los cuatro lados review
UMB-BRD-004 El logo no se distorsiona, contornea, sombrea ni recolorea fuera de los tokens review

Color

ID Regla Comprobación
UMB-COL-001 No se usa blanco ni negro puros pure-black-white
UMB-COL-002 Ningún color se escribe a mano: todos vienen de los tokens hardcoded-token-hex
UMB-COL-003 No se usan degradados no-gradient
UMB-COL-004 El color signal se usa en un solo elemento de la capa de datos por vista review
UMB-COL-005 Todo texto alcanza 4.5:1 contra base y contra panel contrast-text
UMB-COL-006 Toda marca de datos alcanza 3:1; el mobiliario de la gráfica está exento y así se declara contrast-mark
UMB-COL-007 No se mezclan los dos modos dentro de un mismo panel review
UMB-COL-008 Un color categórico nuevo se deriva en OKLCH y se verifica contra dicromacia series-separation
UMB-COL-009 Las dos rampas secuenciales no codifican dos variables en la misma figura review
UMB-COL-010 Dato faltante, dato suprimido y cero se distinguen visualmente entre sí review

Tipografía

ID Regla Comprobación
UMB-TYP-001 El display es Space Grotesk 500; nunca 700 display-weight
UMB-TYP-002 Solo se usan Space Grotesk, IBM Plex Sans e IBM Plex Mono banned-font-family
UMB-TYP-003 Se respetan los tamaños mínimos: 12px mono en web, 24px en slides, 11pt en documentos minimum-font-size
UMB-TYP-004 Las cifras que se alinean o se comparan van en mono; una cifra heroica aislada va en display review
UMB-TYP-005 Las tres fuentes se auto-hospedan, subconjuntadas a latin y latin-ext font-hosting
UMB-TYP-006 El tracking del display va entre −0.02 y −0.03em display-tracking

Layout

ID Regla Comprobación
UMB-LAY-001 El radio de borde nunca pasa de 2px radius-max
UMB-LAY-002 No hay sombras; las reglas de 1px hacen el trabajo estructural no-drop-shadow
UMB-LAY-003 La medida del texto no pasa de 65 caracteres measure-max
UMB-LAY-004 Todo espaciado es múltiplo de 8px spacing-scale
UMB-LAY-005 No hay emoji, iconos de stock ni ilustración decorativa no-emoji

Gráficas

ID Regla Comprobación
UMB-CHT-001 El título de la gráfica enuncia el hallazgo como oración completa review
UMB-CHT-002 Toda gráfica lleva subtítulo con geografía, periodo y unidad review
UMB-CHT-003 Toda gráfica lleva su línea de fuente con licencia, sobre una regla de 1px chart-source-present
UMB-CHT-004 Solo hay líneas de retícula horizontales, con la línea base más oscura review
UMB-CHT-005 Las series se etiquetan directamente al final de la línea; no hay caja de leyenda review
UMB-CHT-006 Una gráfica lleva como máximo 5 series review
UMB-CHT-007 Los ejes van en mono, abreviados, con coma como separador de miles review
UMB-CHT-008 El eje y de las barras empieza en cero review
UMB-CHT-009 Cualquier truncamiento del eje se anota en la propia gráfica review
UMB-CHT-010 No se usan pastel, 3D ni doble eje banned-chart-type
UMB-CHT-011 Toda proyección o estimación muestra su incertidumbre review
UMB-CHT-012 Toda tasa declara su denominador y su n review

Voz

ID Regla Comprobación
UMB-VOZ-001 Español primero; el inglés se añade donde lo gane el público review
UMB-VOZ-002 Sin palabras hype, signos de exclamación, emoji ni preguntas retóricas como titular hype-language
UMB-VOZ-003 Un adjetivo no sustituye a un número review
UMB-VOZ-004 No se publica contenido de relleno placeholder-content

Números y unidades

ID Regla Comprobación
UMB-NUM-001 es-MX y en usan coma para miles y punto para decimales review
UMB-NUM-002 Las cifras grandes se abrevian en ejes y se escriben completas en el texto review
UMB-NUM-003 Las fechas van en ISO dentro de los datos y en prosa dentro del texto date-format
UMB-NUM-004 · El símbolo de porcentaje va pegado a la cifra percent-spacing
UMB-NUM-005 La precisión declarada no excede la del dato review
UMB-NUM-006 Cero, nulo y suprimido se escriben distinto y significan distinto review

Datos y procedencia

ID Regla Comprobación
UMB-DAT-001 Todo conjunto de datos lleva su SOURCE.md source-md-present
UMB-DAT-002 Los snapshots se etiquetan y la gráfica dice cuál usó snapshot-tag
UMB-DAT-003 Toda figura publicada se reconstruye desde el dato crudo con un solo comando manual
UMB-DAT-004 El código va bajo MIT y los datos y el contenido bajo CC BY 4.0 license-present
UMB-DAT-005 Los datos faltantes o subreportados se declaran; no se omiten ni se imputan en silencio review

Accesibilidad

ID Regla Comprobación
UMB-A11Y-001 El atributo lang corresponde al idioma real del subárbol lang-attribute
UMB-A11Y-002 Toda gráfica lleva un aria-label que resume el hallazgo chart-aria-label
UMB-A11Y-003 Junto a cada gráfica hay una tabla de datos o un review
UMB-A11Y-004 Junto a cada gráfica se puede descargar su CSV review
UMB-A11Y-005 El significado nunca se codifica solo con color review
UMB-A11Y-006 El foco visible se dibuja en signal y los objetivos táctiles miden 44px o más focus-and-target
UMB-A11Y-007 Se respeta prefers-reduced-motion reduced-motion

Método

ID Regla Comprobación
UMB-MET-001 Los verbos causales solo se usan con una estrategia de identificación nombrada review
UMB-MET-002 El titular se sostiene con los datos que la gráfica muestra review
UMB-MET-003 No se comparan conteos crudos entre poblaciones de distinto tamaño review
UMB-MET-004 Los temas sensibles se tratan con dignidad: se cuenta a las personas, no se les hace espectáculo review
UMB-MET-005 La terminología sensible sigue el glosario, que es vinculante terminology

Proceso

ID Regla Comprobación
UMB-PRO-001 Los archivos generados nunca se editan a mano generated-file-edited
UMB-PRO-002 La prosa no enuncia ninguna regla que rules.yaml no enuncie también prose-rule-drift
UMB-PRO-003 Ningún archivo fuera de tokens/src/ escribe un valor que ya existe como token hardcoded-value
UMB-PRO-004 Cambiar el valor de un token es un cambio MAYOR de versión manual
UMB-PRO-005 El capítulo de la guía y la entrada de la regla se actualizan juntos review