CLI: --kinds silently drops invalid values and falls through to defaults
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 88/100
Línea de trabajo
Empieza en crates/buzz-cli/src/commands/messages.rs, en cmd_get_messages, alrededor de las líneas 372-377, y ejecuta los comandos de reproducción de --kinds del issue. Se considera terminado cuando los valores con formato incorrecto producen un error de uso que indica el valor no válido, incluso cuando todos los valores son no válidos, mientras que los kinds válidos separados por comas se pasan sin recurrir a los valores predeterminados.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
markdown
buzz messages get --kinds "abc,9" silently drops invalid kind values and returns results only for the valid ones. A user who types --kinds "9,abc" (typo, or unfamiliar kind string) gets kind-9 results with no warning that "abc" was ignored. The same applies when ALL values are invalid — the empty parsed list falls through and the default kinds are used instead, which is the opposite of what the user asked for.
Steps to reproduce
1. Run buzz messages get --channel <uuid> --kinds "abc,9" --format json
2. Observe: results are returned (only kind 9), no error or warning about "abc"
3. Run buzz messages get --channel <uuid> --kinds "abc" --format json
4. Observe: returns ALL default kinds (9, 40002, 40008, 45001, 45003) because the parsed list is empty and the if !kind_list.is_empty() guard falls through, leaving the original default kinds in place
Expected behavior
- If any value in --kinds fails to parse as a number, the command should return an error (exit code 1) naming the invalid value: invalid kind value in --kinds: "abc".
- Alternatively, a warning on stderr for each dropped value, though an error is safer — silent data loss from malformed input violates the CLI's agent-first contract where agents cannot inspect stderr interactively.
Actual behavior
Invalid kind values are silently dropped by filter_map(|s| s.trim().parse().ok()). If ALL values are invalid, the empty list falls through and the default kinds are used instead — the user asked for specific kinds and got the default instead, with no indication.
Version and platform
- Buzz CLI: current main as of 2026-08-27
- OS: any
Logs / additional context
The relevant code is in crates/buzz-cli/src/commands/messages.rs, cmd_get_messages, lines 372-377:
rust
if let Some(k) = kinds {
let kind_list: Vec<u64> = k.split(',').filter_map(|s| s.trim().parse().ok()).collect();
if !kind_list.is_empty() {
filter["kinds"] = serde_json::json!(kind_list);
}
}
The filter_map(... .ok()) silently discards parse failures. The if !kind_list.is_empty() guard means an entirely-invalid --kinds value reverts to the default kind set — the user asked for specific kinds and got the default instead, with no indication.
Suggested fix
Replace filter_map with a fallible parse that returns CliError::Usage on the first invalid value:
rust
if let Some(k) = kinds {
let kind_list: Vec<u64> = k.split(',')
.map(|s| s.trim().parse::<u64>()
.map_err(|_| CliError::Usage(format!("invalid kind value in --kinds: {:?}", s.trim()))))
.collect::<Result<, >>()?;
filter["kinds"] = serde_json::json!(kind_list);
}
- Lenguaje dominante
- Rust
- Estrellas
- 35.3k
- Forks
- 4.7k
- Merge medio
- 2 d 15 h
- PR fusionados (30 d)
- 175
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de block/buzz
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 80/100
Los mantenedores suelen responder en 1 día
-
Mobile: opening an attachment names the file after the link text instead of the imeta filenamePosiblemente ocupada @wenhaoone la tomó hace 3 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100
Los mantenedores suelen responder en 1 día
-
Desktop: private project home channels show no lock icon in the sidebarPosiblemente ocupada @Bartok9 la tomó hace 4 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Los mantenedores suelen responder en 1 día
-
buzz-pair: panics on wss:// relays — rustls CryptoProvider never installedPosiblemente ocupada @Bartok9 la tomó hace 5 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 92/100
Los mantenedores suelen responder en 1 día
-
Desktop crashes on launch: undefined is not an object (evaluating 'e.participantPubkeys.map')Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
Los mantenedores suelen responder en 1 día
Todos los issues de block/buzz
Issues similares
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 80/100
Devolutions/picky-rs#546 · 1 comentario ·
Los mantenedores suelen responder en 3 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
zcashlabs/thus-spoke-zakura#153 ·
Los mantenedores suelen responder en 1 día
-
claude_code: step fails on session-scoped (`@inline`) plugins with `Invalid scope "session"`Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 79/100
topgrade-rs/topgrade#2395 ·
Los mantenedores suelen responder en 1 día
-
app bug windows-os
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
Los mantenedores suelen responder en 1 día