i-have-adhd: respuestas legibles, adaptadores y evidencia
Lee el hook de i-have-adhd: marcadores, frontmatter y fallos silenciosos
Recorre ramas reales y catorce casos aislados, incluidos archivos vacíos y conservación de comandos OpenCode existentes.
Qué aprenderás
- Empieza por las salidas anticipadas
- Interpreta la expresión regular como un contrato
- Protege parte de la configuración, no toda interacción
Antes de empezar
- Conocimientos básicos de Git y terminal
- Distinguir comportamiento observado de afirmaciones no probadas
Explicar el mecanismo, preparar una prueba reversible e interpretar evidencia sin confundir estilo y corrección.
Conclusiones clave
- Salir correctamente e inyectar correctamente son aserciones diferentes.
- Eliminar frontmatter no valida YAML.
- Una prueba aprobada puede documentar un comportamiento poco deseable.
Empieza por las salidas anticipadas
Node determina el directorio de configuración y comprueba .i-have-adhd-always. Sin marcador termina correctamente sin salida. Si existe, resuelve la ruta de reglas respecto al script y vuelve a salir silenciosamente si falta el archivo. Por eso el estado del proceso no distingue una desactivación intencionada de una instalación incompleta.
Los fixtures crean un directorio temporal y reglas sintéticas, y lanzan el hook fijado sin modificar con CLAUDE_CONFIG_DIR limitado a ese directorio. Cubren ausencia de marcador, reglas ausentes, texto normal y frontmatter LF o CRLF. Se ejecuta JavaScript real del proyecto, pero no participa ningún anfitrión ni modelo.
Interpreta la expresión regular como un contrato
El patrón elimina un bloque de estilo YAML solo al principio y cuando encuentra un delimitador de cierre. Un fixture deliberadamente incompleto conserva el bloque inicial en vez de interpretarlo como metadatos. Es procesamiento de cadenas, no un validador general de YAML. La expresión final recorta saltos de línea sin interpretar las reglas.
Dos límites importan en operación: un archivo vacío todavía produce una cabecera de activación, y un cuerpo con normal mode se imprime en vez de desactivar. Ambos pasan las expectativas de nuestras pruebas; eso no significa que sean comportamientos ideales. Una cabecera es evidencia más débil que comprobar un cuerpo de reglas no vacío.
Protege parte de la configuración, no toda interacción
El hook de configuración OpenCode agrega su directorio solo si falta y conserva un comando previo con el mismo nombre. Lo invocamos dos veces y verificamos que no duplica la ruta ni sustituye el comando sintético del usuario. Otros casos cubren una lista de sistema vacía, reglas ausentes y un turno nuevo con marcador persistente.
La transformación añade contenido al último texto de sistema o crea una entrada si la lista está vacía. No interpreta una frase de parada ni borra el marcador. Probamos objetos de salida recién creados, no la mutación repetida del mismo objeto del anfitrión, y no verificamos garantías del ciclo OpenCode. Un informe de inyección repetida debe declarar ese límite.
Cómo elegir
| Criterio | Opción A | Opción B |
|---|---|---|
| Best when | You need predictable behavior and easy auditing | You need adaptive optimization and have reliable telemetry |
| Main risk | May leave performance on the table | Can become difficult to explain or debug |
Pasos de implementación
- 1
Sigue primero las ramas de marcador y archivo.
- 2
Comprueba texto emitido y estado del proceso.
- 3
Aísla entradas vacías o mal formadas.
- 4
Documenta lo que el fixture no cubre del anfitrión.
Ejemplo para copiar
// Patrón del hook inspeccionado: procesamiento de texto, no validación YAML.
const strip = text => text.replace(
/^---[^\S\r\n]*\r?\n[\s\S]*?\r?\n---[^\S\r\n]*(?:\r?\n|$)/, ""
);
console.log(strip("---\nname: demo\n---\nRULE"));Preguntas frecuentes
¿Se ejecutó una reimplementación?
No; se ejecutaron hook y adaptador fijados. Solo las reglas y objetos anfitriones son sintéticos.
¿El hook entiende frases de parada?
No; comprueba un marcador e imprime texto, no analiza el estado de una conversación.
Fuentes
- i-have-adhd / hooks/always-on.mjsFuente verificada 2026-09-12
- i-have-adhd / .opencode/plugins/i-have-adhd.mjsFuente verificada 2026-09-12
- i-have-adhd / skills/i-have-adhd/SKILL.mdFuente verificada 2026-09-12