cis-style · hub

kit v9 · f417275 · escritura

Escritura

33 reglas con id fijo, un linter que las detecta y un hook que bloquea las graves: toda la prosa en español del grupo (informes, docs, README, mails, UI copy) cumple la norma de core/prosa. Score objetivo: menos de 1,0 violaciones por 100 palabras y 0 bloqueantes.

Cita cada regla por su id (P01 a P37; la numeración tiene huecos: P08, P09, P24 y P36 no existen). El id sobrevive a las reescrituras de la norma; la cita por texto no.

La voz de la casa

La base es la guía de estilo de developers.google.com, adaptada al español del grupo: hablas con el lector de tú, en activa y en presente, y la cifra va primero. Cada hábito con su par incorrecto y correcto.

HábitoIncorrectoCorrecto
Segunda persona y túEl usuario debe ejecutar el script de carga.Ejecuta el script de carga.
Voz activa (P23)La tabla gold es generada por el ETL.El ETL genera la tabla gold.
Presente, no futuroEl comando devolverá un JSON.El comando devuelve un JSON.
Condición antes de la instrucciónUsa stop y start si cambiaste el EnvironmentFile.Si cambiaste el EnvironmentFile, usa stop y start.
Títulos en oración (P37)Guía de Estilo para la Escritura TécnicaGuía de estilo para la escritura técnica
Listas numeradas solo para pasos1. Ventajas  2. Riesgos  3. CostosViñetas para ideas sueltas; números solo cuando el orden importa.
La cifra primero (data-forward)El rendimiento mejoró considerablemente tras el ajuste.El p95 bajó de 900 a 210 ms tras el ajuste.
Español neutro, tú (P06)Fijate en el log y probá de nuevo.Revisa el log y prueba de nuevo.
Tildes y eñes siemprela migracion del analisisla migración del análisis
Cero em-dash (P05)v9 —ya publicada— incluye tokensv9, ya publicada, incluye tokens (digest f417275)
JUICIO · Lo que ningún script verifica lo aplica el revisor (sección Juicio de la norma). La cifra o el hecho van primero; la interpretación después. Si un párrafo repite lo ya dicho, uno de los dos sobra. Un tema por párrafo, con oración temática inicial. Si al quitar una oración no se pierde información, quítala.
0,3%error post-fix
210 msp95 actual

Data-forward también en la UI: el componente .stat pone la cifra en 28px mono y la etiqueta después. El párrafo que acompaña abre con el dato, no con el adjetivo.

<div class=stat>
  <span class=stat__value>0,3%</span>
  <span class=stat__label>error post-fix</span>
</div>

Reglas que bloquean (P01 a P07 y P33 a P35)

Tier bloquea: el hook detiene el Write/Edit del archivo. En el linter manual, --hook sale con código 2 si encuentra una. Cada regla con su tabla de dos columnas.

P01 · Muletillas IA · "cabe destacar", "es importante señalar", "en el marco de", "juega un papel", "hoy en día", "en aras de", "por medio de la presente". Si es importante, dilo primero; no lo anuncies.
IncorrectoCorrecto
Cabe destacar que el respaldo diario juega un papel fundamental en la operación.El respaldo corre a las 03:00 y pesa 1,2 GB. Sin él, la última copia buena se pierde en 14 días.
En el marco del proceso de modernización, hoy en día el sistema es más robusto.Desde la migración del 15 de agosto, el sistema conserva los respaldos automáticos.
<table class=table>
  <thead><tr><th class=th-mal>Incorrecto</th><th class=th-bien>Correcto</th></tr></thead>
  <tbody><tr><td>...</td><td>...</td></tr></tbody>
</table>
<!-- .table es del kit (base/components.css); th-mal/th-bien tiñen con var(--err)/var(--ok) -->

Las tablas que siguen reutilizan ese mismo patrón.

P02 · Antítesis retórica · "no es solo X, es Y", "más que un X, es un Y", "es un testimonio de". Afirma directo. La variante "no solo X sino también Y" es legítima pero la IA la agota: avisa.
IncorrectoCorrecto
No es solo un linter, es una filosofía de escritura.El linter detecta 33 reglas y bloquea 10.
P03 · Nominalización (= ETS 3.1) · El verbo directo reemplaza al sustantivo con verbo de apoyo.
IncorrectoCorrecto
Proceda a realizar la validación de los datos.Valida los datos.
El servicio tiene la capacidad de hacer uso del cache y de dar inicio al reintento.El servicio puede usar el cache e iniciar el reintento.
P04 · Marketing · "de vanguardia", "de clase mundial", "revolucionario", "disruptivo", "seamless". Muestra el dato (cifra, fecha, latencia) o elimina el adjetivo.
IncorrectoCorrecto
Una plataforma de vanguardia, robusta y sin fricciones.Responde en 40 ms al p95 y sirve 12 sitios desde un solo proceso.
P05 · Em-dash · Cero rayas largas en todo el copy del grupo (canon editorial). Usa "·", "y", "hasta", paréntesis o punto y oración nueva. Esta página no contiene ninguna: la celda incorrecta usa la entidad HTML.
IncorrectoCorrecto
El deploy —que tardó 3 minutos— salió bien.El deploy salió bien y tardó 3 minutos. · Deploy ok (3 min).
P06 · Voseo · Español neutro/tú: puedes, tienes, imprime. Nunca podés, tenés, imprimí.
IncorrectoCorrecto
Apretá el botón, fijate en el log y volvé a intentar.Aprieta el botón, revisa el log y vuelve a intentar.
P07 · Glosario: un significante, un significado (= ETS 1.12/1.15) · Cada concepto tiene UN término canónico; las variantes del .prosa.json están prohibidas. La rotación de sinónimos es el hábito número 1 del slop. Detalle en la sección Glosario.
IncorrectoCorrecto
El copago sube el gasto out-of-pocket; el pago compartido concentra el gasto OOP en crónicos.El copago sube el gasto de bolsillo y lo concentra en crónicos.
P33 · Gerundio analítico colgante (señal Wikipedia) · La conclusión cuelga de una coma y además es gerundio de posterioridad, incorrecto en español normativo. Punto y verbo conjugado.
IncorrectoCorrecto
El piloto llegó a 12 comunas, consolidando su posición como referente.El piloto llegó a 12 comunas. Es el despliegue más grande del año.
P34 · Coletilla valorativa (señal Wikipedia) · "..., lo que refleja/demuestra/subraya": corta en la coma. Si no se pierde ningún hecho, era opinión del modelo.
IncorrectoCorrecto
El error bajó a 0,3%, lo que demuestra la madurez del pipeline.El error bajó a 0,3%.
P35 · Residuo de chat (señal Wikipedia) · Texto pegado desde una conversación, no escrito para el documento.
IncorrectoCorrecto
¡Excelente pregunta! Espero que te sirva. ¿Quieres que profundice en [insertar cifra]?Se borra completo. Si al borrarlo queda un hueco, faltaba contenido, no cortesía.

Reglas que avisan (P10 a P23 y P37)

Tier avisa: el linter reporta y tú decides. Cuentan para el score (umbral 1,0 por 100 palabras) pero no detienen la edición.

P10 · Hedging apilado · Máximo un matiz por oración. Un "quizás" suelto es humano; el apilamiento es slop.
IncorrectoCorrecto
Quizás podría, en algunos casos, llegar a ser conveniente evaluar el cambio.El cambio conviene si el tráfico supera las 1.000 visitas diarias.
P13 · Burocratismo · "en virtud de", "a efectos de", "bajo apercibimiento". En prosa normal: "según", "para".
IncorrectoCorrecto
En virtud de lo anterior y a efectos de cumplir el plazo, se solicita la firma.Según lo anterior, firma antes del 30 para cumplir el plazo.
P15 · Meta-discurso · "el presente informe", "a lo largo de este documento", "como se mencionó", "en conclusión". El texto no habla de sí mismo.
IncorrectoCorrecto
El presente informe detalla los hallazgos que se describen más abajo.Dos hallazgos: el backup escribe 13 bytes desde el 17-ago y el timer corre cada 24 h, no cada 30 min.
P17 · Atribución vaga (weasel words) · "los expertos señalan", "estudios demuestran", "es ampliamente considerado". Cita la fuente o elimina la autoridad fantasma.
IncorrectoCorrecto
Los expertos señalan que el gasto público en medicamentos creció.DIPRES reporta un alza de 4,2% real en 2024.
P22 · Metáfora gastada (Orwell 1) · "la punta del iceberg", "tormenta perfecta", "enfrenta desafíos", "marcó un antes y un después", "dejó una huella imborrable", "sentó las bases para".
IncorrectoCorrecto
El bug era la punta del iceberg de una tormenta perfecta.El bug destapó otros 7 defectos en el mismo módulo.
P23 · Pasiva con agente (Orwell 4) · "fue elaborado por X": X elaboró.
IncorrectoCorrecto
El informe fue elaborado por el equipo de datos.El equipo de datos elaboró el informe.
P37 · Título en Title Case · En español solo la primera palabra y los nombres propios llevan mayúscula. Aplica a títulos de documentos, secciones y páginas de este hub.
IncorrectoCorrecto
Impacto de la Tecnología en la Salud PúblicaImpacto de la tecnología en la salud pública
Las demás del tier avisa · umbrales y detectores sin par de ejemplo porque la regla es un límite numérico o una lista.
IdReglaUmbral o detector
P11Oración largamás de 40 palabras (prosa) · 25 (estricto, ETS 5.1)
P12Párrafo largomás de 8 oraciones (prosa) · 6 (estricto)
P14Gerundio auxiliar"habiendo verificado", "siendo que"
P16Conectores de rellenodensidad sobre 1,5 por 100 palabras ("asimismo", "además", "en este sentido")
P18Muletillas leves"en la actualidad", "a nivel de", "de cara a"
P19Emoji en prosa formalseñal típica de texto generado
P20Norma personalregex propias del repo (clave frases del .prosa.json), con tier y mensaje
P21Palabra prohibidalista literal del repo (clave prohibidas)

Modo estricto (P25 a P32)

Para procedimientos, runbooks, mensajes de error y UI copy. Suma el régimen verbal del Español Técnico Simplificado: solo cinco formas verbales (infinitivo, infinitivo-imperativo, presente de indicativo en tercera persona, participio adjetival, futuro imperfecto en tercera persona) y tres perífrasis (está + participio, puede + infinitivo, debe + infinitivo). Tope: 25 palabras por oración y 6 oraciones por párrafo.

IdIncorrectoCorrecto
P25 · GerundioInstalando el panel, conectar el cable.Instalar el panel. Después, conectar el cable.
P26 · SubjuntivoLubricar según sea necesario.Lubricar cuando es necesario.
P27 · Tiempo compuestoCuando haya revisado el filtro, cerrarlo.Revisar el filtro. Después, cerrarlo.
P28 · Perífrasis no admitidaTiene que verificar el voltaje; va a instalar el sensor.Debe verificar el voltaje. Instalar el sensor.
P29 · Imperativo morfológicoExamine todo el sistema.Examinar todo el sistema.
P30 · Pasiva perifrásticaEl perno es apretado con la llave.Apretar el perno con la llave.
P31 · Punto y comaApretar el perno; revisar el torque.Apretar el perno. Revisar el torque.
P32 · CondicionalEl valor debería estar entre 3 y 5 V.El valor correcto está entre 3 y 5 V.
AVISOS DE SEGURIDAD (ETS 7.1-7.6) · PELIGRO = daño a personas · PRECAUCIÓN = daño al equipo · NOTA = información, nunca órdenes. La orden va primero y la explicación después.

Peligro  Cortar la energía antes de abrir el gabinete: los bornes quedan vivos 30 segundos.

Precaución  Detener el servicio antes de editar la config: un reload no re-lee el EnvironmentFile.

Nota  El registro quedó guardado (id 4.812).

<span class="badge badge--err">Peligro</span> Cortar la energía antes de abrir el gabinete: ...
<span class="badge badge--warn">Precaución</span> Detener el servicio antes de editar la config: ...
<span class="badge badge--ok">Nota</span> El registro quedó guardado (id 4.812).

Glosario de la casa (P07, P20 y P21)

No hay un glosario global: cada repo declara el suyo en su .prosa.json y el linter lo aplica como P07 (variantes), P20 (regex propias) y P21 (palabras prohibidas). El ejemplo de referencia es el perfil del informe de medicamentos.

Término canónicoVariantes prohibidasFuente
canastacesta · paquete de beneficiosprosa.example.json
copagoco-pago · pago compartidoprosa.example.json
gasto de bolsillogasto out-of-pocket · gasto OOPprosa.example.json
(sin reemplazo: se reescribe)apalancar · sinergiasprosa.example.json, clave prohibidas

Términos fijos de la estructura del grupo: úsalos con su significado técnico, no como sinónimos decorativos.

TérminoSignificado en la casa
marcaLa única clase con contabilidad propia y hoja de estilo propia.
productoHereda de su marca y nunca lleva CSS propio; si lo necesita, es que es marca.
auxiliarJamás es producto; no lo llames producto en un doc.
infraestructuraNo lleva marca ni namebrand.
·El separador editorial del grupo; reemplaza a la raya larga en listas y lockups.
// .prosa.json del repo (claves: modo, umbral, glosario, prohibidas, frases, desactivar)
{
  "modo": "prosa",
  "umbral": 1.0,
  "glosario": { "copago": ["co-pago", "pago compartido"] },
  "prohibidas": ["apalancar", "sinergias"],
  "frases": [ { "patron": "\\ba la brevedad\\b", "tier": "bloquea",
                "mensaje": "Di cuándo: fecha u hora concreta." } ]
}

Anti-reglas: lo que el linter no marca

Del catálogo Wikipedia con 25 años de ediciones: estas formas son más frecuentes en texto humano y castigarlas produce slop, no lo evita.

FormaPor qué se premia
Cópulas simples ("es", "son", "hay un")El tell de IA es evitarlas ("se configura como", "ostenta la condición de").
Un conector suelto ("Además,")Normal en prosa ensayística; solo cuenta la densidad (P16).
Un matiz suelto ("quizás", "suele")Humano; lo sospechoso es el apilamiento (P10).
Gramática perfecta, prosa formal, falta de citasNo son señales de nada.
Detectores automáticos (GPTZero y similares)No son criterio: el linter reporta "esta frase es formulaica", nunca "esto lo escribió una IA".

Cómo correr prosa-lint

El binario vive en /usr/local/bin/prosa-lint y acepta archivos o directorios. Estas son todas sus flags.

prosa-lint informe.md                  # reporte completo + score
prosa-lint --modo estricto runbook.md  # suma P25-P32 y baja los topes
prosa-lint --umbral 0.5 docs/          # score máximo aceptable (default 1.0)
prosa-lint --json archivo.md           # salida JSON para tooling
prosa-lint --texto "una frase"         # prueba rápida sin archivo
prosa-lint --hook archivo.md           # solo tier bloquea · exit 2 si hay
prosa-lint --stdin-json                # API: {"texto","modo","config"} por stdin
HOOK AUTOMÁTICO · Cada Write/Edit de .md/.txt/.tex/.html en español pasa por prosa-check.sh; el tier bloquea detiene la edición. Override puntual: comentario prosa-ok: <razón> en la misma línea. Dónde NO aplicar la norma: texto con voz deliberada (marketing con firma, ensayo personal) y texto legal de formato obligatorio.
PASE COMPLETO · La skill /prosa <archivo> corre la mecánica (linter) y además el juicio (data-forward, sin vueltas, terminología). Perfiles publicados: prosa.illanes00.cl (personal) y prosa.medicamentos.cochid.cl (informe medicamentos).

Fuentes