@@ -125,6 +125,54 @@ A `$source` is `(each ship term)`.
125125```
126126`term=@tas`
127127
128+```hoon
129+ %listen
130+ ~& [%jael-listen whos source]:tac
131+ %- curd =< abet
132+ (sources:~(feel su hen our now pki etn) [whos source]:tac)
133+```
134+
135+```hoon
136+++ su
137+ :: the ++su core handles all derived state,
138+ :: subscriptions, and actions.
139+ ::
140+ :: ++feed:su registers subscriptions.
141+ ::
142+ :: ++feel:su checks if a ++change should notify
143+ :: any subscribers.
144+ ::
145+```
146+
147+```hoon
148+ :: Change sources for ships
149+ ::
150+ ++ sources
151+ |= [whos=(set ship) =source]
152+ ^+ ..feel
153+ =^ =source-id this-su (get-source-id source)
154+ =. ..feed
155+ ?~ whos
156+ ..feed(default-source.etn source-id)
157+ =/ whol=(list ship) ~(tap in `(set ship)`whos)
158+ =. ship-sources.etn
159+ |- ^- (map ship ^source-id)
160+ ?~ whol
161+ ship-sources.etn
162+ (~(put by $(whol t.whol)) i.whol source-id)
163+ =. ship-sources-reverse.etn
164+ %- ~(gas ju ship-sources-reverse.etn)
165+ (turn whol |=(=ship [source-id ship]))
166+ ..feed
167+ ::
168+ ?: ?=(%& -.source)
169+ =/ send-message
170+ |= =message
171+ [hen %pass /public-keys %a %plea p.source %j /public-keys message]
172+ (emit (send-message %public-keys whos))
173+ (peer p.source whos)
174+ --
175+```
128176
129177#### Returns
130178