let make_goal prop_id process dsource =
    let collect = Datalib.Collector.push () in
    let p =
      try process ()
      with e -> 
        ignore (Datalib.Collector.pop collect) ;
        (* TODO : catch the exception here to not break the wp calculus *)
        raise e
    in
    let warns, depends = Datalib.Collector.pop collect in
    let id = incr dnode_cpt; !dnode_cpt in
    let dn = { 
      dn_id = id ;
      dn_warn = warns ;
      dn_depends = depends ;
      dn_source = dsource ; 
    } in {
      g_id = prop_id ;
      g_prop = p ; 
      g_descr = dn ;
    }