use :opts instead of partial, as partial makes reconciliation impossible (duh)
make comment-ch shared data instead of forwarding it all over the place
components store expanded state, instead of insane expanded-children state
opts are dead; pass a vector around as the app cursor