darnit plan and darnit validate crash on openssf-baseline: controls mix level=None and int
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 45/100
Línea de trabajo
The crash is in cmd_plan in darnit/cli.py (around line 425, where by_level keys are sorted) and in the matching sort in darnit validate. Check how ControlConfig.level and tags.level are read, and FrameworkConfig.get_controls_by_level, before choosing a canonical source as framework-design.md should specify. Done means darnit plan and darnit validate run on openssf-baseline.toml without a TypeError, with None sorted last, and a test covers every shipped framework TOML.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
darnit plan and darnit validate crash on the shipped openssf-baseline framework (reproduced on main 06e905e).
$ darnit plan
File ".../darnit/cli.py", line 425, in cmd_plan
for level in sorted(by_level.keys()):
TypeError: '<' not supported between instances of 'int' and 'NoneType'
$ darnit validate packages/darnit-baseline/src/darnit_baseline/openssf-baseline.toml
logger.info(f" By level: {', '.join(f'L{k}={v}' for k, v in sorted(by_level.items()))}")
TypeError: '<' not supported between instances of 'int' and 'NoneType'
Cause: both commands group controls by ControlConfig.level. openssf-baseline declares levels in tags.level (tags = { level = 1, ... }), so 65 of its 66 controls have level = None. One control, STAGE1-REF-SECURITY-01, sets the top-level level, so the keys mix int and None and sorted() raises. darnit plan -f community-spec works because none of its controls set level.
Same root cause, no crash: FrameworkConfig.get_controls_by_level(n) filters on ControlConfig.level, so it returns nothing for the 65 baseline controls that use tags.level. It has no production caller today. The audit path reads the level some other way and is not affected; a fix should check that.
Suggested direction:
- Give a control's level one source. Either
ControlConfig.levelfalls back totags.level, or the shipped TOMLs move to the top-level field. The spec (framework-design.md) should say which one is canonical. - Make
planandvalidatesort withNonelast instead of crashing. - Add a test that runs
planandvalidateagainst every shipped framework TOML.
Found while removing dead code for #487 (#566).
Drafted with Claude Code; reviewed and posted by me.
- Lenguaje dominante
- Python
- Estrellas
- 22
- Forks
- 27
- Merge medio
- 1 d 20 h
- PR fusionados (30 d)
- 39
Preparar el entorno
- Sin Dockerfile ni 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 darnitdevorg/darnit
-
`darnit validate` crashes on openssf-baseline.toml summarising levelsPosiblemente ocupada @i-am-paradox la tomó hace 1 día. Abiertoneeds triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
darnitdevorg/darnit#589 ·
Los mantenedores suelen responder en 1 día
-
needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
darnitdevorg/darnit#587 ·
Los mantenedores suelen responder en 1 día
-
needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
darnitdevorg/darnit#585 ·
Los mantenedores suelen responder en 1 día
-
quality
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
darnitdevorg/darnit#523 ·
Los mantenedores suelen responder en 1 día
-
documentation good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
darnitdevorg/darnit#516 ·
Los mantenedores suelen responder en 1 día
Todos los issues de darnitdevorg/darnit
Issues similares
-
customer-reported question
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Azure/azure-sdk-for-python#49548 · 1 comentario · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
btclib-org/btclib-wallet#409 ·
Los mantenedores suelen responder en 1 día
-
Phase 2 PSA Capability & Career Profile
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
bcgov/digital-journeys#2310 ·
-
bug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
fastmachinelearning/hls4ml#1582 ·
Los mantenedores suelen responder en 3 días
-
Sort modelsAbiertoenhancement good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día