anchor.diff:  So you might define a resolver like this:
   
   ```
  -(defresolver `person-resolver
  +(pc/defresolver person-resolver [{:keys [database] :as env} {:keys [person/id]}]
     {::pc/input #{:person/id}
      ::pc/output [:person/first-name :person/age]}
  -  (fn [{:keys [database] :as env} {:keys [person/id]}]
  -    (let [person (my-database/get-person database id)]
  -      {:person/age (:age person)
  -       :person/first-name (:first-name person)})))
  -```
  +  (let [person (my-database/get-person database id)]
  +    {:person/age        (:age person)
  +     :person/first-name (:first-name person)}))
  +```
  +
  +TIP: If you use Cursive, you can ask it to resolve the `pc/defresolver` as a `defn` and you will get proper symbol resolution
   
   Where the `database` in the environment would be supplied when running the parser, and the input would have to be
   found in the current context.  Remember that graph queries are contextual...you have to have a starting node to work
  
positive.code: 
  === Async mutations
  
  If we need async support, connect mutations are ready for it. Instead of using the `p/mutate` method, switch to `p/mutate-async`.
  
  Example:
  
  
negative.code: === Plugins with resolvers
  
  It's also possible for plugins to declare resolvers and mutations so they get installed
  when the plugin is used. To do that your plugin must provide the `::pc/register` key
  on the plugin map, and you also need to use the `pc/connect-plugin`, this plugin will
  make the instalation, here is an example:
  
  