Saltar al contenido

Verificaciones

Ver el Markdown

Cada verificación que el validador puede reportar, con un anclaje estable. Los mensajes de error enlazan aquí, así que estas URL no se mueven.

62 verificaciones catalogadas · 42 implementadas

Descubrimiento

DSC001errorL1Catalogada, todavía no implementada — Task 15 (behavioral probes)

Manifiesto alcanzable por HTTPS como JSON

Regla
El manifiesto MUST servirse por HTTPS con Content-Type: application/json.
Arreglo
Sirve el manifiesto por HTTPS con un tipo de contenido JSON, y compruébalo desde fuera de tu red.

Especificación

DSC002errorL1Implementada

Soft-404: no hay una ruta de descubrimiento que responda 200 + text/html

Regla
Un manifiesto es JSON. Si en una ruta de descubrimiento responde HTML, es un catch-all: el manifiesto está ausente, no presente.
Arreglo
Excluye esta ruta del catch-all de tu SPA para que se sirva el archivo.

Especificación

DSC003warningL1Catalogada, todavía no implementada — Task 15

robots.txt devuelve 200 text/plain

Regla
Las precondiciones de L2 y superiores incluyen un robots.txt real.
Arreglo
Sirve un robots.txt real en la raíz, con tipo de contenido text/plain.

Especificación

DSC004warningL1Catalogada, todavía no implementada — Task 15

Manifiesto en la ruta RECOMMENDED, o anunciado con <link rel>

Regla
El manifiesto SHOULD vivir en /.well-known/cabuya.json, o anunciarse con <link rel="cabuya">.
Arreglo
Mueve el manifiesto a /.well-known/cabuya.json, o anuncia su ubicación con un <link rel="cabuya-manifest">.

Especificación

DSC005errorL1Implementada

El manifiesto valida contra manifest.schema.json

Regla
El manifiesto DEBE conformar a su esquema.
Arreglo
Corrige el manifiesto según el esquema publicado.

Especificación

DSC006errorL1Catalogada, todavía no implementada — Task 15

publisher.canonical_url coincide con la entrada del registro

Regla
El manifiesto de un publicador registrado MUST coincidir con su entrada del registro en la URL canónica.
Arreglo
Haz que la URL canónica del manifiesto coincida con la de tu entrada en el registro, o abre un pull request para cambiar la entrada.

Especificación

DSC007errorL1Catalogada, todavía no implementada — Task 15

Toda feeds[].url es HTTPS absoluta y alcanzable

Regla
Los feeds declarados MUST resolver.
Arreglo
Dale a cada feed una URL https absoluta que resuelva desde fuera de tu red.

Especificación

DSC008warningL1Catalogada, todavía no implementada — Task 15

crawl_policy_url resuelve

Regla
La política declarada de rastreo y reutilización SHOULD poder descargarse — los consumidores tienen que respetarla.
Arreglo
Apunta crawl_policy_url a una página que exista, o quita el campo.

Especificación

DSC009errorL1Catalogada, todavía no implementada — Task 13 (content side) + Task 15

conformance_target no excede el nivel medido

Regla
conformance_target es una declaración; MUST NOT afirmar más de lo que esta ejecución mide. Se reporta como discrepancia, nunca como el nivel.
Arreglo
Baja conformance_target al nivel que realmente alcanzas, o corrige lo que bloquea el nivel que declaras. El objetivo es una intención, no una afirmación.

Especificación

Sobre

SCH001errorL2Implementada

El documento no cumple con su esquema JSON publicado

Regla
Todo feed y todo manifiesto DEBE validar contra su esquema versionado.
Arreglo
Corrige el valor para que satisfaga el esquema.

Especificación

ENV001errorL2Implementada

Los campos obligatorios del sobre están presentes y bien tipados

Regla
last_updated, ttl, version, publisher_id y license son OBLIGATORIOS en el envelope.
Arreglo
Agrega el campo faltante al envelope.

Especificación

ENV002errorL2Implementada

last_updated es RFC 3339 con desfase UTC

Regla
La marca de generación DEBE ser inequívoca.
Arreglo
Emite RFC 3339 con desfase explícito, por ejemplo "2026-08-16T04:00:00Z".

Especificación

ENV003errorL2Implementada

license presente

Regla
Un feed sin licencia no conforma: su ausencia bloquea la revisión legal de cualquier consumidor.
Arreglo
Declara "license" en el envelope (por ejemplo "CC-BY-4.0").

Especificación

ENV004warningL2Implementada

license es un identificador SPDX, o va acompañado de license_url

Regla
DEBERÍA usarse una licencia resoluble por máquina.
Arreglo
Usa un identificador SPDX, o agrega "license_url" apuntando al texto de la licencia.

Especificación

ENV005warningL2Implementada

permitted_use presente, con valores dentro del enum cerrado

Regla
El consentimiento de reuso viaja en el envelope: display | aggregate | redistribute | ai_answer | ai_train.
Arreglo
Agrega "permitted_use" con los valores del enum cerrado.

Especificación

ENV006errorL2Implementada

version es una versión de la especificación soportada

Regla
Las versiones soportadas abarcan como máximo dos MAJOR.
Arreglo
Publica una versión que este validador entienda, o actualiza el validador.

Especificación

ENV007errorL2Implementada

Access-Control-Allow-Origin: * presente

Regla
El MUST no obvio: sin esta cabecera todo consumidor de navegador necesita un proxy.
Arreglo
Agrega la cabecera tal cual: `Access-Control-Allow-Origin: *`

Especificación

ENV008warningL2Implementada

ttl es un entero positivo y plausible (1–86400)

Regla
ttl es el contrato de caché; valores implausibles rompen a quien hace polling.
Arreglo
Usa un valor positivo en segundos, típicamente 60–3600 para datos vivos.

Especificación

ENV009warningL2Implementada

Feed de 5 MB o menos y 10 000 registros o menos, o con fragmentos declarados

Regla
Pasada la guía de tamaño, los publicadores DEBERÍAN fragmentar por municipio y declarar los fragmentos en el manifiesto.
Arreglo
Fragmenta por código DIVIPOLA y declara los fragmentos en feeds[] del manifiesto.

Especificación

ENV010infoL2Implementada

Content-Type: application/json, UTF-8

Regla
Higiene de transporte.
Arreglo
Sirve el feed como `Content-Type: application/json; charset=utf-8`.

Especificación

Registro

REC001errorL2Implementada

La CLAVE last_confirmed_at está en todos los registros (null es válido)

Regla
La clave de confirmación es OBLIGATORIA; null es el honesto "nunca confirmado". Omitirla no lo es.
Arreglo
Agrega "last_confirmed_at": null, o la marca de la última confirmación real. Nunca la inventes.

Especificación

REC002errorL2Implementada

id sigue la forma {publisher_id}:{local_id}

Regla
La identidad de registro es {publisher_id}:{local_id} — única globalmente sin coordinación.
Arreglo
Guarda solo tu id local; los consumidores componen el id calificado.

Especificación

REC003errorL2Implementada

No se acuñan identificadores en el espacio de otro publicador

Regla
Un publicador NO DEBE acuñar ids en el espacio de nombres de otro.
Arreglo
Republica los registros ajenos con tu propio id y conserva el origen en source{}.

Especificación

REC004errorL2Implementada

Regla de ubicación: address_text O lat+lon presentes

Regla
Un lugar que nadie puede ubicar no dirige a nadie.
Arreglo
Agrega address_text, o lat y lon (ambos son RECOMENDADOS).

Especificación

REC005warningL2Implementada

Ambas ubicaciones presentes (RECOMENDADO)

Regla
Dirección y coordenadas juntas sobreviven a más contextos de consumo que cualquiera por separado.
Arreglo
Publica address_text Y lat+lon.

Especificación

REC006errorL2Implementada

public_url presente y absoluta

Regla
El enlace de salida es el mecanismo de contacto — los valores de contacto nunca viajan.
Arreglo
Agrega "public_url" con la URL absoluta de la ficha en tu sitio.

Especificación

REC007errorL2Implementada

place_kind dentro del enum

Regla
El vocabulario compartido es lo que hace posibles las equivalencias; los tipos desconocidos usan other más una extensión con espacio de nombres.
Arreglo
Usa uno de los valores del enum, o "other" con x_{publisher}_{campo}.

Especificación

REC008warningL2Implementada

municipality_code es un código DIVIPOLA válido

Regla
La codificación territorial es DIVIPOLA; el publicador conserva su cadena cruda en municipality_text.
Arreglo
Publica el código DIVIPOLA, o al menos municipality_text.

Especificación

REC009errorL2Implementada

source{} presente, con source_id

Regla
La procedencia es estructurada, nunca prosa: la atribución y las cadenas dependen de ella.
Arreglo
Agrega source{} con al menos source_id.

Especificación

REC010errorL2Implementada

CR-2: name no contiene ningún token de estado operativo

Regla
Los nombres NO DEBEN codificar estado operativo — el estado va en lifecycle_status / service_status.
Arreglo
Deja el nombre estable y humano; publica el estado en lifecycle_status y service_status.

Especificación

REC011warningL2Implementada

Los campos name y status no se contradicen entre sí

Regla
Un registro que dice dos cosas sobre su propio estado no se puede mostrar con honestidad.
Arreglo
Haz que el registro diga una sola cosa: corrige el estado, o quita el estado del nombre.

Especificación

REC012errorL2Implementada

CR-1: updated_at no es un last_confirmed_at reutilizado

Regla
Una edición no es una confirmación; las dos marcas de tiempo no se intercambian.
Arreglo
Fija last_confirmed_at solo cuando alguien confirmó el lugar; si no, déjalo en null.

Especificación

REC013warningL2Implementada

expires_at definido en los tipos de lugar temporales por naturaleza

Regla
Los lugares temporales DEBERÍAN declarar cuándo dejan de ser ciertos.
Arreglo
Fija expires_at para que los consumidores dejen de mostrarlo cuando caduque.

Especificación

REC014warningL2Implementada

Las entradas de same_as son absolutas y de un solo salto

Regla
same_as es una afirmación de un solo salto y no transitiva.
Arreglo
Usa la forma calificada {publisher_id}:{id} y no te referencies a ti mismo.

Especificación

REC015errorL2Implementada

Los miembros desconocidos se conservan, nunca se rechazan

Regla
La extensibilidad aplica primero al validador: un miembro desconocido NO DEBE fallar la validación.
Arreglo
No requiere acción del publicador.

Especificación

REC016warningL2Implementada

Las extensiones x_ llevan el espacio x_{publisher}_{field}

Regla
Las extensiones con espacio de nombres evitan que dos publicadores choquen en un campo privado.
Arreglo
Renómbrala a x_{publisher}_{campo}.

Especificación

REC017warningL2Implementada

Hay una base en es para las cadenas localizadas

Regla
es es la línea base OBLIGATORIA para cadenas legibles por humanos; en es RECOMENDADO.
Arreglo
Agrega una entrada {text, language: "es"}.

Especificación

REC018errorL2Implementada

No hay id duplicado dentro de un mismo feed

Regla
Dos registros con un mismo id vuelven incorrecta toda deduplicación aguas abajo.
Arreglo
Dale a cada registro un id local distinto.

Especificación

Datos de persona

PII001errorL2Implementada

Aparece un valor de contacto en algún campo, extensiones incluidas

Regla
Los valores de contacto NO DEBEN viajar en los feeds — las extensiones con espacio de nombres no los eximen.
Arreglo
Elimina el valor. Publica contact_available: true y deja que public_url lleve al lector a tu propia página.

Especificación

PII002errorL2Implementada

confirmed_by es un token de rol, nunca el nombre de una persona

Regla
confirmed_by ∈ team | volunteer | official_source | partner:{publisher_id}.
Arreglo
Reemplázalo por el rol que confirmó el lugar: team, volunteer, official_source o partner:{publisher_id}.

Especificación

PII003errorL2Implementada

El texto libre coincide con un patrón de datos personales

Regla
El texto libre es el tercer canal de fuga: los publicadores DEBEN limpiar datos personales de description y warning_text.
Arreglo
Quita el nombre y los datos de contacto del texto libre; enlaza con public_url.

Especificación

PII004errorL2Implementada

Aparece una entidad a nivel de persona

Regla
Los datos de personas no federan — es una prohibición de cruce, no una omisión de campos.
Arreglo
Elimínalo. El dominio de personas es solo enlace de salida a los canales oficiales.

Especificación

PII005warningL2Implementada

Un nombre de campo coincide con la lista de rechazo aunque el valor parezca limpio

Regla
Un campo nombrado para datos de contacto terminará por llevarlos.
Arreglo
Renombra o elimina el campo.

Especificación

PII006errorL2Implementada

Se republica una decisión de moderación sobre un tercero

Regla
Los veredictos de moderación no federan; los registros suprimidos se omiten, no se etiquetan aguas abajo.
Arreglo
Omite el registro en lugar de etiquetarlo.

Especificación

Comportamiento

BEH001errorL2Implementada

El feed responde en dos sondeos; el content-type se mantiene estable

Regla
Un feed que responde distinto en dos sondeos no se puede consumir de forma confiable.
Arreglo
Sirve el feed de forma determinista.

Especificación

BEH002errorL2Implementada

Siempre-ahora: last_updated avanza con el reloj del sondeo sobre contenido idéntico

Regla
last_updated DEBE generarse al construir/publicar, nunca por petición — una marca por petición es peor que no tener señal.
Arreglo
Sella last_updated cuando generas el feed y guárdalo; así los consumidores pueden detectar cambios reales.

Especificación

BEH003warningL2Implementada

last_updated más viejo que 7 × ttl (el estado de insignia obsoleta)

Regla
La obsolescencia es información, no fracaso — pero debe ser visible.
Arreglo
Regenera el feed, o sube ttl para describir tu cadencia real de actualización.

Especificación

BEH004warningL2Catalogada, todavía no implementada — Task 15

lastmod por fragmento presente (el patrón de sincronización incremental)

Regla
Un lastmod por fragmento es sincronización incremental funcionando a costo cero.
Arreglo
Publica un lastmod por fragmento para que los consumidores descarguen solo lo que cambió.

Especificación

BEH005errorL2Catalogada, todavía no implementada — Task 15

Los fragmentos declarados son alcanzables y consistentes con el sobre

Regla
Un fragmento declarado que no concuerda con sus hermanos rompe a todo consumidor que confíe en el manifiesto.
Arreglo
Haz que todos los fragmentos declarados sean alcanzables y consistentes con el sobre que los declara.

Especificación

Licencias

LIC001warningL2Implementada

La licencia declarada no es share-alike

Regla
Las licencias share-alike envenenan la agregación para los consumidores aguas abajo.
Arreglo
Prefiere una licencia permisiva (CC-BY-4.0, CC0-1.0) si no buscas esa restricción.

Especificación

LIC002infoL2Implementada

Cadena attribution presente, para que los agregadores la muestren

Regla
La atribución es un MUST de consumo; una cadena explícita facilita cumplirlo.
Arreglo
Agrega "attribution" con el crédito que quieres que se muestre.

Especificación

API de lectura

API001errorL3Catalogada, todavía no implementada — v0.2 (L3 checks — deferred from the walking skeleton)

La base de la API de lectura es alcanzable; la forma del sobre es idéntica a la del feed

Regla
Un esquema, cuatro transportes.
Arreglo
Sirve la API de lectura en la base declarada, con la misma forma de sobre que el feed estático.

Especificación

API002errorL3Catalogada, todavía no implementada — Task 15

Estático ≡ API: el mismo registro es compatible byte a byte desde ambas superficies

Regla
La regla de equivalencia es lo que permite que un esquema sirva cuatro transportes.
Arreglo
Devuelve registros compatibles byte a byte desde la API y desde el feed. Un consumidor no debe tener que saber cuál de los dos leyó.

Especificación

API003errorL3Catalogada, todavía no implementada — v0.2

Paginación por cursor ordenada sobre una secuencia del servidor, no sobre una marca de tiempo

Regla
Los cursores por marca de tiempo descartan en silencio los registros compuestos sin conexión que llegan tarde.
Arreglo
Pagina sobre una secuencia del lado del servidor en vez de una marca de tiempo. Las marcas de tiempo colisionan y se saltan registros.

Especificación

API004warningL3Catalogada, todavía no implementada — v0.2

Se aceptan los parámetros de consulta documentados

Regla
municipality, kind, bbox, updated_since, limit, cursor.
Arreglo
Acepta los parámetros de consulta documentados, o quítalos de la documentación.

Especificación

API005errorL3Catalogada, todavía no implementada — v0.2

CORS * en la API; sin autenticación para lecturas

Regla
Las lecturas son públicas por diseño.
Arreglo
Sirve la API con CORS * y sin autenticación para lecturas. Datos de interés público detrás de una llave no son públicos.

Especificación

API006infoL3Catalogada, todavía no implementada — v0.2

Consume al menos un feed de un par (en parte autodeclarado)

Regla
L3 exige consumir además de servir — el único requisito que un sondeo no puede medir del todo, así que se reporta como info con la limitación declarada.
Arreglo
Consume al menos un feed de un par. El nivel trata de interoperar, no solo de publicar.

Especificación

API de escritura

WRT001errorL4Catalogada, todavía no implementada — v0.2

POST acepta el sobre {source, external_id, place}

Regla
El sobre de escritura es fijo.
Arreglo
Acepta el sobre {source, external_id, place} en el POST.

Especificación

WRT002errorL4Catalogada, todavía no implementada — v0.2

Idempotencia en (source, external_id): un reenvío no duplica

Regla
Reenviar es un upsert de la contribución del propio emisor, nunca un duplicado.
Arreglo
Haz las escrituras idempotentes en (source, external_id). Un reenvío tras un tiempo agotado no debe crear un segundo registro.

Especificación

WRT003errorL4Catalogada, todavía no implementada — v0.2

409 ante un conflicto de id fuera del espacio del emisor

Regla
La disciplina de espacios de nombres se aplica en la frontera de escritura.
Arreglo
Devuelve 409 cuando un emisor intente escribir un id fuera de su propio espacio de nombres.

Especificación

WRT004errorL4Catalogada, todavía no implementada — v0.2

En modo auth:none se devuelve el estado de moderación y el límite de tasa es observable

Regla
Las escrituras abiertas REQUIRE mitigaciones: límite de tasa, cola de moderación y un estado devuelto en eco.
Arreglo
Devuelve en eco el estado de moderación y haz observable el límite de tasa, para que un emisor sin autenticar sepa qué pasó con su escritura.

Especificación

WRT005errorL4Catalogada, todavía no implementada — v0.2

Los registros republicados llevan source.source_id = el emisor original

Regla
La identidad del emisor viaja con el registro para siempre.
Arreglo
Conserva source.source_id como el emisor original al republicar. La atribución es lo que tiene que sobrevivir al salto.

Especificación