# Verificaciones

Cada verificación del validador de Cabuya: identificador, severidad, nivel, la regla que aplica y cómo corregir un documento que falla. Anclajes estables.

Canonical: https://cabuya.org/es/developers/validator/checks
Language: es

## Verificaciones

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 Implementada.

Un identificador de verificación es permanente. Renombrar uno rompería el ciclo de corrección de todo agente que guardó el anterior, así que las verificaciones retiradas conservan su identificador y se marcan en vez de borrarse.

## Descubrimiento

### DSC001 — Manifiesto alcanzable por HTTPS como JSON

- Severidad: error · Nivel: L1 · Catalogada, todavía no implementada (Task 15 (behavioral probes))
- 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: https://cabuya.org/developers/spec/0.1/2-discovery#2-1

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

- Severidad: error · Nivel: L1 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/1-architecture#1-2

### DSC003 — robots.txt devuelve 200 text/plain

- Severidad: warning · Nivel: L1 · Catalogada, todavía no implementada (Task 15)
- 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: https://cabuya.org/developers/spec/0.1/1-architecture#1-2

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

- Severidad: warning · Nivel: L1 · Catalogada, todavía no implementada (Task 15)
- 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: https://cabuya.org/developers/spec/0.1/2-discovery#2-2

### DSC005 — El manifiesto valida contra manifest.schema.json

- Severidad: error · Nivel: L1 · Implementada
- Regla: El manifiesto DEBE conformar a su esquema.
- Arreglo: Corrige el manifiesto según el esquema publicado.
- Especificación: https://cabuya.org/developers/spec/0.1/2-discovery#2-1

### DSC006 — publisher.canonical_url coincide con la entrada del registro

- Severidad: error · Nivel: L1 · Catalogada, todavía no implementada (Task 15)
- 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: https://cabuya.org/developers/spec/0.1/2-discovery#2-4

### DSC007 — Toda feeds[].url es HTTPS absoluta y alcanzable

- Severidad: error · Nivel: L1 · Catalogada, todavía no implementada (Task 15)
- Regla: Los feeds declarados MUST resolver.
- Arreglo: Dale a cada feed una URL https absoluta que resuelva desde fuera de tu red.
- Especificación: https://cabuya.org/developers/spec/0.1/2-discovery#2-3

### DSC008 — crawl_policy_url resuelve

- Severidad: warning · Nivel: L1 · Catalogada, todavía no implementada (Task 15)
- 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: https://cabuya.org/developers/spec/0.1/2-discovery#2-4

### DSC009 — conformance_target no excede el nivel medido

- Severidad: error · Nivel: L1 · Catalogada, todavía no implementada (Task 13 (content side) + Task 15)
- 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: https://cabuya.org/developers/spec/0.1/8-versioning-and-conformance#8-3


## Sobre

### SCH001 — El documento no cumple con su esquema JSON publicado

- Severidad: error · Nivel: L2 · Implementada
- Regla: Todo feed y todo manifiesto DEBE validar contra su esquema versionado.
- Arreglo: Corrige el valor para que satisfaga el esquema.
- Especificación: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

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

- Severidad: error · Nivel: L2 · Implementada
- Regla: last_updated, ttl, version, publisher_id y license son OBLIGATORIOS en el envelope.
- Arreglo: Agrega el campo faltante al envelope.
- Especificación: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

### ENV002 — last_updated es RFC 3339 con desfase UTC

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

### ENV003 — license presente

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

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

- Severidad: warning · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

### ENV005 — permitted_use presente, con valores dentro del enum cerrado

- Severidad: warning · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

### ENV006 — version es una versión de la especificación soportada

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/8-versioning-and-conformance#8-1

### ENV007 — Access-Control-Allow-Origin: * presente

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

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

- Severidad: warning · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

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

- Severidad: warning · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

### ENV010 — Content-Type: application/json, UTF-8

- Severidad: info · Nivel: L2 · Implementada
- Regla: Higiene de transporte.
- Arreglo: Sirve el feed como `Content-Type: application/json; charset=utf-8`.
- Especificación: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1


## Registro

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

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/6-trust-and-verification#6-1

### REC002 — id sigue la forma {publisher_id}:{local_id}

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/5-identifiers#5-1

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

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/5-identifiers#5-1

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

- Severidad: error · Nivel: L2 · Implementada
- Regla: Un lugar que nadie puede ubicar no dirige a nadie.
- Arreglo: Agrega address_text, o lat y lon (ambos son RECOMENDADOS).
- Especificación: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

### REC005 — Ambas ubicaciones presentes (RECOMENDADO)

- Severidad: warning · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

### REC006 — public_url presente y absoluta

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/7-normative-exclusions#7-2

### REC007 — place_kind dentro del enum

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

### REC008 — municipality_code es un código DIVIPOLA válido

- Severidad: warning · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

### REC009 — source{} presente, con source_id

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/4-api-surface#4-3

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

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

### REC011 — Los campos name y status no se contradicen entre sí

- Severidad: warning · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

### REC012 — CR-1: updated_at no es un last_confirmed_at reutilizado

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/6-trust-and-verification#6-1

### REC013 — expires_at definido en los tipos de lugar temporales por naturaleza

- Severidad: warning · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/6-trust-and-verification#6-2

### REC014 — Las entradas de same_as son absolutas y de un solo salto

- Severidad: warning · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/5-identifiers#5-2

### REC015 — Los miembros desconocidos se conservan, nunca se rechazan

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/8-versioning-and-conformance#8-4

### REC016 — Las extensiones x_ llevan el espacio x_{publisher}_{field}

- Severidad: warning · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/8-versioning-and-conformance#8-4

### REC017 — Hay una base en es para las cadenas localizadas

- Severidad: warning · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

### REC018 — No hay id duplicado dentro de un mismo feed

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/5-identifiers#5-1


## Datos de persona

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

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/7-normative-exclusions#7-2

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

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/6-trust-and-verification#6-1

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

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/7-normative-exclusions#7-1

### PII004 — Aparece una entidad a nivel de persona

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/7-normative-exclusions#7-1

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

- Severidad: warning · Nivel: L2 · Implementada
- Regla: Un campo nombrado para datos de contacto terminará por llevarlos.
- Arreglo: Renombra o elimina el campo.
- Especificación: https://cabuya.org/developers/spec/0.1/7-normative-exclusions#7-2

### PII006 — Se republica una decisión de moderación sobre un tercero

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/7-normative-exclusions#7-3


## Comportamiento

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

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

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

- Severidad: error · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

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

- Severidad: warning · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/8-versioning-and-conformance#8-3

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

- Severidad: warning · Nivel: L2 · Catalogada, todavía no implementada (Task 15)
- 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: https://cabuya.org/developers/spec/0.1/4-api-surface#4-4

### BEH005 — Los fragmentos declarados son alcanzables y consistentes con el sobre

- Severidad: error · Nivel: L2 · Catalogada, todavía no implementada (Task 15)
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1


## API de lectura

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

- Severidad: error · Nivel: L3 · Catalogada, todavía no implementada (v0.2 (L3 checks — deferred from the walking skeleton))
- 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: https://cabuya.org/developers/spec/0.1/4-api-surface#4-1

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

- Severidad: error · Nivel: L3 · Catalogada, todavía no implementada (Task 15)
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-2

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

- Severidad: error · Nivel: L3 · Catalogada, todavía no implementada (v0.2)
- 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: https://cabuya.org/developers/spec/0.1/4-api-surface#4-1

### API004 — Se aceptan los parámetros de consulta documentados

- Severidad: warning · Nivel: L3 · Catalogada, todavía no implementada (v0.2)
- 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: https://cabuya.org/developers/spec/0.1/4-api-surface#4-1

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

- Severidad: error · Nivel: L3 · Catalogada, todavía no implementada (v0.2)
- 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: https://cabuya.org/developers/spec/0.1/4-api-surface#4-1

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

- Severidad: info · Nivel: L3 · Catalogada, todavía no implementada (v0.2)
- 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: https://cabuya.org/developers/spec/0.1/4-api-surface#4-3


## API de escritura

### WRT001 — POST acepta el sobre {source, external_id, place}

- Severidad: error · Nivel: L4 · Catalogada, todavía no implementada (v0.2)
- Regla: El sobre de escritura es fijo.
- Arreglo: Acepta el sobre {source, external_id, place} en el POST.
- Especificación: https://cabuya.org/developers/spec/0.1/4-api-surface#4-2

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

- Severidad: error · Nivel: L4 · Catalogada, todavía no implementada (v0.2)
- 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: https://cabuya.org/developers/spec/0.1/4-api-surface#4-2

### WRT003 — 409 ante un conflicto de id fuera del espacio del emisor

- Severidad: error · Nivel: L4 · Catalogada, todavía no implementada (v0.2)
- 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: https://cabuya.org/developers/spec/0.1/4-api-surface#4-2

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

- Severidad: error · Nivel: L4 · Catalogada, todavía no implementada (v0.2)
- 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: https://cabuya.org/developers/spec/0.1/4-api-surface#4-2

### WRT005 — Los registros republicados llevan source.source_id = el emisor original

- Severidad: error · Nivel: L4 · Catalogada, todavía no implementada (v0.2)
- 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: https://cabuya.org/developers/spec/0.1/4-api-surface#4-2


## Licencias

### LIC001 — La licencia declarada no es share-alike

- Severidad: warning · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/3-the-feed#3-1

### LIC002 — Cadena attribution presente, para que los agregadores la muestren

- Severidad: info · Nivel: L2 · Implementada
- 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: https://cabuya.org/developers/spec/0.1/4-api-surface#4-3


## Navegación del Sitio

- [Inicio](https://cabuya.org/es)
- [Especificación](https://cabuya.org/es/developers/spec)
- [Esquemas](https://cabuya.org/es/developers/schemas)
- [RFCs](https://cabuya.org/es/rfcs)
- [Cambios](https://cabuya.org/es/changelog)
- [Desarrolladores](https://cabuya.org/es/developers)
- [Registro](https://cabuya.org/es/registry)
- [Gobernanza](https://cabuya.org/es/governance)
- [Participar](https://cabuya.org/es/join)
- [GitHub](https://github.com/Cabuya)
- [Repositorio de la skill](https://github.com/Cabuya/cabuya-skill)
- [Registro fundacional](https://github.com/Cabuya/cabuya.org/tree/main/docs/context)
