# Legend -> outbound edges <- inbound edges # Layer Key: "layer:" + Hash(id) -> is = "layer" -> id -> parent (my ancestor is) -> os -> adds* -> removes* -> engineVersion <- parent* (is ancestor of) # Package Key: "package:" + Hash(os + ":" + name + ":" + version) -> is = "package" -> os -> name -> version -> nextVersion <- nextVersion <- adds* <- removes* <- fixed_in* Packages are organized in linked lists : there is one linked list for one os/name couple. Each linked list has a tail and a head with special versions. # Vulnerability Key: "vulnerability:" + Hash(name) -> is = "vulnerability" -> name -> priority -> link -> fixed_in* # Notification Key: "notification:" + random uuid -> is = "notification" -> type -> data -> isSent # Flag Key: "flag:" + name -> value # Lock Key: name -> locked = "locked" -> locked_until (timestamp) -> locked_by A lock can be used to lock a specific graph node by using the node Key as the lock name.