Style Guide — Docs de Trébol
Referencia única para escribir y revisar documentación. Citado por los skills de revisión automática en.claude/skills/.
Idioma y tono
- Idioma: español latam. No mezclar con inglés salvo términos técnicos sin equivalente común (
webhook,endpoint,request,response). - Persona: tutea al lector (“tú”), formal-cercano. Evita “usted” y evita coloquialismos.
- Tiempo verbal: presente del indicativo (“el endpoint devuelve…”, no “el endpoint devolverá…”).
- Voz: activa. Evita pasiva (“la verificación es creada por…” → “tú creas la verificación…”).
- Oraciones: cortas. Si una oración pasa de 25 palabras, divídela.
Títulos y encabezados
- Sentence case: solo la primera letra mayúscula y nombres propios. Ej.
## Crear una verificación, no## Crear Una Verificación. - Jerarquía: un solo
#por archivo (el frontmattertitlelo cubre). Usa##y###para secciones.
Naming de archivos
lowercase-con-guiones.mdx. Sin acentos en filename.- Refleja el path en
docs.json.
Naming en api-reference/openapi.yaml
- Fields/properties:
snake_case(ej.flow_id,friendly_name,key_people,client_item_type). - Contrato existente: conserva
triggeredSideEffectsen la respuesta dePUT /verification-items/{id}. El backend usa ese nombre; cambiarlo solo en la documentación rompería el contrato de los clientes. - operationId:
camelCasecon verbo + sustantivo (ej.crearNuevaVerificacion,obtenerEmpresaPorTag). Verbo en español. - Tags: español, sentence case (ej.
Creacion de Verificacion,Gestión de Webhooks). - Descriptions: español, no vacías. Una oración mínimo por field y por endpoint.
- Autoexplicativo: el nombre del field debe revelar su función sin abreviaturas opacas (
nm,data1,infoestán prohibidos). Si el dominio lo requiere (rfc,nit), agrega contexto endescription. - No duplicar significado: antes de crear
display_namerevisa si ya existefriendly_name. Antes decreated_daterevisacreated_at.- La regla prohíbe dos nombres para el mismo concepto, no dos nombres parecidos para conceptos distintos. Cuando la diferencia sea real pero no evidente, documéntala en la
descriptiondel schema y anótala aquí. - Excepción decidida (2026-09-01):
FindingsRunConflict.error_codeno se unifica conErrorResponse.code. No nombran lo mismo.codees la clase genérica del error (VALIDATION_ERROR,NOT_FOUND, enSCREAMING_SNAKE) y viaja en un cuerpo consuccess: false;error_codees la razón de dominio por la que una corrida no procede (pending_documents,recently_run, en minúsculas), en un cuerpo sinsuccess. Unificarlos obligaría a meter razones de dominio en el enum genérico, o a que un mismo field cargue dos vocabularios. Ademáserror_codeya es contrato vivo del backend. No volver a proponer el cambio sin cambiar también BV y la webapp.
- La regla prohíbe dos nombres para el mismo concepto, no dos nombres parecidos para conceptos distintos. Cuando la diferencia sea real pero no evidente, documéntala en la
Componentes Mintlify — qué usar y cuándo
Evita tablas markdown puras cuando un componente Mintlify expresa mejor la intención (sobre todo para fields de API →
<ParamField>).
DRY (no repitas información)
- Si un concepto se explica en >1 página, vive en una sola y las demás enlazan con
<Card>. - Cuando consolides páginas, agrega un
redirectendocs.jsonpara no romper enlaces externos. - Caso vivo a evitar: las “3 formas” (clasificación / validación / extracción) están explicadas en
producto/como-funciona.mdxy repetidas enguia-devs/crear-verificaciones/via-api/forma-*.mdx. Mantén la explicación conceptual en un solo lugar.
Ejemplos de código
- Usa siempre
<CodeGroup>con al menoscurl+ un cliente (JavaScript o Python). Tres es mejor. - Cada ejemplo debe ser ejecutable: incluye headers (
x-api-key), URL completa, payload válido. - Comenta los valores que el lector debe sustituir (
YOUR_API_KEY,verification_id).
Enlaces
- Internos: rutas relativas que matchean
docs.json(ej./guia-devs/conectarse, nohttps://docs.gotrebol.com/...). - Externos: HTTPS siempre.
- Antes de mergear, verifica que ningún enlace interno quede roto tras renombrar archivos.
Frontmatter de páginas
titleydescriptionsiempre presentes.description≤ 160 caracteres (SEO).
Commits y PRs
- Convencional commits con ticket (ya en
CRUSH.md):feat(TICKET-123): …. - Un PR por iniciativa. PRs gigantes son difíciles de revisar.