It seems like we always need to specify a parent, but the Collaborator model won't error out if someone tries to create a new instance without a parent.  That seems error prone.

I don't think that there's a built-in way to enforce parenthood on an ndb Model, but two potential solutions:
1.  Use a pre-put-hook.  See https://developers.google.com/appengine/docs/python/ndb/modelclass#Model__pre_put_hook and https://developers.google.com/appengine/docs/python/ndb/entities#hooks for descriptions of how hooks work.  In particular, raising an exception in a pre-put-hook will make the put fail, so you might be able to use that to enforce the constraint that there must always be a parent.

2.  Define a factory function to create Collaborators.  The factory would have a required parent field (as well as any other fields for creating the objection.  It would essentially just be a wrapper around the Collaborator constructor, but because it has parent as a required argument, we could enforce that constraint.  To prevent other folks from calling the non-factory constructor, you should also rename Collaborator to _Collaborator (so that other modules won't lint if they try to initialize it directly rather than using the factory).

I don't have a preference between those two solutions.  If you don't want to do either of them now, feel free to just add a TODO to the module.