From a9979925a011dface783ca284fc27e6fee73ae48 Mon Sep 17 00:00:00 2001 From: Hunter Miller Date: Tue, 19 Mar 2024 15:56:58 -0500 Subject: [PATCH 01/10] groups: only one event for role deletion --- desk/app/groups.hoon | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/desk/app/groups.hoon b/desk/app/groups.hoon index cf4660aa30..6a4c3af399 100644 --- a/desk/app/groups.hoon +++ b/desk/app/groups.hoon @@ -253,16 +253,21 @@ ++ verify-cabals (roll ~(tap by groups) verify-group-cabals) ++ verify-group-cabals |= [[=flag:g [* =group:g]] core=_cor] + =/ current-sects ~(key by cabals.group) =. core :: repair members as needed :: - %+ roll - ~(tap by fleet.group) - |= [[s=ship =vessel:fleet:g] cre=_core] - =/ diff (~(dif in sects.vessel) ~(key by cabals.group)) - ?: =(~(wyt in diff) 0) cre - =/ action [flag now.bowl %fleet (~(gas in *(set ship)) ~[s]) %del-sects diff] - cre(cards [[%pass /groups/role %agent [our.bowl dap.bowl] %poke [act:mar:g !>(action)]] cards.cre]) + =/ [affected=(set ship) old-sects=(set sect:g)] + %+ roll + ~(tap by fleet.group) + |= [[s=ship =vessel:fleet:g] [ships=(set ship) sects=(set sect:g)]] + :: traverse through each member to collect all old sects and the + :: ships which had them + =/ dif (~(dif in sects.vessel) current-sects) + :- ?:(=(~(wyt in dif) 0) ships (~(put in ships) s)) + (~(uni in sects) dif) + =/ action [flag now.bowl %fleet affected %del-sects old-sects] + (emit %pass /groups/role %agent [our.bowl dap.bowl] %poke [act:mar:g !>(action)]) %+ roll ~(tap by channels.group) |= [[=nest:g =channel:g] cr=_core] From 111879e8c918a5cb85d21f83598b1a90bde9d2da Mon Sep 17 00:00:00 2001 From: Hunter Miller Date: Tue, 19 Mar 2024 17:37:08 -0500 Subject: [PATCH 02/10] channels: dont try to subscribe to channels no longer in the group --- desk/app/channels.hoon | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/desk/app/channels.hoon b/desk/app/channels.hoon index d9d5688e04..3f0aa92bdc 100644 --- a/desk/app/channels.hoon +++ b/desk/app/channels.hoon @@ -767,11 +767,18 @@ :: ++ ca-has-sub ^- ? - (~(has by wex.bowl) [ca-sub-wire ship.nest dap.bowl]) + (~(has by wex.bowl) [ca-sub-wire ship.nest %channels-server]) :: ++ ca-safe-sub |= delay=? ?: ca-has-sub ca-core + =/ =flag:g group.perm.perm.channel + =/ =path + %+ weld + /(scot %p our.bowl)/groups/(scot %da now.bowl) + /groups/(scot %p p.flag)/[q.flag]/v1/group-ui + =+ .^(group=group-ui:g %gx path) + ?. (~(has by channels.group) nest) ca-core ?^ posts.channel (ca-start-updates delay) =. load.net.channel | %. delay From d774772175388bcee56686a679e2314b687d1a6d Mon Sep 17 00:00:00 2001 From: Hunter Miller Date: Wed, 20 Mar 2024 12:28:23 -0500 Subject: [PATCH 03/10] channels: better diff check Co-authored-by: fang --- desk/app/groups.hoon | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desk/app/groups.hoon b/desk/app/groups.hoon index 6a4c3af399..b4a7a2f974 100644 --- a/desk/app/groups.hoon +++ b/desk/app/groups.hoon @@ -264,7 +264,7 @@ :: traverse through each member to collect all old sects and the :: ships which had them =/ dif (~(dif in sects.vessel) current-sects) - :- ?:(=(~(wyt in dif) 0) ships (~(put in ships) s)) + :- ?:(=(~ dif) ships (~(put in ships) s)) (~(uni in sects) dif) =/ action [flag now.bowl %fleet affected %del-sects old-sects] (emit %pass /groups/role %agent [our.bowl dap.bowl] %poke [act:mar:g !>(action)]) From 32c24da79a8a32cd1ad936553d2876e981f4b75e Mon Sep 17 00:00:00 2001 From: Hunter Miller Date: Wed, 20 Mar 2024 12:28:51 -0500 Subject: [PATCH 04/10] channels: proper agent referencing Co-authored-by: fang --- desk/app/channels.hoon | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desk/app/channels.hoon b/desk/app/channels.hoon index 3f0aa92bdc..cf2d448253 100644 --- a/desk/app/channels.hoon +++ b/desk/app/channels.hoon @@ -767,7 +767,7 @@ :: ++ ca-has-sub ^- ? - (~(has by wex.bowl) [ca-sub-wire ship.nest %channels-server]) + (~(has by wex.bowl) [ca-sub-wire ship.nest server]) :: ++ ca-safe-sub |= delay=? From 4c72f7761d3ac8f566937cc65e624f17dcc48f2e Mon Sep 17 00:00:00 2001 From: Hunter Miller Date: Wed, 20 Mar 2024 14:08:27 -0500 Subject: [PATCH 05/10] channels: only filter channel not in group from recheck --- desk/app/channels.hoon | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/desk/app/channels.hoon b/desk/app/channels.hoon index 3f0aa92bdc..aab9b07e31 100644 --- a/desk/app/channels.hoon +++ b/desk/app/channels.hoon @@ -772,13 +772,6 @@ ++ ca-safe-sub |= delay=? ?: ca-has-sub ca-core - =/ =flag:g group.perm.perm.channel - =/ =path - %+ weld - /(scot %p our.bowl)/groups/(scot %da now.bowl) - /groups/(scot %p p.flag)/[q.flag]/v1/group-ui - =+ .^(group=group-ui:g %gx path) - ?. (~(has by channels.group) nest) ca-core ?^ posts.channel (ca-start-updates delay) =. load.net.channel | %. delay @@ -1871,6 +1864,17 @@ :: ++ ca-recheck |= sects=(set sect:g) + =/ =flag:g group.perm.perm.channel + =/ groups-prefix /(scot %p our.bowl)/groups/(scot %da now.bowl) + =/ exists-path (weld groups-prefix /exists/(scot %p p.flag)/[q.flag]) + =+ .^(exists=? %gx exists-path) + ?. exists ca-core + =/ =path + %+ weld + groups-prefix + /groups/(scot %p p.flag)/[q.flag]/v1/group-ui + =+ .^(group=group-ui:g %gx path) + ?. (~(has by channels.group) nest) ca-core :: if our read permissions restored, re-subscribe ?: (can-read:ca-perms our.bowl) (ca-safe-sub |) ca-core From 5e673cd125b94178388402272c8edb3ae676e071 Mon Sep 17 00:00:00 2001 From: Hunter Miller Date: Wed, 20 Mar 2024 19:34:16 -0500 Subject: [PATCH 06/10] groups: wrap permissions repair into core, remove one-off tool --- desk/app/groups.hoon | 111 +++++++++++++++++++++++-------------------- 1 file changed, 59 insertions(+), 52 deletions(-) diff --git a/desk/app/groups.hoon b/desk/app/groups.hoon index b4a7a2f974..13c1c2feb7 100644 --- a/desk/app/groups.hoon +++ b/desk/app/groups.hoon @@ -106,7 +106,6 @@ %noun ?+ q.vase !! %reset-all-perms reset-all-perms - %verify-cabals verify-cabals == :: %reset-group-perms @@ -250,46 +249,6 @@ [%pass wire %agent dock %poke cage] core :: -++ verify-cabals (roll ~(tap by groups) verify-group-cabals) -++ verify-group-cabals - |= [[=flag:g [* =group:g]] core=_cor] - =/ current-sects ~(key by cabals.group) - =. core - :: repair members as needed - :: - =/ [affected=(set ship) old-sects=(set sect:g)] - %+ roll - ~(tap by fleet.group) - |= [[s=ship =vessel:fleet:g] [ships=(set ship) sects=(set sect:g)]] - :: traverse through each member to collect all old sects and the - :: ships which had them - =/ dif (~(dif in sects.vessel) current-sects) - :- ?:(=(~ dif) ships (~(put in ships) s)) - (~(uni in sects) dif) - =/ action [flag now.bowl %fleet affected %del-sects old-sects] - (emit %pass /groups/role %agent [our.bowl dap.bowl] %poke [act:mar:g !>(action)]) - %+ roll - ~(tap by channels.group) - |= [[=nest:g =channel:g] cr=_core] - =. cr - :: repair readers as needed - :: - =/ readers (~(dif in readers.channel) ~(key by cabals.group)) - ?. (gth ~(wyt in readers) 0) cr - =/ action [flag now.bowl %channel nest %del-sects readers] - cr(cards [[%pass /groups/role %agent [our.bowl dap.bowl] %poke [act:mar:g !>(action)]] cards.cr]) - :: repair writers as needed - :: - =+ .^(has=? %gu (channel-scry nest)) - ?. has cr - =+ .^([writers=(set sect:g) *] %gx (welp (channel-scry nest) /perm/noun)) - =/ diff (~(dif in writers) ~(key by cabals.group)) - ?. (gth ~(wyt in diff) 0) cr - ?. ?=(?(%chat %heap %diary) p.nest) cr - =/ cmd=c-channels:d [%channel nest %del-writers diff] - =/ cage [%channel-command !>(cmd)] - cr(cards [[%pass /groups/role %agent [p.q.nest %channels-server] %poke cage] cards.cr]) -:: :: +load: load next state ++ load |= =vase @@ -304,7 +263,6 @@ %3 =. state old =. cor restore-missing-subs - =. cor (emit %pass /groups/role %agent [our.bowl dap.bowl] %poke noun+!>(%verify-cabals)) =. cor (watch-contact |) ?: =(okay:g cool) cor =. cor (emil (drop load:epos)) @@ -1501,10 +1459,51 @@ :: %del =. cabals.group (~(del by cabals.group) sect) - =. cor (verify-group-cabals [flag ~ group] cor) - go-core + go-repair-permissions == :: + ++ go-repair-permissions + =/ current-sects ~(key by cabals.group) + =. go-core + :: repair members as needed + :: + %- go-fleet-del-sects + %+ roll + ~(tap by fleet.group) + |= [[s=ship =vessel:fleet:g] [ships=(set ship) sects=(set sect:g)]] + :: traverse through each member to collect all old sects and the + :: ships which had them + =/ dif (~(dif in sects.vessel) current-sects) + :- ?:(=(~ dif) ships (~(put in ships) s)) + (~(uni in sects) dif) + go-core + :: =^ core=_go-core cor + :: %+ roll + :: ~(tap by channels.group) + :: |= [[=nest:g =channel:g] [gc=_go-core cr=_cor]] + :: =. gc + :: :: repair readers as needed + :: :: + :: =/ invalid-readers (~(dif in readers.channel) ~(key by cabals.group)) + :: ?~ readers gc + :: (go-channel-del-sects:gc nest invalid-readers) + :: :: repair writers as needed + :: :: + :: =+ .^(has=? %gu (channel-scry nest)) + :: ?. has [gc cr] + :: =+ .^([writers=(set sect:g) *] %gx (welp (channel-scry nest) /perm/noun)) + :: =/ diff (~(dif in writers) ~(key by cabals.group)) + :: ?: ?| =(diff ~) :: no writers to remove + :: !=(our.bowl p.q.nest) :: not host + :: !(?=(?(%chat %heap %diary) p.nest)) :: unsupported channel + :: == + :: [gc cr] + :: =/ cmd=c-channels:d [%channel nest %del-writers diff] + :: =/ cage [%channel-command !>(cmd)] + :: :- gc + :: cr(cards [[%pass /groups/role %agent [p.q.nest %channels-server] %poke cage] cards.cr]) + :: core + :: ++ go-fleet-update |= [ships=(set ship) =diff:fleet:g] ^+ go-core @@ -1643,13 +1642,17 @@ %del-sects ?> go-is-bloc ?: &(has-host (~(has in sects.diff) 'admin')) go-core - =. fleet.group + (go-fleet-del-sects ships sects.diff) + == + ++ go-fleet-del-sects + |= [ships=(set ship) sects=(set sect:g)] + =. fleet.group %- ~(urn by fleet.group) |= [=ship =vessel:fleet:g] ?. (~(has in ships) ship) vessel - vessel(sects (~(dif in sects.vessel) sects.diff)) + vessel(sects (~(dif in sects.vessel) sects)) go-core - == + :: ++ go-channel-update |= [ch=nest:g =diff:channel:g] ^+ go-core @@ -1689,11 +1692,7 @@ go-core :: %del-sects - =/ =channel:g (got:by-ch ch) - =. readers.channel (~(dif in readers.channel) sects.diff) - =. channels.group (put:by-ch ch channel) - :: TODO: revoke? - go-core + (go-channel-del-sects ch sects.diff) :: %zone ?. (has:by-ch ch) go-core @@ -1716,6 +1715,14 @@ =. channels.group (put:by-ch ch channel) go-core == + :: + ++ go-channel-del-sects + |= [ch=nest:g sects=(set sect:g)] + =/ =channel:g (~(got by channels.group) ch) + =. readers.channel (~(dif in readers.channel) sects) + =. channels.group (~(put by channels.group) ch channel) + go-core + :: ++ go-bump-zone |= [ch=nest:g =channel:g] =/ =zone:g zone.channel From 65fddcf6fe54695dabf8d610cca19dae6d70c9a1 Mon Sep 17 00:00:00 2001 From: Hunter Miller Date: Thu, 21 Mar 2024 11:04:39 -0500 Subject: [PATCH 07/10] groups: finish repair permissions --- desk/app/groups.hoon | 54 ++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/desk/app/groups.hoon b/desk/app/groups.hoon index 13c1c2feb7..a3d9feb81a 100644 --- a/desk/app/groups.hoon +++ b/desk/app/groups.hoon @@ -1476,33 +1476,33 @@ =/ dif (~(dif in sects.vessel) current-sects) :- ?:(=(~ dif) ships (~(put in ships) s)) (~(uni in sects) dif) - go-core - :: =^ core=_go-core cor - :: %+ roll - :: ~(tap by channels.group) - :: |= [[=nest:g =channel:g] [gc=_go-core cr=_cor]] - :: =. gc - :: :: repair readers as needed - :: :: - :: =/ invalid-readers (~(dif in readers.channel) ~(key by cabals.group)) - :: ?~ readers gc - :: (go-channel-del-sects:gc nest invalid-readers) - :: :: repair writers as needed - :: :: - :: =+ .^(has=? %gu (channel-scry nest)) - :: ?. has [gc cr] - :: =+ .^([writers=(set sect:g) *] %gx (welp (channel-scry nest) /perm/noun)) - :: =/ diff (~(dif in writers) ~(key by cabals.group)) - :: ?: ?| =(diff ~) :: no writers to remove - :: !=(our.bowl p.q.nest) :: not host - :: !(?=(?(%chat %heap %diary) p.nest)) :: unsupported channel - :: == - :: [gc cr] - :: =/ cmd=c-channels:d [%channel nest %del-writers diff] - :: =/ cage [%channel-command !>(cmd)] - :: :- gc - :: cr(cards [[%pass /groups/role %agent [p.q.nest %channels-server] %poke cage] cards.cr]) - :: core + =^ core=_go-core cor + %+ roll + ~(tap by channels.group) + |= [[=nest:g =channel:g] [gc=_go-core cr=_cor]] + =. gc + :: repair readers as needed + :: + =/ invalid-readers (~(dif in readers.channel) ~(key by cabals.group)) + ?~ invalid-readers gc + (go-channel-del-sects:gc nest invalid-readers) + :: repair writers as needed + :: + =+ .^(has=? %gu (channel-scry nest)) + ?. has [gc cr] + =+ .^([writers=(set sect:g) *] %gx (welp (channel-scry nest) /perm/noun)) + =/ diff=(set sect:g) (~(dif in writers) ~(key by cabals.group)) + :: unsupported channel + ?. ?=(?(%chat %heap %diary) p.nest) [gc cr] + :: no writers to remove + ?: =(diff ~) [gc cr] + :: not host + ?: !=(our.bowl p.q.nest) [gc cr] + =/ cmd=c-channels:d [%channel nest %del-writers diff] + =/ cage [%channel-command !>(cmd)] + :- gc + cr(cards [[%pass /groups/role %agent [p.q.nest %channels-server] %poke cage] cards.cr]) + core :: ++ go-fleet-update |= [ships=(set ship) =diff:fleet:g] From 2b4f9311948ad8a1d744329a9acdb6e879ca1768 Mon Sep 17 00:00:00 2001 From: Hunter Miller Date: Thu, 21 Mar 2024 14:43:56 -0500 Subject: [PATCH 08/10] groups: focus only on cabal being deleted --- desk/app/groups.hoon | 72 ++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 42 deletions(-) diff --git a/desk/app/groups.hoon b/desk/app/groups.hoon index a3d9feb81a..dda8eaf568 100644 --- a/desk/app/groups.hoon +++ b/desk/app/groups.hoon @@ -1459,50 +1459,38 @@ :: %del =. cabals.group (~(del by cabals.group) sect) - go-repair-permissions - == - :: - ++ go-repair-permissions - =/ current-sects ~(key by cabals.group) - =. go-core - :: repair members as needed - :: - %- go-fleet-del-sects - %+ roll - ~(tap by fleet.group) - |= [[s=ship =vessel:fleet:g] [ships=(set ship) sects=(set sect:g)]] - :: traverse through each member to collect all old sects and the - :: ships which had them - =/ dif (~(dif in sects.vessel) current-sects) - :- ?:(=(~ dif) ships (~(put in ships) s)) - (~(uni in sects) dif) - =^ core=_go-core cor - %+ roll - ~(tap by channels.group) - |= [[=nest:g =channel:g] [gc=_go-core cr=_cor]] - =. gc + =/ old-sect=(set sect:g) (sy sect ~) + =. go-core + :: remove from members as needed + :: + %- go-fleet-del-sects + :_ old-sect + %+ roll + ~(tap by fleet.group) + |= [[s=ship =vessel:fleet:g] ships=(set ship)] + ?. (~(has in sects.vessel) sect) ships + (~(put in ships) s) + =^ core=_go-core cor + %+ roll + ~(tap by channels.group) + |= [[=nest:g =channel:g] [gc=_go-core cr=_cor]] :: repair readers as needed :: - =/ invalid-readers (~(dif in readers.channel) ~(key by cabals.group)) - ?~ invalid-readers gc - (go-channel-del-sects:gc nest invalid-readers) - :: repair writers as needed - :: - =+ .^(has=? %gu (channel-scry nest)) - ?. has [gc cr] - =+ .^([writers=(set sect:g) *] %gx (welp (channel-scry nest) /perm/noun)) - =/ diff=(set sect:g) (~(dif in writers) ~(key by cabals.group)) - :: unsupported channel - ?. ?=(?(%chat %heap %diary) p.nest) [gc cr] - :: no writers to remove - ?: =(diff ~) [gc cr] - :: not host - ?: !=(our.bowl p.q.nest) [gc cr] - =/ cmd=c-channels:d [%channel nest %del-writers diff] - =/ cage [%channel-command !>(cmd)] - :- gc - cr(cards [[%pass /groups/role %agent [p.q.nest %channels-server] %poke cage] cards.cr]) - core + =. gc (go-channel-del-sects:gc nest old-sect) + :: repair writers as needed + :: + =+ .^(has=? %gu (channel-scry nest)) + ?. has [gc cr] + :: unsupported channel + ?. ?=(?(%chat %heap %diary) p.nest) [gc cr] + :: not host + ?: !=(our.bowl p.q.nest) [gc cr] + =/ cmd=c-channels:d [%channel nest %del-writers old-sect] + =/ cage [%channel-command !>(cmd)] + :- gc + cr(cards [[%pass /groups/role %agent [p.q.nest %channels-server] %poke cage] cards.cr]) + core + == :: ++ go-fleet-update |= [ships=(set ship) =diff:fleet:g] From 47741057bfbf1ab59306fb5cf32ef31a26552350 Mon Sep 17 00:00:00 2001 From: Hunter Miller Date: Mon, 25 Mar 2024 11:30:53 -0500 Subject: [PATCH 09/10] groups: del code cleanup --- desk/app/groups.hoon | 62 ++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 34 deletions(-) diff --git a/desk/app/groups.hoon b/desk/app/groups.hoon index dda8eaf568..83cd1232d5 100644 --- a/desk/app/groups.hoon +++ b/desk/app/groups.hoon @@ -1460,36 +1460,33 @@ %del =. cabals.group (~(del by cabals.group) sect) =/ old-sect=(set sect:g) (sy sect ~) - =. go-core + =. fleet.group :: remove from members as needed :: - %- go-fleet-del-sects - :_ old-sect - %+ roll - ~(tap by fleet.group) - |= [[s=ship =vessel:fleet:g] ships=(set ship)] - ?. (~(has in sects.vessel) sect) ships - (~(put in ships) s) - =^ core=_go-core cor - %+ roll - ~(tap by channels.group) - |= [[=nest:g =channel:g] [gc=_go-core cr=_cor]] - :: repair readers as needed - :: - =. gc (go-channel-del-sects:gc nest old-sect) - :: repair writers as needed - :: - =+ .^(has=? %gu (channel-scry nest)) - ?. has [gc cr] - :: unsupported channel - ?. ?=(?(%chat %heap %diary) p.nest) [gc cr] - :: not host - ?: !=(our.bowl p.q.nest) [gc cr] - =/ cmd=c-channels:d [%channel nest %del-writers old-sect] - =/ cage [%channel-command !>(cmd)] - :- gc - cr(cards [[%pass /groups/role %agent [p.q.nest %channels-server] %poke cage] cards.cr]) - core + %- ~(urn by fleet.group) + |= [* =vessel:fleet:g] + vessel(sects (~(dif in sects.vessel) sects)) + =/ channels ~(tap by channels.group) + |- + ?~ channels go-core + =/ [=nest:g =channel:g] i.channels + :: repair readers as needed + :: + =. go-core (go-channel-del-sects nest old-sect) + :: repair writers as needed + :: + =+ .^(has=? %gu (channel-scry nest)) + :: missing channel + ?. has $(channels t.channels) + :: unsupported channel + ?. ?=(?(%chat %heap %diary) p.nest) $(channels t.channels) + :: not host + ?: !=(our.bowl p.q.nest) $(channels t.channels) + =/ cmd=c-channels:d [%channel nest %del-writers old-sect] + =/ cage [%channel-command !>(cmd)] + =/ dock [p.q.nest %channels-server] + =. cor (emit %pass /groups/role %agent dock %poke cage) + $(channels t.channels) == :: ++ go-fleet-update @@ -1630,16 +1627,13 @@ %del-sects ?> go-is-bloc ?: &(has-host (~(has in sects.diff) 'admin')) go-core - (go-fleet-del-sects ships sects.diff) - == - ++ go-fleet-del-sects - |= [ships=(set ship) sects=(set sect:g)] - =. fleet.group + =. fleet.group %- ~(urn by fleet.group) |= [=ship =vessel:fleet:g] ?. (~(has in ships) ship) vessel - vessel(sects (~(dif in sects.vessel) sects)) + vessel(sects (~(dif in sects.vessel) sects.diff)) go-core + == :: ++ go-channel-update |= [ch=nest:g =diff:channel:g] From f456eb5876232517672c9fa1bf3b8781d7614067 Mon Sep 17 00:00:00 2001 From: Hunter Miller Date: Mon, 25 Mar 2024 11:52:07 -0500 Subject: [PATCH 10/10] groups: even more del cleanup --- desk/app/groups.hoon | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/desk/app/groups.hoon b/desk/app/groups.hoon index 83cd1232d5..de1ba3ed07 100644 --- a/desk/app/groups.hoon +++ b/desk/app/groups.hoon @@ -1465,10 +1465,11 @@ :: %- ~(urn by fleet.group) |= [* =vessel:fleet:g] - vessel(sects (~(dif in sects.vessel) sects)) + vessel(sects (~(dif in sects.vessel) old-sect)) =/ channels ~(tap by channels.group) |- ?~ channels go-core + =* next $(channels t.channels) =/ [=nest:g =channel:g] i.channels :: repair readers as needed :: @@ -1477,16 +1478,16 @@ :: =+ .^(has=? %gu (channel-scry nest)) :: missing channel - ?. has $(channels t.channels) + ?. has next :: unsupported channel - ?. ?=(?(%chat %heap %diary) p.nest) $(channels t.channels) + ?. ?=(?(%chat %heap %diary) p.nest) next :: not host - ?: !=(our.bowl p.q.nest) $(channels t.channels) + ?: !=(our.bowl p.q.nest) next =/ cmd=c-channels:d [%channel nest %del-writers old-sect] =/ cage [%channel-command !>(cmd)] =/ dock [p.q.nest %channels-server] =. cor (emit %pass /groups/role %agent dock %poke cage) - $(channels t.channels) + next == :: ++ go-fleet-update