I havn't looked at the details yet.
But points 1 and 2 sound sane.
Points 3 and 4 sound useful so long as the kind[^1] is right.
Point 5 would be a good improvement, the disconnect between the struct and the typedef was annoying. What happens with this if a declaration that has both the struct name and the typedef?
[^1]: using "kind" in the common type theory meaning of "classification system for types" eg "struct" "class" etc