3 minutes of Robin's time yielded a fix to minicalendar bug #2364 that I narrowed down ages ago but that Jed didn't have time to fix.
Out of the box collections now can't be deleted, nor can their names be changed
As a side effect of the last change, the selection for tables was simplified and out of the box collections can now be distinguished from other collections. The table delegate can now control whether or not something is read only.
Fixed bug #2496: Clicking on an empty collection causes an exception
Narrowed down bug #2546: pressing shift should start editing a field in the table and checked in a workaround.
I spent most of my time narrowing down bugs related to ItemCollections, which turned out to be bugs in Query, the repository, and some unit tests. The vast majority of the bugs were caused by various snags resulting from the use of Python-only attributes on Items. As a result of what I learned I think we should never use Python-only attributes unless absolutely necessary. I also think we should not support onItemLoad and onItemCopy because setting attributes on Items in these routines is too buggy and the bugs are too difficult to fix -- mostly because of various chicken and egg initialization problems in the repository. A much better paradym for python only attributes -- if you absolutely need them -- is to implement a property for the python only attribute that does a "try" when accessing it, and if it fails, sets it's value and returns it. This avoids the need to use the repository which is error prone. Python only attributes have a host of other problem which probably should be documented.