Ciertamente es arbitrario, pero es un poco ridículo tener que ejecutar discourse_theme desde una clonación local de discourse cuando la instancia de discourse que se está probando no es la instancia local.
De todos modos, he hecho lo que sugeriste, tanto en un codespace de GitHub recién creado como en mi propio entorno de desarrollo, y todavía lanza los mismos errores.
Leyendo todo el registro (o todos los que caben en el historial de la terminal), todos los directorios en los que falla son /node_modules/.pnpm. Probando y ejecutando discourse_theme contra otro TC que aún no se ha actualizado para usar pnpm en lugar de yarn, no veo ningún error, así que estoy casi 100% seguro de que el problema está en que observa .pnpm.
De Symlinked `node_modules` structure | pnpm, parece que la estructura normal de node_modules se conserva moviendo todo el código real a /node_modules/.pnpm y el resto de los directorios en /node_modules/ son solo enlaces simbólicos a .pnpm. Por lo tanto, ignorar .pnpm evita el error “¡el directorio ya está siendo observado!”.
He jugado un poco con la gema discourse_theme y he añadido listener.ignore /node_modules\\/\\.pnpm/ a watcher.rb, y parece que funciona bien sin ningún mensaje de error. Incluso detectó una nueva instalación de paquete pnpm.