anchor.diff:          token <- Some config.["github.token"].AsText
           owner <- Some config.["github.owner"].AsText
           let repos = Some config.["github.repos"].AsText
  +        publicUri <- Some config.["public.uri"].AsText
  +        match publicUri with
  +        | None -> publicUri <- Some(this.Self.Uri.At("notify").AsPublicUri().ToString())
  +        | _ -> ()
           
           // Validate
  -        this.ValidateConfig("github.token", token)
  -        this.ValidateConfig("github.owner", owner)
  -        this.ValidateConfig("github.repos", repos)
  +        this.ValidateConfig "github.token" token
  +        this.ValidateConfig "github.owner" owner
  +        this.ValidateConfig "github.repos" repos
           
           // Use
           this.CreateWebHooks(repos.Value.Split(','))
  
positive.code: [<DreamServiceConfig("github.token", "string", "A Github's personal API access token")>]
  [<DreamServiceConfig("github.owner", "string", "The owner of the repos we want to watch")>]
  [<DreamServiceConfig("github.repos", "string", "Comma separated list of repos to watch")>]
  type PullRequestService() =
      inherit DreamService()
      let GITHUB_API = Plug.New(new XUri("https://api.github.com"))
      let mutable token = None
      let mutable owner = None
                  
      override this.Start(config : XDoc, container : ILifetimeScope, result : Result) =
          
  
negative.code:                 "")
          let hooks : JsonValue[] = JsonValue.Parse(GITHUB_API.At("repos", owner.Value, repo, "hooks").Get(auth).ToText()).AsArray()
          let isPullRequestEvent (events : JsonValue[]) = Seq.exists (fun (event : JsonValue) -> event.AsString() = "pull_request") events
          Seq.exists (fun (hook : JsonValue) -> isPullRequestEvent(hook?events.AsArray()) && hook?name.AsString() = "web" && hook?config?url.AsString() = publicUri.Value) hooks
          
      member this.CreateWebHook repo =
          let createHook =
  