We're starting to have a very advanced socket-based language
for defining nodes. It's very practical already.
The priorities are
1. All the nodes!
2. Sockets, including default values, as needed.
3. Library constants, mediums.
4. Output socket previews w/geonodes, geonodes structures.
5. Utilities including arrays (and selected array multi-input)
The code is still very spaghetti. This is very much still the
"first, make it run" part of the system design.
We're back down to a single working node, but this was a very practical
refactor.
In general, very good progress towards making #2 easy to fulfill in
its entirety.
Bugs remain:
- Category discovery has big code smells and needs smoothing. Blender
complains especially about wanting `_MT_` prefix/suffix on node
category submenu types. There's also a piece of registration logic in
category.py (big no no).
- I'd love to pass a `ruff`/`mypy` run before doubling down on node
creation, especially to help manage the complex pieces of MP logic.
- Still needs socket-bound unit-awareness feat. sympy units, before
doubling down on a data flow convention.
- Dependency management should also be smoothed out wrt. the user
experience, with cached directories exposed in addon preferences.