/+  hall
::
=>  |%
    ++  move  (pair bone card)
    ++  card
      $%  {$peel wire dock mark path}
          {$poke wire dock $hall-command command:hall}
      ==
    --
::
=,  gall
|_  {hid/bowl connections/(set {app/term source/path station/knot})}
++  poke-noun
  |=  arg/*
  ^-  {(list move) _+>.$}
  ?:  ?=($list arg)
    (poke-pipe-list ~)
  =+  ((soft {$cancel app/term source/path station/knot}) arg)
  ?^  -
    (poke-pipe-cancel app.u source.u station.u)
  =+  ((hard {app/term source/path station/knot}) arg)
  (poke-pipe-connect app source station)
::
++  poke-pipe-list
  |=  $~
  ^-  {(list move) _+>.$}
  %-  %-  slog
      %+  turn  ~(tap in connections)
      |=  {app/term source/path station/knot}
      leaf+"{(trip app)}{<`path`source>} ---> {(trip station)}"
  [~ +>.$]
::
++  poke-pipe-cancel
  |=  {app/term source/path station/knot}
  ^-  {(list move) _+>.$}
  ?.  (~(has in connections) [app source station])
    %-  %-  slog  :~
          leaf+"no connection:"
          leaf+"{(trip app)}{<`path`source>} ---> {(trip station)}"
        ==
    [~ +>.$]
  %-  %-  slog  :~
        leaf+"canceling:"
        leaf+"{(trip app)}{<`path`source>} ---> {(trip station)}"
      ==
  [~ +>.$(connections (~(del in connections) [app source station]))]
::
++  poke-pipe-connect
  |=  {app/term source/path station/knot}
  ^-  {(list move) _+>.$}
  :_  +>.$(connections (~(put in connections) [app source station]))
  :_  ~
  ~&  [%peeling app source station]
  :*  ost.hid  %peel  [%subscribe app station source]
      [our.hid app]  %hall-speeches  source
  ==
::
++  diff-hall-speeches
  |=  {way/wire speeches/(list speech:hall)}
  ^-  {(list move) _+>.$}
  ?>  ?=({$subscribe @ @ *} way)
  =+  app=(slav %tas i.t.way)
  =+  station=i.t.t.way
  =+  source=t.t.t.way
  ?.  (~(has in connections) [app source station])
    %-  %-  slog  :~
          leaf+"pipe dropping:"
          leaf+"{(trip app)}{<`path`source>} ---> {(trip station)}"
        ==
    [~ +>.$]
  :_  +>.$  :_  ~
  :*  ost.hid  %poke  [%relay app station source]
      [our.hid %hall]  %hall-command
      %publish
      |-  ^-  (list thought:hall)
      ?~  speeches
        ~
      :_  $(speeches t.speeches, eny.hid (shax (cat 3 %pipe eny.hid)))
      :*  `@uvH`(end (sub 'H' 'A') 1 eny.hid)
          [[[%& our.hid station] *envelope:hall %pending] ~ ~]
          now.hid  *(set flavor:hall)  i.speeches
      ==
  ==
::
++  coup-relay
  |=  {way/wire saw/(unit tang)}
  ^-  {(list move) _+>.$}
  ?>  ?=({@ @ @ *} way)
  ?~  saw
    [~ +>.$]
  %-  (slog leaf+"pipe relay failure in:" >way< u.saw)
  [~ +>.$]
--