Ah, when I referred to using a plist, I meant in sketching component properties I put these properties in the plist as an implementation detail. So I think
(defmacro symbols2ecs (symbols) `(ecs:make-object ',(loop for symbol in symbols for key = (intern (symbol-name symbol) :keyword) for plist = (symbol-plist symbol) collect (cons key plist))))
Ends up with your spec for me ;p sorry for thinking out loud. I see it's been tested on ECL, I'll figure out why mine wasn't working.