let run_coqide log w fgoal =
    let denv = Wp_parameters.get_output() in
    let gid = w.po_gid in 
    let coqide () =
      let head  = Wpo.file_for_head gid in
      let env   = file_for_env w.po_env L_coq in 
      let model = coqc_for_model ~model:w.po_model in 
      let args = 
        match Wp_parameters.Script.get() with 
          | fscript when Sys.file_exists fscript ->  
              [|  "-I" ; denv ; fgoal; head; env; model; fscript |]
          | _ ->
              [|  "-I" ; denv ; fgoal; head; env; model |]
      in
      Log.command log "coqide" args ;
      Task.command "coqide" args
      >>? Log.status log
    in
    Task.sync coqidelock coqide >>=
      fun s ->
        if s <> 0 then Task.return Unknown
        else 
          match Proof.parse_coqproof fgoal with 
            | None -> 
                Wp_parameters.feedback "No proof found" ;
                Task.return Unknown
            | Some script ->
                Wp_parameters.feedback "Check proof" ;
                Coq.coqc log w (Some script) >>=
                  Task.call 
                    (fun s ->
                       Proof.add_script gid [] script ;
                       if s=0 then Valid else Unknown)