anchor.diff:  
   [source,cypher]
   ----
  -CALL apoc.trigger.add('myTrigger', 
  -"UNWIND $deletedRelationships as deletedRel 
  -WITH apoc.trigger.toRelationship(deletedRel, $removedRelationshipProperties) AS deletedRel 
  -CREATE (r:Report {id: id(deletedRel), type: apoc.rel.type(deletedRel)}) 
  +CALL apoc.trigger.add('myTrigger',
  +"UNWIND $deletedRelationships as deletedRel
  +WITH apoc.trigger.toRelationship(deletedRel, $removedRelationshipProperties) AS deletedRel
  +CREATE (r:Report {id: id(deletedRel), type: apoc.rel.type(deletedRel)})
   WITH r, deletedRelset r+=apoc.any.properties(deletedRel)" ,
   {phase:'before'})
   ----
  
positive.code: Same thing regarding `assignedRelationshipProperties` and `removedRelationshipProperties`,
  with the only difference that instead of `node: NODE(n)` key, we'll have `relationship: RELATIONSHIP(n)`.
  
  For example, if we want to create a trigger that at every set, update 2 property "time" and "lasts" 
  with the current date and the property updated, we can do:
  
  [source,cypher]
  ----
  CALL apoc.trigger.add('setLastUpdate',
  'UNWIND keys($assignedNodeProperties) as k 
  UNWIND $assignedNodeProperties[k] AS map
  with map.node as node, collect(map.key) as propList
  match (n) where id(n) = id(node)
  where not "lasts" in propList               // to prevent loops
  SET n.time = date(),  n.lasts = propList', {phase:'afterAsync'});
  ----
  
  In the example above, we put `match (n) where id(n) = id(node)` to demonstrate that the we pull the node by id into parameters.
  Anyway, we can get rid off this one and change last row with `SET node.time = date(),  node.lasts = propList`.
  Note that we have to put the clause `where not "lasts" in propList` to prevent infinite cascade SET.
  
  Then, we can execute:
  [source,cypher]
  
negative.code:          old: 47,
           key: "age"
        }],
  
     surname: [{
           node: NODE(1),
           new: "Quinn",
  