scaffold-setup-skill.py: regenerating from the existing setup skill wipes module.yaml/help CSV; module name with ':' produces invalid frontmatter

Abierto Apto para principiantes
#121 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
79/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python
Área
cli, tooling

Línea de trabajo

Empieza con skills/bmad-module-builder/scripts/scaffold-setup-skill.py y sigue cuándo lee las fuentes YAML y CSV, elimina el destino y escribe el frontmatter generado. Comprueba cómo se gestionan los nombres y códigos de los módulos y, después, ejecuta los pasos de reproducción del issue para verificar que los archivos fuente sobreviven a la regeneración y que un nombre que contiene : produce YAML válido. El trabajo estará completo cuando ambos casos funcionen y los códigos de módulo no válidos se rechacen antes de realizar cambios en el sistema de archivos.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Describe the bug

skills/bmad-module-builder/scripts/scaffold-setup-skill.py has two defects.

1. Silent data loss on regenerate. The script checks that --module-yaml / --module-csv exist, then runs shutil.rmtree(target) and copytree(template), and only then reads the sources. If the sources live inside the existing <code>-setup/assets/ (the natural "update my module" path), the template copy overwrites them first. The script then writes the empty template back and reports status: success.

2. Invalid YAML in the generated SKILL.md. --module-name is pasted raw into an unquoted description:. A name with : (e.g. Acme: QA Tools) yields frontmatter that yaml.safe_load rejects. --module-code is also used unvalidated as a path segment right before rmtree.

Steps to reproduce

mkdir skills
cp <bmb>/skills/bmad-bmb-setup/assets/module.yaml m.yaml
cp <bmb>/skills/bmad-bmb-setup/assets/module-help.csv m.csv
S=<bmb>/skills/bmad-module-builder/scripts/scaffold-setup-skill.py
python3 $S --target-dir skills --module-code abc --module-name ABC --module-yaml m.yaml --module-csv m.csv
head -1 skills/abc-setup/assets/module.yaml        # code: bmb ; CSV has 10 lines
python3 $S --target-dir skills --module-code abc --module-name ABC \
  --module-yaml skills/abc-setup/assets/module.yaml --module-csv skills/abc-setup/assets/module-help.csv
head -3 skills/abc-setup/assets/module.yaml        # code: / name: "" / description: ""  ; CSV now 1 line
rm -rf skills/abc-setup
python3 $S --target-dir skills --module-code abc --module-name "Acme: QA Tools" --module-yaml m.yaml --module-csv m.csv
# description: Sets up Acme: QA Tools module ...  -> yaml ScannerError: mapping values are not allowed here

Expected behavior

  • Read --module-yaml / --module-csv into memory before deleting anything. Or refuse sources located under the target, or build in a temp dir and swap.
  • Quote or escape substituted values in frontmatter, e.g. emit the description through json.dumps, which is valid YAML.
  • Validate --module-code (e.g. ^[a-z0-9][a-z0-9-]*$) before using it as a path.

Environment

  • Model(s) used: n/a (deterministic script)
  • Agentic IDE used: n/a (scripts run directly)
  • BMad version: bmad-builder main @ d4a921c (v2.2.2 + #118)
  • Project language: Python 3.13, Linux
Lenguaje dominante
Python
Estrellas
220
Forks
54
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de bmad-code-org/bmad-builder

Todos los issues de bmad-code-org/bmad-builder

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.