Contrato de salida · agentic-qa-boilerplate
Dos capas gobiernan cada respuesta en el chat, cada una sobre una dimensión distinta. Esta página muestra el reparto y una sesión ficticia de QA renderizada en los dos estilos, para que la diferencia se vea en lugar de leerse.
Cada capa manda sobre una sola dimensión. Cuando dos capas reclaman la misma, se contradicen, y gana la que se reinyecta más veces por turno, no la que tiene razón. Ese era el problema de fondo.
| Capa | Dimensión | Dónde vive | Frecuencia |
|---|---|---|---|
| AGENTS.md §2manda | qué se dice, granularidad y registro | Butler + PM Voice + Visual Mapping | cada turno, vía hook nuevo |
| OUTPUT STYLE | cómo se ve y qué textura tiene | instrucciones de agente a nivel usuario (## OUTPUT STYLE), en cualquiera de los tres hosts |
al arrancar sesión |
backticks, tablas, espaciado) y la textura de las frases
(sin guión largo, longitud variable, sin recap final). Si una regla de ahí cambiara
qué se dice, la regla está mal puesta y pertenece a §2.
Ticket ficticio UPEX-482, login con 2FA. Mismo trabajo, misma información,
misma longitud aproximada. Solo cambia cómo llega.
Siete acciones, todas aplicadas y verificadas con bun run repo:check.
Tres bloques (dos de ellos positivos) en lugar de listas negras: no hay
BANNED VOCABULARY, BANNED PHRASES ni
BANNED RHETORICAL PATTERNS. Queda una micro-lista de palabras a evitar con
excepción de uso técnico literal, que es lo que permite escribir API key sin esquivarlo.
El formato canónico pasa de topic — fragment a topic: fragment.
La instrucción mandaba usar guión largo mientras la regla global lo prohibía, así que
ninguna corrección iba a funcionar mientras el ejemplo dijera lo contrario.
Se barrieron AGENTS.md y docs/ai-personality.md (ruta retirada; la página es docs/core/personalidad.html). El modelo imita
la densidad tipográfica que ve en sus propias instrucciones, y veía muchos guiones largos
contra una línea que los prohibía. El barrido de la fecha de este reporte los dejó en cero;
el estado actual lo dice una búsqueda en el archivo, no esta página.
La regla obligaba a abrir cada respuesta con una frase de enganche distinta cada vez. Teatro fabricado, y contradecía el rasgo anti-theatre de la propia personalidad. La pregunta de orientación del menú se queda: esa sí navega.
aplicadodocs/core/personalidad.html)Cinco puntos de deriva: rutas inexistentes de los hooks, 6-component
contra 7-COMPONENT, skills /sdd-* que no se instalan, y una descripción
del fichero global que listaba cosas que ese fichero nunca tuvo. Se añade la sección 3.7
documentando la capa nueva.
.agents/hooks/personality-reinject.mjs guarda el texto una sola vez y tres
adaptadores finos lo registran como UserPromptSubmit:
.claude/settings.json, .opencode/plugins/personality-reinject.js y
.codex/hooks.json. Sin él, PM Voice y Butler se leen una vez y se diluyen a lo largo
de la sesión: el problema era mecánico, no editorial. Cuesta unas decenas de
tokens por turno.