Here are some of the decisions I made. I'm happy to reconsider any of these, but I wanted to just throw something out there useful as a starting point for discussions.
* If a node has natural children and also has aria-owns, the aria-owns children come last. Totally arbitrary but seems more useful than not allowing this. I don't think authors should depend on them coming last but I do think it should be allowed to do this if you don't care about the order.
* The order of aria-owns children is significant; you can use it to reorder the natural children of a node.
* It will not allow cycles. If you do author a cycle, you shouldn't count on consistent behavior; which nodes actually end up owned by other nodes within that cycle will be arbitrary and may change from one page load to another.
* It will not allow a node to own an ancestor of itself, whether part of a cycle or not.
* It ignores a node trying to own itself.
* If there are two elements with the same id, it will own whatever document.getElementById() returns.
* If two nodes try to own the same id, it's an author errors; it's arbitrary which one wins and may change from one page load to another.
Finally:
* It keeps track of ids that are referenced by aria-owns but whose ids haven't been found in the document. When an element appears in the document with an id or an element's id changes, it does a quick hash lookup to see if any elements with aria-owns need to be updated.
* The correct notifications are fired when a node gets reparented due to dynamically changing aria-owns.
I'm sure I missed something. Bug reports welcome!