/-  *resource
/+  store=graph-store, graph, default-agent, verb, dbug, pull-hook
/+  agentio
~%  %graph-pull-hook-top  ..part  ~
|%
+$  card  card:agent:gall
++  config
  ^-  config:pull-hook
  :*  %graph-store
      update:store
      %graph-update
      %graph-push-hook
      3  3
      %.n
  ==
+$  state-nul  ~
+$  state-0    [%0 ~]
+$  versioned-state
  $%  state-0
  ==
--
::
%-  agent:dbug
%+  verb  |
^-  agent:gall
%-  (agent:pull-hook config)
^-  (pull-hook:pull-hook config)
=|  state-0
=*  state  -
|_  =bowl:gall
+*  this  .
    def   ~(. (default-agent this %|) bowl)
    dep   ~(. (default:pull-hook this config) bowl)
    gra   ~(. graph bowl)
    io    ~(. agentio bowl)
    pass  pass:io
::
++  on-init   on-init:def
++  on-save   !>(state)
++  on-load
  |=  =vase
  ?:  =(q.vase ~)
    :_  this
    (poke-self:pass kick+!>(%.y))^~
  `this
::
++  on-poke   on-poke:def
++  on-peek   on-peek:def
++  on-arvo   on-arvo:def
++  on-fail   on-fail:def
++  on-agent  on-agent:def
++  on-watch  on-watch:def
++  on-leave  on-leave:def
++  on-pull-nack
  |=  [=resource =tang]
  ^-  (quip card _this)
  %-  (slog leaf+"nacked {<resource>}" tang)
  :_  this
  ?.  (~(has in get-keys:gra) resource)  ~
  =-  [%pass /pull-nack %agent [our.bowl %graph-store] %poke %graph-update-3 -]~
  !>  ^-  update:store
  [now.bowl [%archive-graph resource]]
::
++  on-pull-kick
  |=  =resource
  ^-  (unit path)
  =/  maybe-time  (peek-update-log:gra resource)
  ?~  maybe-time  `/
  `/(scot %da u.maybe-time)
::
++  resource-for-update  resource-for-update:gra
--