Investigation (Workflow trace of bundled ComfyUI frontend source) found three
real bugs in the previous regen:
1. widgets_values must be POSITIONAL — keep slots for widgets that have been
converted to input sockets. In frontend >=1.16 widgets and sockets coexist
(convertToInput is deprecated), so the widget object always stays in
node.widgets and its slot in widgets_values is never removed. Skipping
converted slots was the root cause of every shifted-value display
(prompt text appearing in model field, NaN in numeric fields, etc).
2. ShowText was registered as 'ShowText' but pythongosssss's pack actually
registers the class as 'ShowText|pysssss'. The bare name renders as a red
missing-node box. Generator now emits the correct registered name.
3. Node height formula re-derived from the bundled litegraph computeSize():
rows*20 + per-widget(20+4) + 8 trailing + 30 title + 6 footer, with
multiline STRING widgets reserving ~100px each.
Bonus fix: validator now checks every COMBO widget value is in its choices
list (caught 100+ recipe-author typos), and the generator auto-substitutes
invalid values with the best match (case-insensitive, prefix, substring,
numeric coercion) instead of shipping invalid values.