Initial Commit
add and set up PersistentStack
get CoreDataItemRepo tests to pass

- change target membership of source to 'source only'
- make all the class interfaces public (this isn't a good idea in the long run and should be fine-tuned)
make repository return unused IDs only

- add FetchRequest to CoreData model
- introduce GeneratesIntegerId protocol for the repository
- test that the repository tries to obtain a new ID if it's already taken
- add DebugPrintable to ItemId
stop capturing self in closures
get rid of needless 'unowned self's in lazy properties
add ItemManagementWindowController to show the actual window

- use ItemViewController for the window's list action
- add tests for ItemViewController to check Nib loading
- remove window from MainMenu Nib
- add XCTestCase+CocoaBindings
rename Cocoa Bindings helper to hasBinding(_,binding:,to:,throughKeyPath:)

Still looks weird. Maybe I should opt in to a NSObject extension to get object.hasBinding(_,to:,throughKeyPath:)
add items to the tree

I decided to make this example more interesting and switch to an outline view instead to deal with nested objects.

- use NSOutlineView instead of NSTable View
- replace ArrayController with TreeController
rearrange items upon insertion
enable adding items to boxes as leaves

- add items to boxes in selection
- verify auto-selection behavior of the TreeController
connect Add Box button
remove explicit bindings to fix NSOutlineView acting weirdly
add (failing!) functional test to verify the integration of components

- add ManagedBox and Box and CoreDataBoxRepository
- change Core Data model to include Box--Item connection
- add ServiceLocator for repository look-up
use application layer service to create Box objects into Core Data

- integrate UI event handling with Core Data in BoxAndItemService
- set up service in AppDelegate
- use HandlesItemListEvents in view controllers
- add EventHandlerStub for unit tests
make adding boxes functional test pass, add item addition test

- reset ServiceLocator in tests
- add Identifiable protocol to expose similarities between ID value types
- expose TreeNode implementations for test doubles
associate Box with ManagedBox during the ManagedBoxes lifetime

- fetched ManagedBox observes its corresponding Box using KVO
-
prepare populating the view with data via use cases

- add BoxData and ItemData DTOs
- introduce ManageBoxesAndItems use case to populate the view
- add functional test for view data population
- make BoxRepository responsible for Item ID generation
- make Item equatable to other items
- observe Box.items changes in ManagedBox and merge delta
- add ManagedEntity protocol
- resolve inf. recursion in AppDelegate
make save-on-quit work; view-populating, too
refactor code

- use map() instead of iterating manually
- set up windowController upon initialization