let run_coqide logs w proof =
    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   = Wpo.file_for_env w.po_env L_coq in
      let model = Wpo.coqc_for_model ~model:w.po_model in
      let dshare = Wp_parameters.get_share() in
      let wp_share = Format.sprintf "%s/wp.v" dshare in
      let args =
        match Wp_parameters.Script.get() with
          | fscript when Sys.file_exists fscript ->
              [|  "-I" ; denv ; proof; head; env; model; wp_share; fscript |]
          | _ ->
              [|  "-I" ; denv ; proof; head; env; model; wp_share |]
      in
      Logs.command logs "coqide" args ;
      Task.command "coqide" args
      >>? Logs.log_status logs
    in
    Task.sync coqidelock coqide >>=
      fun s ->
        if s <> 0 then Task.return Unknown
        else
          match Proof.parse_coqproof proof with
            | None ->
                Wp_parameters.feedback "No proof found" ;
                Task.return Unknown
            | Some script ->
                Wp_parameters.feedback "Check proof" ;
                Coq.coqc logs w (Some script) >>=
                  Task.call
                    (fun s ->
                       Proof.add_script gid [] script ;
                       if s=0 then Valid else Unknown)