 
     open var trackingStack=[(result:Any?, context:Consignable)]()
 
-    // MARK : - new User facility
+    // MARK : -  Entity factories
 
     /**
     * Creates a new user

        }
    }

    // MARK: - OSX specific

 #if os(OSX) && !USE_EMBEDDED_MODULES

    // MARK: KVO


    override open func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        guard context == &_KVOContext else {
            // If the context does not match, this message
            // must be intended for our superclass.
            super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
            return
        }
        // We prefer to centralize the KVO for selection indexes at the top level
        if let keyPath = keyPath, let object = object {

                    
            if keyPath=="selectionIndexes" && self.blocksArrayController == object as? NSArrayController {
                if let blocks = self.blocksArrayController?.selectedObjects as? [Block] {
                     if let selectedBlock = self.selectedBlocks{
                        if selectedBlock == blocks{
                            return // No changes
                        }
                     }
                    self.selectedBlocks=blocks
                }
                return
            }
            
            
            if keyPath=="selectionIndexes" && self.boxesArrayController == object as? NSArrayController {
                if let boxes = self.boxesArrayController?.selectedObjects as? [Box] {
                     if let selectedBox = self.selectedBoxes{
                        if selectedBox == boxes{
                            return // No changes
                        }
                     }
                    self.selectedBoxes=boxes
                }
                return
            }
            
            
            if keyPath=="selectionIndexes" && self.lockersArrayController == object as? NSArrayController {
                if let lockers = self.lockersArrayController?.selectedObjects as? [Locker] {
                     if let selectedLocker = self.selectedLockers{
                        if selectedLocker == lockers{
                            return // No changes
                        }
                     }
                    self.selectedLockers=lockers
                }
                return
            }
            
            
            if keyPath=="selectionIndexes" && self.nodesArrayController == object as? NSArrayController {
                if let nodes = self.nodesArrayController?.selectedObjects as? [Node] {
                     if let selectedNode = self.selectedNodes{
                        if selectedNode == nodes{
                            return // No changes
                        }
                     }
                    self.selectedNodes=nodes
                }
                return
            }
            
            
            if keyPath=="selectionIndexes" && self.pushOperationsArrayController == object as? NSArrayController {
                if let pushOperations = self.pushOperationsArrayController?.selectedObjects as? [PushOperation] {
                     if let selectedPushOperation = self.selectedPushOperations{
                        if selectedPushOperation == pushOperations{
                            return // No changes
                        }
                     }
                    self.selectedPushOperations=pushOperations
                }
                return
            }
            
            
            if keyPath=="selectionIndexes" && self.usersArrayController == object as? NSArrayController {
                if let users = self.usersArrayController?.selectedObjects as? [User] {
                     if let selectedUser = self.selectedUsers{
                        if selectedUser == users{
                            return // No changes
                        }
                     }
                    self.selectedUsers=users
                }
                return
            }
            
        }

    }

    // MARK:  Delete currently selected items
        open func deleteSelectedBlocks() {
        // you should override this method if you want to cascade the deletion(s)
        if let selected=self.selectedBlocks{
            for item in selected{
                 self.blocks.removeObject(item, commit:true)
            }
        }
    }
        
    open func deleteSelectedBoxes() {
        // you should override this method if you want to cascade the deletion(s)
        if let selected=self.selectedBoxes{
            for item in selected{
                 self.boxes.removeObject(item, commit:true)
            }
        }
    }
        
    open func deleteSelectedLockers() {
        // you should override this method if you want to cascade the deletion(s)
        if let selected=self.selectedLockers{
            for item in selected{
                 self.lockers.removeObject(item, commit:true)
            }
        }
    }
        
    open func deleteSelectedNodes() {
        // you should override this method if you want to cascade the deletion(s)
        if let selected=self.selectedNodes{
            for item in selected{
                 self.nodes.removeObject(item, commit:true)
            }
        }
    }
        
    open func deleteSelectedPushOperations() {
        // you should override this method if you want to cascade the deletion(s)
        if let selected=self.selectedPushOperations{
            for item in selected{
                 self.pushOperations.removeObject(item, commit:true)
            }
        }
    }
        
    open func deleteSelectedUsers() {
        // you should override this method if you want to cascade the deletion(s)
        if let selected=self.selectedUsers{
            for item in selected{
                 self.users.removeObject(item, commit:true)
            }
        }
    }
        
#else


#endif

    
    /**

    }

    // MARK: - Collection Controllers

    // The initial instances are proxies
    // On document deserialization the collection are populated.
