From d00730498cdae36c47027fcfa45e482571884fad Mon Sep 17 00:00:00 2001 From: fang Date: Wed, 1 Apr 2026 23:22:26 +0200 Subject: [PATCH 01/20] guardian: poc, wip, rfc --- desk/app/chat.hoon | 196 ++++++++++++++++---------------- desk/lib/guardian.hoon | 246 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 349 insertions(+), 93 deletions(-) create mode 100644 desk/lib/guardian.hoon diff --git a/desk/app/chat.hoon b/desk/app/chat.hoon index fbeb5401a3..d9618b3544 100644 --- a/desk/app/chat.hoon +++ b/desk/app/chat.hoon @@ -2,6 +2,7 @@ /- u=ui, e=epic, a=activity, s=story, meta /- contacts /+ default-agent, verb, dbug, + guardian, neg=negotiate, discipline, logs, em=emojimart /+ pac=dm @@ -237,7 +238,8 @@ ^- agent:gall => |% - +$ card card:agent:gall + +$ card card:guardian + +$ rail rail:guardian ++ okay `epic:e`1 ++ wood-state ^- state:wood-lib @@ -272,6 +274,7 @@ log ~(. logs [our.bowl /logs]) cor ~(. +> [bowl ~]) ++ on-init + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:init:cor @@ -280,6 +283,7 @@ ++ on-save !>([state okay]) ++ on-load |= =vase + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(load:cor vase) @@ -287,12 +291,14 @@ :: ++ on-poke |= [=mark =vase] + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(poke:cor mark vase) [cards this] ++ on-watch |= =path + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(watch:cor path) @@ -303,18 +309,20 @@ ++ on-leave on-leave:def ++ on-fail |= [=term =tang] - ^- (quip card _this) + ^- (quip card:agent:gall _this) :_ this [(fail:log term tang ~)]~ :: ++ on-agent |= [=wire =sign:agent:gall] + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(agent:cor wire sign) [cards this] ++ on-arvo |= [=wire sign=sign-arvo] + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) @@ -325,11 +333,13 @@ log ~(. logs [our.bowl /logs]) ol (kol gte) log ~(. logs [our.bowl /logs]) + tell-log (cork tell:log exit:guardian) + fail-log (cork fail:log exit:guardian) ++ abet [(flop cards) state] ++ cor . ++ emit |=(=card cor(cards [card cards])) ++ emil |=(caz=(list card) cor(cards (welp (flop caz) cards))) -++ give |=(=gift:agent:gall (emit %give gift)) +++ give |=(=gift:guardian (emit %give gift)) ++ now-id `id:c`[our now]:bowl ++ scry-path |= [agent=term =path] @@ -838,7 +848,7 @@ ?+ mark ~|(bad-poke/mark !!) %chat-negotiate ::TODO arguably should just be a /mar/negotiate - (emit (initiate:neg !<(@p vase) dap.bowl)) + (emit (exit:guardian (initiate:neg !<(@p vase) dap.bowl))) :: %chat-dm-rsvp =+ !<(=rsvp:dm:c vase) @@ -901,7 +911,7 @@ :: %chat-dm-action-2 =+ !<(=action:dm:v7:cv vase) - =. cor (emit (tell:log %dbug ~['received dm action' >action<] ~)) + =. cor (emit (tell-log %dbug ~['received dm action' >action<] ~)) :: don't allow anyone else to proxy through us ?. =(src.bowl our.bowl) ~|("%dm-action poke failed: only allowed from self" !!) @@ -912,7 +922,7 @@ :: %chat-dm-diff-2 =+ !<(=diff:dm:v7:cv vase) - =. cor (emit (tell:log %dbug ~['received dm diff' >diff<] ~)) + =. cor (emit (tell-log %dbug ~['received dm diff' >diff<] ~)) di-abet:(di-take-counter:(di-abed-soft:di-core src.bowl) diff) :: %chat-dm-action-1 @@ -1074,7 +1084,7 @@ ?< (~(has in blocked-by) ship) ?< =(our.bowl ship) =. blocked-by (~(put in blocked-by) ship) - (give %fact ~[/] chat-blocked-by+!>(ship)) + (give %fact ~[/] chat-blocked-by+ship) :: ++ has-unblocked |= =ship @@ -1083,7 +1093,7 @@ ?> (~(has in blocked-by) ship) ?< =(our.bowl ship) =. blocked-by (~(del in blocked-by) ship) - (give %fact ~[/] chat-unblocked-by+!>(ship)) + (give %fact ~[/] chat-unblocked-by+ship) :: ++ block |= =ship @@ -1092,7 +1102,7 @@ ?< (~(has in blocked) ship) ?< =(our.bowl ship) =. blocked (~(put in blocked) ship) - (emit %pass (weld di-area:di-core:cor /block) %agent [ship dap.bowl] %poke %chat-blocked !>(0)) + (emit %pass (weld di-area:di-core:cor /block) %agent [ship dap.bowl] %poke %chat-blocked ~) :: ++ unblock |= =ship @@ -1100,7 +1110,7 @@ ^+ cor ?> (~(has in blocked) ship) =. blocked (~(del in blocked) ship) - (emit %pass (weld di-area:di-core:cor /unblock) %agent [ship dap.bowl] %poke %chat-unblocked !>(0)) + (emit %pass (weld di-area:di-core:cor /unblock) %agent [ship dap.bowl] %poke %chat-unblocked ~) :: ++ toggle-message |= toggle=message-toggle:c @@ -1111,7 +1121,7 @@ %hide (~(put in hidden-messages) id.toggle) %show (~(del in hidden-messages) id.toggle) == - (give %fact ~[/] chat-toggle-message+!>(toggle)) + (give %fact ~[/] chat-toggle-message+toggle) :: ++ watch |= =(pole knot) @@ -1146,7 +1156,7 @@ cu-abet:(cu-watch:(cu-abed id) ver.pole rest.pole) :: [%epic ~] - (give %fact ~ epic+!>(okay)) + (give %fact ~ epic+okay) == :: ++ agent @@ -1219,9 +1229,9 @@ cu-abet:(cu-agent:(cu-abed-hard:cu-core id) rest.pole sign) == ++ give-kick - |= [pas=(list path) =cage] + |= [pas=(list path) =rail] ~> %spin.['give-kick'] - =. cor (give %fact pas cage) + =. cor (give %fact pas rail) (give %kick ~ ~) :: ++ arvo @@ -1489,7 +1499,7 @@ ++ give-unread |= [=whom:c =unread:unreads:c] ~> %spin.['give-unread'] - (give %fact ~[/unreads] chat-unread-update+!>([whom unread])) + (give %fact ~[/unreads] chat-unread-update+[whom unread]) :: ++ pass-activity =, a @@ -1511,8 +1521,8 @@ %- emil %+ turn actions |= =action - =/ =cage activity-action+!>(action) - [%pass /activity/submit %agent [our.bowl %activity] %poke cage] + =/ =rail activity-action+action + [%pass /activity/submit %agent [our.bowl %activity] %poke rail] ?: ?& ?=(?(%post %reply) -.concern) .= our.bowl p.id:?-(-.concern %post key.concern, %reply key.concern) @@ -1635,18 +1645,18 @@ %+ skim ~(tap by old-chats) |= [=flag:t =chat:t] =(our.bowl p.flag) - =/ =cage [%channel-migration !>(server-channels)] - (emit %pass /migrate %agent [our.bowl %channels-server] %poke cage) + =/ =rail [%unsafe %channel-migration !>(server-channels)] + (emit %pass /migrate %agent [our.bowl %channels-server] %poke rail) :: ++ client =/ =v-channels:d (convert-channels | old-chats) - =/ =cage [%channel-migration !>(v-channels)] - =. cor (emit %pass /migrate %agent [our.bowl %channels] %poke cage) + =/ =rail [%unsafe %channel-migration !>(v-channels)] + =. cor (emit %pass /migrate %agent [our.bowl %channels] %poke rail) =+ pins=old-pins |- ?~ pins cor - =/ =^cage [%ui-action !>(`action:u`[%pins %add (convert-pin i.pins)])] - =. cor (emit %pass /migrate %agent [our.bowl %groups-ui] %poke cage) + =/ =^rail [%unsafe %ui-action !>(`action:u`[%pins %add (convert-pin i.pins)])] + =. cor (emit %pass /migrate %agent [our.bowl %groups-ui] %poke rail) $(pins t.pins) :: ++ refs @@ -1670,19 +1680,19 @@ %+ lien p.p.content.writ |= =block:t ?=([%cite %chan [%chat *] *] block) - =/ command=(unit c-post:d) + =/ command=(unit c-post:v9:dv) ?~ edit ~ ?~ replying.writ `[%edit time u.edit] =/ parent-time (~(get by dex.pact.u.old-chat) u.replying.writ) ?~ parent-time ~ - =/ =reply-essay:d [- blob]:u.edit - `[%reply u.parent-time %edit time reply-essay] + =/ =memo:v9:dv -.u.edit + `[%reply u.parent-time %edit time memo] ?~ command ~ - =/ =cage + =/ =rail :- %channel-action-1 - !>(`a-channels:d`[%channel [%chat flag] %post u.command]) - `[%pass /migrate %agent [our.bowl %channels] %poke cage] + `a-channels:v9:dv`[%channel [%chat flag] %post u.command] + `[%pass /migrate %agent [our.bowl %channels] %poke rail] :: ++ trim =- =. old-chats - cor @@ -1951,8 +1961,8 @@ =. clubs (~(del by clubs) id) :: if we're leaving a DM we're in, make sure we delete the activity =/ =action:a [%del %dm %club id] - =/ =cage activity-action+!>(action) - (emit [%pass /activity/submit %agent [our.bowl %activity] %poke cage]) + =/ =rail activity-action+action + (emit [%pass /activity/submit %agent [our.bowl %activity] %poke rail]) ++ cu-abed |= i=id:club:c ~> %spin.['cu-abed'] @@ -2014,8 +2024,8 @@ =, p.diff.q.diff /(scot %uv p.diff)/(scot %p p)/(scot %ud q) =/ =dock [ship dap.bowl] - =/ =cage chat-club-action-2+!>(`action:club:c`[id diff]) - [%pass wire %agent dock %poke cage] + =/ =rail chat-club-action-2+`action:club:c`[id diff] + [%pass wire %agent dock %poke rail] :: ++ gossip |= =diff:club:c @@ -2071,14 +2081,14 @@ ~> %spin.['cu-give-action'] =/ action-5 (v5:action-club:v7:cc action) =. cor - =/ =cage chat-club-action+!>((v3:action-club:v5:cc action-5)) - (emit %give %fact ~[/ /clubs] cage) + =/ =rail chat-club-action+(v3:action-club:v5:cc action-5) + (emit %give %fact ~[/ /clubs] rail) =. cor - =/ cage chat-club-action-1+!>(action-5) - (emit %give %fact ~[/v1 /v1/clubs /v2 /v2/clubs] cage) + =/ rail chat-club-action-1+action-5 + (emit %give %fact ~[/v1 /v1/clubs /v2 /v2/clubs] rail) =. cor - =/ cage chat-club-action-2+!>(action) - (emit %give %fact ~[/v3 /v3/clubs] cage) + =/ rail chat-club-action-2+action + (emit %give %fact ~[/v3 /v3/clubs] rail) cu-core :: ++ cu-give-writs-diff @@ -2088,7 +2098,7 @@ =/ response=(unit response:writs:c) (diff-to-response diff pact.club) ?~ response - =. cor (emit (tell:log %crit ~['+diff-to-response miss (cu)'] ~)) + =. cor (emit (tell-log %crit ~['+diff-to-response miss (cu)'] ~)) cu-core =/ old-response-3=[whom:v3:cv response:writs:v3:cv] :- whom @@ -2102,20 +2112,20 @@ [whom (v6:response-writs:v7:cc u.response)] =/ new-response=[whom:c response:writs:c] [whom u.response] =. cor - =/ cage writ-response+!>(old-response-3) - (emit %give %fact ~[/ cu-area cu-area-writs] cage) + =/ rail writ-response+old-response-3 + (emit %give %fact ~[/ cu-area cu-area-writs] rail) =. cor - =/ cage writ-response-1+!>(old-response-4) - (emit %give %fact ~[/v1 v1+cu-area v1+cu-area-writs] cage) + =/ rail writ-response-1+old-response-4 + (emit %give %fact ~[/v1 v1+cu-area v1+cu-area-writs] rail) =. cor - =/ =cage writ-response-2+!>(old-response-5) - (emit %give %fact ~[/v2 v2+cu-area v2+cu-area-writs] cage) + =/ =rail writ-response-2+old-response-5 + (emit %give %fact ~[/v2 v2+cu-area v2+cu-area-writs] rail) =. cor - =/ =cage writ-response-3+!>(old-response-6) - (emit %give %fact ~[/v3 v3+cu-area v3+cu-area-writs] cage) + =/ =rail writ-response-3+old-response-6 + (emit %give %fact ~[/v3 v3+cu-area v3+cu-area-writs] rail) =. cor - =/ =cage writ-response-4+!>(new-response) - (emit %give %fact ~[/v4 v4+cu-area v4+cu-area-writs] cage) + =/ =rail writ-response-4+new-response + (emit %give %fact ~[/v4 v4+cu-area v4+cu-area-writs] rail) cu-core :: ++ cu-diff @@ -2181,7 +2191,7 @@ 'club_id'^s+(scot %uv id) 'react'^s+react-text == - (emit (tell:log %crit message metadata)) + (emit (tell-log %crit message metadata)) cor =. pact.club (reduce:cu-pact now.bowl from-self diff.delta) ?- -.q.diff.delta @@ -2230,7 +2240,7 @@ 'reply_time'^s+(scot %ud q.reply-id) 'react'^s+react-text == - (emit (tell:log %crit message metadata)) + (emit (tell-log %crit message metadata)) cor ?- -.delt ?(%add-react %del-react) (cu-give-writs-diff diff.delta) @@ -2416,15 +2426,15 @@ :: we do our best to recover the message from the wire. :: =. cor - =; c=(unit cage) - ?~ c cor + =; r=(unit rail) + ?~ r cor %+ emit %pass - [(weld cu-area /gossip/archaic) %agent [src.bowl %chat] %poke u.c] + [(weld cu-area /gossip/archaic) %agent [src.bowl %chat] %poke u.r] ?+ t.wire ~ [@ @ @ ~] %- some :- %club-action - !> ^- action:club:v2:cv + ^- action:club:v2:cv =/ =uid:club:c (slav %uv i.t.wire) =/ mid=id:c @@ -2466,8 +2476,8 @@ :: ++ give-invites =/ invites ~(key by pending-dms) - =. cor (emit (tell:log %dbug ~['current invites:' >invites<] ~)) - (give %fact ~[/ /dm/invited /v1 /v2 /v3] ships+!>(invites)) + =. cor (emit (tell-log %dbug ~['current invites:' >invites<] ~)) + (give %fact ~[/ /dm/invited /v1 /v2 /v3] ships+invites) :: ++ verses-to-inlines :: for backcompat |= l=(list verse:d) @@ -2507,8 +2517,8 @@ =. dms (~(del by dms) ship) :: if we're leaving a DM we're in, make sure we delete the activity =/ =action:a [%del %dm %ship ship] - =/ =cage activity-action+!>(action) - (emit [%pass /activity/submit %agent [our.bowl %activity] %poke cage]) + =/ =rail activity-action+action + (emit [%pass /activity/submit %agent [our.bowl %activity] %poke rail]) ++ di-abed |= s=@p ~> %spin.['di-abed'] @@ -2591,7 +2601,7 @@ =/ response=(unit response:writs:c) (diff-to-response diff pact.dm) ?~ response - =. cor (emit (tell:log %crit ~['+diff-to-response miss (di)'] ~)) + =. cor (emit (tell-log %crit ~['+diff-to-response miss (di)'] ~)) di-core =/ old-response-3=[whom:v3:cv response:writs:v3:cv] :- whom @@ -2605,21 +2615,21 @@ [whom (v6:response-writs:v7:cc u.response)] =/ new-response [whom u.response] =. cor - =/ =cage - writ-response+!>(old-response-3) - (emit %give %fact ~[/ di-area di-area-writs] cage) + =/ =rail + writ-response+old-response-3 + (emit %give %fact ~[/ di-area di-area-writs] rail) =. cor - =/ =cage writ-response-1+!>(old-response-4) - (emit %give %fact ~[/v1 v1+di-area v1+di-area-writs] cage) + =/ =rail writ-response-1+old-response-4 + (emit %give %fact ~[/v1 v1+di-area v1+di-area-writs] rail) =. cor - =/ =cage writ-response-2+!>(old-response-5) - (emit %give %fact ~[/v2 v2+di-area v2+di-area-writs] cage) + =/ =rail writ-response-2+old-response-5 + (emit %give %fact ~[/v2 v2+di-area v2+di-area-writs] rail) =. cor - =/ =cage writ-response-3+!>(old-response-6) - (emit %give %fact ~[/v3 v3+di-area v3+di-area-writs] cage) + =/ =rail writ-response-3+old-response-6 + (emit %give %fact ~[/v3 v3+di-area v3+di-area-writs] rail) =. cor - =/ =cage writ-response-4+!>(new-response) - (emit %give %fact ~[/v4 v4+di-area v4+di-area-writs] cage) + =/ =rail writ-response-4+new-response + (emit %give %fact ~[/v4 v4+di-area v4+di-area-writs] rail) di-core :: ++ di-ingest-diff @@ -2628,8 +2638,8 @@ ^+ di-core =. last-updated (~(put ol last-updated) [%ship ship] now.bowl) =/ =wire /contacts/(scot %p ship) - =/ =cage contact-action-1+!>(`action:contacts`[%meet ~[ship]]) - =. cor (emit %pass wire %agent [our.bowl %contacts] %poke cage) + =/ =rail contact-action-1+`action:contacts`[%meet ~[ship]] + =. cor (emit %pass wire %agent [our.bowl %contacts] %poke rail) =/ old-unread di-unread =/ had=(unit [=time writ=(may:c writ:c)]) (get:di-pact p.diff) @@ -2652,7 +2662,7 @@ 'ship'^s+(scot %p ship) 'react'^s+react-text == - (emit (tell:log %crit message metadata)) + (emit (tell-log %crit message metadata)) cor =. pact.dm (reduce:di-pact now.bowl from-self diff) =? cor &(=(net.dm %invited) !=(ship our.bowl)) @@ -2705,7 +2715,7 @@ 'reply_time'^s+(scot %ud q.id.q.diff) 'react'^s+react-text == - (emit (tell:log %crit message metadata)) + (emit (tell-log %crit message metadata)) cor ?- -.delta ?(%add-react %del-react) (di-give-writs-diff diff) @@ -2760,7 +2770,7 @@ (can-poke:neg bowl [ship dap.bowl]) == (emit (proxy-rsvp:di-pass ok)) - =. cor (emit (initiate:neg [ship dap.bowl])) + =. cor (emit (exit:guardian (initiate:neg [ship dap.bowl]))) ?. ok :: reject or leave the dm :: @@ -2771,7 +2781,7 @@ di-core(gone &) =. cor %^ emit %pass /contacts/(scot %p ship) - [%agent [our.bowl %contacts] %poke contact-action-1+!>([%meet ~[ship]])] + [%agent [our.bowl %contacts] %poke contact-action-1+[%meet ~[ship]]] ?. =(%invited net.dm) di-core ::TMI :: accept the invitation :: @@ -2806,7 +2816,7 @@ :: =. cor %^ emit %pass /contacts/(scot %p ship) - [%agent [our.bowl %contacts] %poke contact-action-1+!>([%meet ~[ship]])] + [%agent [our.bowl %contacts] %poke contact-action-1+[%meet ~[ship]]] =. net.dm %done (di-post-notice ' joined the chat') ++ di-watch @@ -2835,7 +2845,7 @@ ?> ?=(%poke-ack -.sign) ?~ p.sign di-core =. cor - (emit (fail:log %poke-ack [leaf+"failed to {(trip i.wire)}" u.p.sign] ~)) + (emit (fail-log %poke-ack [leaf+"failed to {(trip i.wire)}" u.p.sign] ~)) di-core :: [%proxy *] @@ -2870,15 +2880,15 @@ :: we do our best to recover the message from the wire. :: =. cor - =; c=(unit cage) - ?~ c cor + =; r=(unit rail) + ?~ r cor %+ emit %pass - [(weld di-area /proxy/archaic) %agent [ship %chat] %poke u.c] + [(weld di-area /proxy/archaic) %agent [ship %chat] %poke u.r] |- ?+ t.wire ~ [%rsvp @ ~] =/ ok=? ;;(? (slav %f i.t.t.wire)) - `[%dm-rsvp !>(`rsvp:dm:v2:cv`[our.bowl ok])] + `[%dm-rsvp `rsvp:dm:v2:cv`[our.bowl ok]] :: [%diff ~] ?> ?=(^ sent) @@ -2893,7 +2903,7 @@ [@ ?(~ [@ @ ~])] %- some :- %dm-diff - !> ^- diff:dm:v2:cv + ^- diff:dm:v2:cv ?~ t.t.wire =/ id=time (slav %ud i.t.wire) :- [our.bowl id] @@ -3015,18 +3025,18 @@ ++ di-pass |% ++ pass - |= [=wire =dock =task:agent:gall] + |= [=wire =dock =task:guardian] ~> %spin.['pass'] ^- card [%pass (welp di-area wire) %agent dock task] - ++ poke-them |=([=wire =cage] (pass wire [ship dap.bowl] %poke cage)) - ++ proxy-rsvp |=(ok=? (poke-them /proxy/rsvp/(scot %f ok) chat-dm-rsvp+!>([our.bowl ok]))) + ++ poke-them |=([=wire =rail] (pass wire [ship dap.bowl] %poke rail)) + ++ proxy-rsvp |=(ok=? (poke-them /proxy/rsvp/(scot %f ok) chat-dm-rsvp+[our.bowl ok])) ++ proxy |= =diff:dm:c ~> %spin.['proxy'] ::NOTE static wire important for ordering guarantees and preventing flow :: proliferation, see also +di-proxy - (poke-them /proxy/diff chat-dm-diff-2+!>(diff)) + (poke-them /proxy/diff chat-dm-diff-2+diff) -- -- :: a bug caused us to hear one last gossip about a club we left. this @@ -3055,14 +3065,14 @@ :: only remove activity if club is gone ?: (~(has by clubs) id) caz =/ =action:a [%del %dm %club id] - =/ =cage activity-action+!>(action) + =/ =rail activity-action+action :_ caz - [%pass /activity/submit %agent [our.bowl %activity] %poke cage] + [%pass /activity/submit %agent [our.bowl %activity] %poke rail] =* ship p.whom.source :: only remove activity if dm is gone ?: (~(has by dms) ship) caz =/ =action:a [%del %dm %ship ship] - =/ =cage activity-action+!>(action) + =/ =rail activity-action+action :_ caz - [%pass /activity/submit %agent [our.bowl %activity] %poke cage] + [%pass /activity/submit %agent [our.bowl %activity] %poke rail] -- diff --git a/desk/lib/guardian.hoon b/desk/lib/guardian.hoon new file mode 100644 index 0000000000..73948ea9da --- /dev/null +++ b/desk/lib/guardian.hoon @@ -0,0 +1,246 @@ +:: guardian: custom card types for compile-time marked-data guard rails +:: +:: xx +:: +/% noun %noun +/% loob %loob +/% json %json +/% chat-blocked-by %chat-blocked-by +/% chat-changed-writs %chat-changed-writs +/% chat-changed-writs-1 %chat-changed-writs-1 +/% chat-club-action %chat-club-action +/% chat-club-action-0 %chat-club-action-0 +/% chat-club-action-1 %chat-club-action-1 +/% chat-club-action-2 %chat-club-action-2 +/% chat-dm-action %chat-dm-action +/% chat-dm-action-1 %chat-dm-action-1 +/% chat-dm-diff %chat-dm-diff +/% chat-dm-diff-1 %chat-dm-diff-1 +/% chat-dm-diff-2 %chat-dm-diff-2 +/% chat-heads %chat-heads +/% chat-heads-1 %chat-heads-1 +/% chat-heads-2 %chat-heads-2 +/% chat-heads-3 %chat-heads-3 +/% chat-heads-4 %chat-heads-4 +/% chat-paged-writs %chat-paged-writs +/% chat-paged-writs-1 %chat-paged-writs-1 +/% chat-paged-writs-2 %chat-paged-writs-2 +/% chat-paged-writs-3 %chat-paged-writs-3 +/% chat-scam %chat-scam +/% chat-scam-1 %chat-scam-1 +/% chat-scam-2 %chat-scam-2 +/% chat-scam-3 %chat-scam-3 +/% chat-scan %chat-scan +/% chat-scan-1 %chat-scan-1 +/% chat-scan-2 %chat-scan-2 +/% chat-scan-3 %chat-scan-3 +/% chat-toggle-message %chat-toggle-message +/% chat-unblocked-by %chat-unblocked-by +/% chat-unread-update %chat-unread-update +/% chat-unreads %chat-unreads +/% chat-writ-1 %chat-writ-1 +/% chat-writ-2 %chat-writ-2 +/% chat-writ-3 %chat-writ-3 +/% clubs %clubs +/% epic %epic +/% hidden-messages %hidden-messages +/% ships %ships +/% writ %writ +/% writ-response %writ-response +/% writ-response-1 %writ-response-1 +/% writ-response-2 %writ-response-2 +/% writ-response-3 %writ-response-3 +/% writ-response-4 %writ-response-4 +:: /% ui-action %ui-action +/% channel-action-1 %channel-action-1 +/% chat-blocked %chat-blocked +/% chat-unblocked %chat-unblocked +/% activity-action %activity-action +/% chat-dm-rsvp %chat-dm-rsvp +/% contact-action-1 %contact-action-1 +/% dm-rsvp %dm-rsvp +/% dm-diff %dm-diff +/% club-action %club-action +:: +/% flag %flag +|% ++$ rail $+ rail + $% [%unsafe =cage] + :: + [%flag _*vale:flag] + [%noun _*vale:noun] + [%loob _*vale:loob] + [%json _*vale:json] + [%chat-blocked-by $+(chat-blocked-by _*vale:chat-blocked-by)] + [%chat-changed-writs $+(chat-changed-writs _*vale:chat-changed-writs)] + [%chat-changed-writs-1 $+(chat-changed-writs-1 _*vale:chat-changed-writs-1)] + [%chat-club-action $+(chat-club-action _*vale:chat-club-action)] + [%chat-club-action-0 $+(chat-club-action-0 _*vale:chat-club-action-0)] + [%chat-club-action-1 $+(chat-club-action-1 _*vale:chat-club-action-1)] + [%chat-club-action-2 $+(chat-club-action-2 _*vale:chat-club-action-2)] + [%chat-dm-action $+(chat-dm-action _*vale:chat-dm-action)] + [%chat-dm-action-1 $+(chat-dm-action-1 _*vale:chat-dm-action-1)] + [%chat-dm-diff $+(chat-dm-diff _*vale:chat-dm-diff)] + [%chat-dm-diff-1 $+(chat-dm-diff-1 _*vale:chat-dm-diff-1)] + [%chat-dm-diff-2 $+(chat-dm-diff-2 _*vale:chat-dm-diff-2)] + [%chat-heads $+(chat-heads _*vale:chat-heads)] + [%chat-heads-1 $+(chat-heads-1 _*vale:chat-heads-1)] + [%chat-heads-2 $+(chat-heads-2 _*vale:chat-heads-2)] + [%chat-heads-3 $+(chat-heads-3 _*vale:chat-heads-3)] + [%chat-heads-4 $+(chat-heads-4 _*vale:chat-heads-4)] + [%chat-paged-writs $+(chat-paged-writs _*vale:chat-paged-writs)] + [%chat-paged-writs-1 $+(chat-paged-writs-1 _*vale:chat-paged-writs-1)] + [%chat-paged-writs-2 $+(chat-paged-writs-2 _*vale:chat-paged-writs-2)] + [%chat-paged-writs-3 $+(chat-paged-writs-3 _*vale:chat-paged-writs-3)] + [%chat-scam $+(chat-scam _*vale:chat-scam)] + [%chat-scam-1 $+(chat-scam-1 _*vale:chat-scam-1)] + [%chat-scam-2 $+(chat-scam-2 _*vale:chat-scam-2)] + [%chat-scam-3 $+(chat-scam-3 _*vale:chat-scam-3)] + [%chat-scan $+(chat-scan _*vale:chat-scan)] + [%chat-scan-1 $+(chat-scan-1 _*vale:chat-scan-1)] + [%chat-scan-2 $+(chat-scan-2 _*vale:chat-scan-2)] + [%chat-scan-3 $+(chat-scan-3 _*vale:chat-scan-3)] + [%chat-toggle-message $+(chat-toggle-message _*vale:chat-toggle-message)] + [%chat-unblocked-by $+(chat-unblocked-by _*vale:chat-unblocked-by)] + [%chat-unread-update $+(chat-unread-update _*vale:chat-unread-update)] + [%chat-unreads $+(chat-unreads _*vale:chat-unreads)] + [%chat-writ-1 $+(chat-writ-1 _*vale:chat-writ-1)] + [%chat-writ-2 $+(chat-writ-2 _*vale:chat-writ-2)] + [%chat-writ-3 $+(chat-writ-3 _*vale:chat-writ-3)] + [%clubs $+(clubs _*vale:clubs)] + [%epic $+(epic _*vale:epic)] + [%hidden-messages $+(hidden-messages _*vale:hidden-messages)] + [%ships $+(ships _*vale:ships)] + [%writ $+(writ _*vale:writ)] + [%writ-response $+(writ-response _*vale:writ-response)] + [%writ-response-1 $+(writ-response-1 _*vale:writ-response-1)] + [%writ-response-2 $+(writ-response-2 _*vale:writ-response-2)] + [%writ-response-3 $+(writ-response-3 _*vale:writ-response-3)] + [%writ-response-4 $+(writ-response-4 _*vale:writ-response-4)] + :: [%ui-action $+(ui-action _*vale:ui-action)] + [%channel-action-1 $+(channel-action-1 _*vale:channel-action-1)] + [%chat-blocked $+(chat-blocked _*vale:chat-blocked)] + [%chat-unblocked $+(chat-unblocked _*vale:chat-unblocked)] + [%activity-action $+(activity-action _*vale:activity-action)] + [%chat-dm-rsvp $+(chat-dm-rsvp _*vale:chat-dm-rsvp)] + [%contact-action-1 $+(contact-action-1 _*vale:contact-action-1)] + [%dm-rsvp $+(dm-rsvp _*vale:dm-rsvp)] + [%dm-diff $+(dm-diff _*vale:dm-diff)] + [%club-action $+(club-action _*vale:club-action)] + == +++ de-rail + |= =rail + ^- cage + ?- -.rail + %unsafe cage.rail + %noun [-.rail !>(+.rail)] + %loob [-.rail !>(+.rail)] + %flag [-.rail !>(+.rail)] + %json [-.rail !>(+.rail)] + %chat-blocked-by [-.rail !>(+.rail)] + %chat-changed-writs [-.rail !>(+.rail)] + %chat-changed-writs-1 [-.rail !>(+.rail)] + %chat-club-action [-.rail !>(+.rail)] + %chat-club-action-0 [-.rail !>(+.rail)] + %chat-club-action-1 [-.rail !>(+.rail)] + %chat-club-action-2 [-.rail !>(+.rail)] + %chat-dm-action [-.rail !>(+.rail)] + %chat-dm-action-1 [-.rail !>(+.rail)] + %chat-dm-diff [-.rail !>(+.rail)] + %chat-dm-diff-1 [-.rail !>(+.rail)] + %chat-dm-diff-2 [-.rail !>(+.rail)] + %chat-heads [-.rail !>(+.rail)] + %chat-heads-1 [-.rail !>(+.rail)] + %chat-heads-2 [-.rail !>(+.rail)] + %chat-heads-3 [-.rail !>(+.rail)] + %chat-heads-4 [-.rail !>(+.rail)] + %chat-paged-writs [-.rail !>(+.rail)] + %chat-paged-writs-1 [-.rail !>(+.rail)] + %chat-paged-writs-2 [-.rail !>(+.rail)] + %chat-paged-writs-3 [-.rail !>(+.rail)] + %chat-scam [-.rail !>(+.rail)] + %chat-scam-1 [-.rail !>(+.rail)] + %chat-scam-2 [-.rail !>(+.rail)] + %chat-scam-3 [-.rail !>(+.rail)] + %chat-scan [-.rail !>(+.rail)] + %chat-scan-1 [-.rail !>(+.rail)] + %chat-scan-2 [-.rail !>(+.rail)] + %chat-scan-3 [-.rail !>(+.rail)] + %chat-toggle-message [-.rail !>(+.rail)] + %chat-unblocked-by [-.rail !>(+.rail)] + %chat-unread-update [-.rail !>(+.rail)] + %chat-unreads [-.rail !>(+.rail)] + %chat-writ-1 [-.rail !>(+.rail)] + %chat-writ-2 [-.rail !>(+.rail)] + %chat-writ-3 [-.rail !>(+.rail)] + %clubs [-.rail !>(+.rail)] + %epic [-.rail !>(+.rail)] + %hidden-messages [-.rail !>(+.rail)] + %ships [-.rail !>(+.rail)] + %writ [-.rail !>(+.rail)] + %writ-response [-.rail !>(+.rail)] + %writ-response-1 [-.rail !>(+.rail)] + %writ-response-2 [-.rail !>(+.rail)] + %writ-response-3 [-.rail !>(+.rail)] + %writ-response-4 [-.rail !>(+.rail)] + :: %ui-action [-.rail !>(+.rail)] + %channel-action-1 [-.rail !>(+.rail)] + %chat-blocked [-.rail !>(+.rail)] + %chat-unblocked [-.rail !>(+.rail)] + %activity-action [-.rail !>(+.rail)] + %chat-dm-rsvp [-.rail !>(+.rail)] + %contact-action-1 [-.rail !>(+.rail)] + %dm-rsvp [-.rail !>(+.rail)] + %dm-diff [-.rail !>(+.rail)] + %club-action [-.rail !>(+.rail)] + == +:: +:: ++$ card (wind note gift) ++$ note + $% $<(%agent note:agent:gall) + [%agent [=ship name=term] =task] + == ++$ task + $% $<(?(%poke %poke-as) task:agent:gall) + [%poke =rail] + [%poke-as =mark =rail] + == ++$ gift + $% $<(%fact gift:agent:gall) + [%fact paths=(list path) =rail] + == +:: +++ exit + |= cad=card:agent:gall + ^- card + ?< ?=(%slip -.cad) + ?+ cad cad + [%pass * %agent * %poke *] cad(cage.task.q [%unsafe cage.task.q.cad]) + [%pass * %agent * %poke-as *] cad(cage.task.q [%unsafe cage.task.q.cad]) + [%give %fact *] cad(cage.p [%unsafe cage.p.cad]) + == +:: +++ unguard + |% + ++ card + |= cad=^card + ^- card:agent:gall + ?< ?=(%slip -.cad) + ?+ cad cad + [%pass * %agent * %poke *] cad(rail.task.q (de-rail rail.task.q.cad)) + [%pass * %agent * %poke-as *] cad(rail.task.q (de-rail rail.task.q.cad)) + [%give %fact *] cad(rail.p (de-rail rail.p.cad)) + == + :: + ++ step + |* [caz=(list ^card) cor=*] + ^- [(list card:agent:gall) _cor] + [(turn caz card) cor] + :: + ++ peek + |= ray=(unit (unit rail)) + ?. ?=([~ ~ *] ray) ray + ``(de-rail u.u.ray) + -- +-- From f4265df056bec16a8882cfc8c414d1467bf95fb5 Mon Sep 17 00:00:00 2001 From: fang Date: Thu, 9 Apr 2026 23:06:04 +0200 Subject: [PATCH 02/20] guardian: apply to chat scries --- desk/app/chat.hoon | 121 +++++++++++++++++++++-------------------- desk/lib/dm.hoon | 32 +++++------ desk/lib/guardian.hoon | 12 ++++ 3 files changed, 89 insertions(+), 76 deletions(-) diff --git a/desk/app/chat.hoon b/desk/app/chat.hoon index d9618b3544..4b187effba 100644 --- a/desk/app/chat.hoon +++ b/desk/app/chat.hoon @@ -1244,23 +1244,24 @@ ++ peek |= =path ~> %spin.['peek'] - ^- (unit (unit cage)) + %- peek:unguard:guardian + ^- (unit (unit rail)) ?+ path [~ ~] - [%x %full ~] ``noun+!>([dms clubs]) - [%x %old ~] ``noun+!>(old-chats) :: legacy data, for migration use + [%x %full ~] ``noun+[dms clubs] + [%x %old ~] ``noun+old-chats :: legacy data, for migration use :: - [%x %clubs ~] ``clubs+!>((~(run by clubs) |=(=club:c crew.club))) + [%x %clubs ~] ``clubs+(~(run by clubs) |=(=club:c crew.club)) :: - [%x %blocked ~] ``ships+!>(blocked) + [%x %blocked ~] ``ships+blocked :: - [%x %blocked-by ~] ``ships+!>(blocked-by) + [%x %blocked-by ~] ``ships+blocked-by :: - [%x %hidden-messages ~] ``hidden-messages+!>(hidden-messages) + [%x %hidden-messages ~] ``hidden-messages+hidden-messages :: - [%x %unreads ~] ``chat-unreads+!>(unreads) + [%x %unreads ~] ``chat-unreads+unreads :: [%x %init ~] - =- ``noun+!>(-) + :^ ~ ~ %noun :* (~(run by clubs) |=(=club:c crew.club)) ~(key by accepted-dms) unreads @@ -1269,7 +1270,7 @@ == :: [%x %v1 %init ~] - =- ``noun+!>(-) + :^ ~ ~ %noun :* ~(key by accepted-dms) ~(key by pending-dms) (~(run by clubs) |=(=club:c crew.club)) @@ -1284,7 +1285,7 @@ ?^ tim=(slaw %da i.t.t.path) `u.tim `(slav %ud i.t.t.path) :^ ~ ~ %chat-heads - !>((v3:chat-heads:v5:cc (v5:chat-heads:v7:cc (heads since)))) + (v3:chat-heads:v5:cc (v5:chat-heads:v7:cc (heads since))) :: [%x ?(%v1 %v2 %v3 %v4) %heads ?(~ [@ ~])] =* ver i.t.path @@ -1293,10 +1294,10 @@ ?^ tim=(slaw %da i.t.t.t.path) `u.tim `(slav %ud i.t.t.t.path) ?- ver - %v1 ``[%chat-heads-1 !>((v4:chat-heads:v7:cc (heads since)))] - %v2 ``[%chat-heads-2 !>((v5:chat-heads:v7:cc (heads since)))] - %v3 ``[%chat-heads-3 !>((v6:chat-heads:v7:cc (heads since)))] - %v4 ``[%chat-heads-4 !>(`chat-heads:v7:cv`(heads since))] + %v1 ``[%chat-heads-1 (v4:chat-heads:v7:cc (heads since))] + %v2 ``[%chat-heads-2 (v5:chat-heads:v7:cc (heads since))] + %v3 ``[%chat-heads-3 (v6:chat-heads:v7:cc (heads since))] + %v4 ``[%chat-heads-4 `chat-heads:v7:cv`(heads since)] == :: [%x ver=?(%v3 %v4) %changes since=@ rest=*] @@ -1309,17 +1310,17 @@ %v3 =/ changes-6 (~(run by changes) (curr bind v6:writs:v7:cc)) - ``chat-changed-writs+!>(changes-6) + ``chat-changed-writs+changes-6 :: %v4 =/ changes-7=(map whom:c (unit writs:v7:cv)) changes - ``chat-changed-writs-1+!>(changes-7) + ``chat-changed-writs-1+changes-7 == :: [%count ~] :^ ~ ~ %json - !> ^- json + ^- json %- numb:enjs:format %- ~(rep by changes) |= [[* w=(unit writs:c)] sum=@ud] @@ -1373,12 +1374,12 @@ %v3 =/ changes-6 (~(run by changes) (curr bind v6:writs:v7:cc)) - ``chat-changed-writs+!>(changes-6) + ``chat-changed-writs+changes-6 :: %v4 =/ changes-7=(map whom:c (unit writs:v7:cv)) changes - ``chat-changed-writs-1+!>(changes-7) + ``chat-changed-writs-1+changes-7 == %- ~(gas by *(map whom:c (unit writs:c))) =* type $%([%ship who=ship =dm:c] [%club =id:club:c =club:c]) @@ -1412,13 +1413,13 @@ (weld older newer) :: [%x %dm ~] - ``ships+!>(~(key by accepted-dms)) + ``ships+~(key by accepted-dms) :: [%x %dm %invited ~] - ``ships+!>(~(key by pending-dms)) + ``ships+~(key by pending-dms) :: [%x %dm %archive ~] - ``ships+!>(~(key by archived-dms)) + ``ships+~(key by archived-dms) :: [%x %dm @ *] =/ =ship (slav %p i.t.t.path) @@ -1438,16 +1439,16 @@ =/ =ship (slav %p i.t.t.path) =/ has (~(has by dms) ship) ?. has - ``loob+!>(|) - ?~ t.t.t.path ``loob+!>(has) + ``loob+| + ?~ t.t.t.path ``loob+has (di-peek:(di-abed:di-core ship) %u %v0 t.t.t.path) :: [%u %club @ *] =/ =id:club:c (slav %uv i.t.t.path) =/ has (~(has by clubs) id) ?. has - ``loob+!>(|) - ?~ t.t.t.path ``loob+!>(has) + ``loob+| + ?~ t.t.t.path ``loob+has (cu-peek:(cu-abed:cu-core id) %u %v0 t.t.t.path) :: == @@ -2333,20 +2334,20 @@ ++ cu-peek |= [care=@tas ver=?(%v0 %v1 %v2 %v3 %v4) =(pole knot)] ~> %spin.['cu-peek'] - ^- (unit (unit cage)) + ^- (unit (unit rail)) ?+ pole [~ ~] [%writs rest=*] (peek:cu-pact care ver rest.pole) - [%crew ~] ``chat-club-crew+!>(crew.club) + [%crew ~] ``[%unsafe %chat-club-crew !>(crew.club)] :: [%search %bounded kind=?(%text %mention) from=@ tries=@ nedl=@ ~] :+ ~ ~ =; =scam:c ?- ver - %v0 chat-scam+!>((v3:scam:v5:cc (v5:scam:v7:cc scam))) - %v1 chat-scam-1+!>((v4:scam:v7:cc scam)) - %v2 chat-scam-2+!>((v5:scam:v7:cc scam)) - %v3 chat-scam-3+!>((v6:scam:v7:cc scam)) - %v4 chat-scam-4+!>(`scam:v7:cv`scam) + %v0 chat-scam+(v3:scam:v5:cc (v5:scam:v7:cc scam)) + %v1 chat-scam-1+(v4:scam:v7:cc scam) + %v2 chat-scam-2+(v5:scam:v7:cc scam) + %v3 chat-scam-3+(v6:scam:v7:cc scam) + %v4 chat-scam-4+`scam:v7:cv`scam == %^ ?- kind.pole %text text:tries-bound:search:cu-pact @@ -2364,11 +2365,11 @@ :+ ~ ~ =; =scan:c ?- ver - %v0 chat-scan+!>((v3:scan:v5:cc (v5:scan:v7:cc scan))) - %v1 chat-scan-1+!>((v4:scan:v5:cc (v5:scan:v7:cc scan))) - %v2 chat-scan-2+!>((v5:scan:v7:cc scan)) - %v3 chat-scan-3+!>((v6:scan:v7:cc scan)) - %v4 chat-scan-4+!>(`scan:v7:cv`scan) + %v0 chat-scan+(v3:scan:v5:cc (v5:scan:v7:cc scan)) + %v1 chat-scan-1+(v4:scan:v5:cc (v5:scan:v7:cc scan)) + %v2 chat-scan-2+(v5:scan:v7:cc scan) + %v3 chat-scan-3+(v6:scan:v7:cc scan) + %v4 chat-scan-4+`scan:v7:cv`scan == %^ text:hits-bound:search:cu-pact (slav %ud skip.pole) @@ -2379,11 +2380,11 @@ :+ ~ ~ =; =scan:c ?- ver - %v0 chat-scan+!>((v3:scan:v5:cc (v5:scan:v7:cc scan))) - %v1 chat-scan-1+!>((v4:scan:v5:cc (v5:scan:v7:cc scan))) - %v2 chat-scan-2+!>((v5:scan:v7:cc scan)) - %v3 chat-scan-3+!>((v6:scan:v7:cc scan)) - %v4 chat-scan-4+!>(`scan:v7:cv`scan) + %v0 chat-scan+(v3:scan:v5:cc (v5:scan:v7:cc scan)) + %v1 chat-scan-1+(v4:scan:v5:cc (v5:scan:v7:cc scan)) + %v2 chat-scan-2+(v5:scan:v7:cc scan) + %v3 chat-scan-3+(v6:scan:v7:cc scan) + %v4 chat-scan-4+`scan:v7:cv`scan == %^ mention:hits-bound:search:cu-pact (slav %ud skip.pole) @@ -2941,7 +2942,7 @@ ++ di-peek |= [care=@tas ver=?(%v0 %v1 %v2 %v3 %v4) =(pole knot)] ~> %spin.['di-peek'] - ^- (unit (unit cage)) + ^- (unit (unit rail)) ?+ pole [~ ~] [%writs rest=*] (peek:di-pact care ver rest.pole) @@ -2950,11 +2951,11 @@ =; =scam:c :+ ~ ~ ?- ver - %v0 chat-scam+!>((v3:scam:v5:cc (v5:scam:v7:cc scam))) - %v1 chat-scam-1+!>((v4:scam:v7:cc scam)) - %v2 chat-scam-2+!>((v5:scam:v7:cc scam)) - %v3 chat-scam-3+!>((v6:scam:v7:cc scam)) - %v4 chat-scam-4+!>(`scam:v7:cv`scam) + %v0 chat-scam+(v3:scam:v5:cc (v5:scam:v7:cc scam)) + %v1 chat-scam-1+(v4:scam:v7:cc scam) + %v2 chat-scam-2+(v5:scam:v7:cc scam) + %v3 chat-scam-3+(v6:scam:v7:cc scam) + %v4 chat-scam-4+`scam:v7:cv`scam == %^ ?- kind.pole %text text:tries-bound:search:di-pact @@ -2972,11 +2973,11 @@ =; =scan:c :+ ~ ~ ?- ver - %v0 chat-scan+!>((v3:scan:v5:cc (v5:scan:v7:cc scan))) - %v1 chat-scan-1+!>((v4:scan:v5:cc (v5:scan:v7:cc scan))) - %v2 chat-scan-2+!>((v5:scan:v7:cc scan)) - %v3 chat-scan-3+!>((v6:scan:v7:cc scan)) - %v4 chat-scan-4+!>(`scan:v7:cv`scan) + %v0 chat-scan+(v3:scan:v5:cc (v5:scan:v7:cc scan)) + %v1 chat-scan-1+(v4:scan:v5:cc (v5:scan:v7:cc scan)) + %v2 chat-scan-2+(v5:scan:v7:cc scan) + %v3 chat-scan-3+(v6:scan:v7:cc scan) + %v4 chat-scan-4+`scan:v7:cv`scan == %^ text:hits-bound:search:di-pact (slav %ud skip.pole) @@ -2987,11 +2988,11 @@ =; =scan:c :+ ~ ~ ?- ver - %v0 chat-scan+!>((v3:scan:v5:cc (v5:scan:v7:cc scan))) - %v1 chat-scan-1+!>((v4:scan:v5:cc (v5:scan:v7:cc scan))) - %v2 chat-scan-2+!>((v5:scan:v7:cc scan)) - %v3 chat-scan-3+!>((v6:scan:v7:cc scan)) - %v4 chat-scan-4+!>(`scan:v7:cv`scan) + %v0 chat-scan+(v3:scan:v5:cc (v5:scan:v7:cc scan)) + %v1 chat-scan-1+(v4:scan:v5:cc (v5:scan:v7:cc scan)) + %v2 chat-scan-2+(v5:scan:v7:cc scan) + %v3 chat-scan-3+(v6:scan:v7:cc scan) + %v4 chat-scan-4+`scan:v7:cv`scan == %^ mention:hits-bound:search:di-pact (slav %ud skip.pole) diff --git a/desk/lib/dm.hoon b/desk/lib/dm.hoon index a318853e76..ae6d388110 100644 --- a/desk/lib/dm.hoon +++ b/desk/lib/dm.hoon @@ -1,5 +1,5 @@ /- c=chat, cv=chat-ver, d=channels, s=story, meta -/+ mp=mop-extensions, cc=chat-conv, cu=channel-utils +/+ mp=mop-extensions, cc=chat-conv, cu=channel-utils, guardian |_ pac=pact:c ++ size-limit 256.000 :: 256KB ++ mope ((mp time (may:c writ:c)) lte) @@ -252,14 +252,14 @@ ++ give-paged-writs |= [mode=?(%light %heavy) ver=?(%v0 %v1 %v2 %v3 %v4) ls=(list [time (may:c writ:c)])] ~> %spin.['libdm-give-paged-writs'] - ^- (unit (unit cage)) + ^- (unit (unit rail:guardian)) =; p=paged-writs:c ?- ver - %v0 ``chat-paged-writs+!>((v3:paged-writs:v4:cc (v4:paged-writs:v7:cc p))) - %v1 ``chat-paged-writs-1+!>((v4:paged-writs:v7:cc p)) - %v2 ``chat-paged-writs-2+!>((v5:paged-writs:v7:cc p)) - %v3 ``chat-paged-writs-3+!>((v6:paged-writs:v7:cc p)) - %v4 ``chat-paged-writs-4+!>(`paged-writs:v7:cv`p) + %v0 ``chat-paged-writs+(v3:paged-writs:v4:cc (v4:paged-writs:v7:cc p)) + %v1 ``chat-paged-writs-1+(v4:paged-writs:v7:cc p) + %v2 ``chat-paged-writs-2+(v5:paged-writs:v7:cc p) + %v3 ``chat-paged-writs-3+(v6:paged-writs:v7:cc p) + %v4 ``chat-paged-writs-4+`paged-writs:v7:cv`p == =/ =writs:c %+ gas:on:writs:c *writs:c @@ -293,7 +293,7 @@ ++ get-around |= [mode=?(%light %heavy) ver=?(%v0 %v1 %v2 %v3 %v4) =time count=@ud] ~> %spin.['libdm-get-around'] - ^- (unit (unit cage)) + ^- (unit (unit rail:guardian)) =/ older (bat:mope wit.pac `time count) =/ newer (tab:on:writs:c wit.pac `time count) =/ writ (get:on:writs:c wit.pac time) @@ -323,7 +323,7 @@ ++ peek |= [care=@tas ver=?(%v0 %v1 %v2 %v3 %v4) =(pole knot)] ~> %spin.['libdm-peek'] - ^- (unit (unit cage)) + ^- (unit (unit rail:guardian)) =* on on:writs:c ?+ pole [~ ~] :: @@ -354,7 +354,7 @@ =/ time (slav %ud time.pole) =/ count (slav %ud count.pole) =/ entry (get ship `@da`time) - ?~ entry ``chat-paged-writs+!>(*paged-writs:c) + ?~ entry ``chat-paged-writs+*paged-writs:v3:cv (get-around mode.pole ver time.u.entry count) :: [%range start=@ end=@ mode=?(%light %heavy) ~] @@ -392,17 +392,17 @@ =/ writ=(may:c writ:c) writ:(got ship `@da`time) ?: ?=(%| -.writ) [~ ~] ?- ver - %v0 ``writ+!>((v3:writ:v5:cc (v5:writ:v7:cc +.writ))) - %v1 ``chat-writ-1+!>((v4:writ:v5:cc (v5:writ:v7:cc +.writ))) - %v2 ``chat-writ-2+!>((v5:writ:v7:cc +.writ)) - %v3 ``chat-writ-3+!>((mind:v7:cv writ v6:writ:v7:cc)) - %v4 ``chat-writ-4+!>(`(may:v7:cv writ:v7:cv)`writ) + %v0 ``writ+(v3:writ:v5:cc (v5:writ:v7:cc +.writ)) + %v1 ``chat-writ-1+(v4:writ:v5:cc (v5:writ:v7:cc +.writ)) + %v2 ``chat-writ-2+(v5:writ:v7:cc +.writ) + %v3 ``chat-writ-3+(mind:v7:cv writ v6:writ:v7:cc) + %v4 ``chat-writ-4+`(may:v7:cv writ:v7:cv)`writ == =/ has-writ ?: ?=(?(%v0 %v1 %v2) ver) ?~((get ship `@da`time) | &) ?~ entry=(get ship `@da`time) | !?=(%| -.writ.u.entry) - ``loob+!>(has-writ) + ``loob+has-writ == :: ++ search diff --git a/desk/lib/guardian.hoon b/desk/lib/guardian.hoon index 73948ea9da..6ff87f7043 100644 --- a/desk/lib/guardian.hoon +++ b/desk/lib/guardian.hoon @@ -26,14 +26,17 @@ /% chat-paged-writs-1 %chat-paged-writs-1 /% chat-paged-writs-2 %chat-paged-writs-2 /% chat-paged-writs-3 %chat-paged-writs-3 +/% chat-paged-writs-4 %chat-paged-writs-4 /% chat-scam %chat-scam /% chat-scam-1 %chat-scam-1 /% chat-scam-2 %chat-scam-2 /% chat-scam-3 %chat-scam-3 +/% chat-scam-4 %chat-scam-4 /% chat-scan %chat-scan /% chat-scan-1 %chat-scan-1 /% chat-scan-2 %chat-scan-2 /% chat-scan-3 %chat-scan-3 +/% chat-scan-4 %chat-scan-4 /% chat-toggle-message %chat-toggle-message /% chat-unblocked-by %chat-unblocked-by /% chat-unread-update %chat-unread-update @@ -41,6 +44,7 @@ /% chat-writ-1 %chat-writ-1 /% chat-writ-2 %chat-writ-2 /% chat-writ-3 %chat-writ-3 +/% chat-writ-4 %chat-writ-4 /% clubs %clubs /% epic %epic /% hidden-messages %hidden-messages @@ -92,14 +96,17 @@ [%chat-paged-writs-1 $+(chat-paged-writs-1 _*vale:chat-paged-writs-1)] [%chat-paged-writs-2 $+(chat-paged-writs-2 _*vale:chat-paged-writs-2)] [%chat-paged-writs-3 $+(chat-paged-writs-3 _*vale:chat-paged-writs-3)] + [%chat-paged-writs-4 $+(chat-paged-writs-4 _*vale:chat-paged-writs-4)] [%chat-scam $+(chat-scam _*vale:chat-scam)] [%chat-scam-1 $+(chat-scam-1 _*vale:chat-scam-1)] [%chat-scam-2 $+(chat-scam-2 _*vale:chat-scam-2)] [%chat-scam-3 $+(chat-scam-3 _*vale:chat-scam-3)] + [%chat-scam-4 $+(chat-scam-4 _*vale:chat-scam-4)] [%chat-scan $+(chat-scan _*vale:chat-scan)] [%chat-scan-1 $+(chat-scan-1 _*vale:chat-scan-1)] [%chat-scan-2 $+(chat-scan-2 _*vale:chat-scan-2)] [%chat-scan-3 $+(chat-scan-3 _*vale:chat-scan-3)] + [%chat-scan-4 $+(chat-scan-4 _*vale:chat-scan-4)] [%chat-toggle-message $+(chat-toggle-message _*vale:chat-toggle-message)] [%chat-unblocked-by $+(chat-unblocked-by _*vale:chat-unblocked-by)] [%chat-unread-update $+(chat-unread-update _*vale:chat-unread-update)] @@ -107,6 +114,7 @@ [%chat-writ-1 $+(chat-writ-1 _*vale:chat-writ-1)] [%chat-writ-2 $+(chat-writ-2 _*vale:chat-writ-2)] [%chat-writ-3 $+(chat-writ-3 _*vale:chat-writ-3)] + [%chat-writ-4 $+(chat-writ-4 _*vale:chat-writ-4)] [%clubs $+(clubs _*vale:clubs)] [%epic $+(epic _*vale:epic)] [%hidden-messages $+(hidden-messages _*vale:hidden-messages)] @@ -158,14 +166,17 @@ %chat-paged-writs-1 [-.rail !>(+.rail)] %chat-paged-writs-2 [-.rail !>(+.rail)] %chat-paged-writs-3 [-.rail !>(+.rail)] + %chat-paged-writs-4 [-.rail !>(+.rail)] %chat-scam [-.rail !>(+.rail)] %chat-scam-1 [-.rail !>(+.rail)] %chat-scam-2 [-.rail !>(+.rail)] %chat-scam-3 [-.rail !>(+.rail)] + %chat-scam-4 [-.rail !>(+.rail)] %chat-scan [-.rail !>(+.rail)] %chat-scan-1 [-.rail !>(+.rail)] %chat-scan-2 [-.rail !>(+.rail)] %chat-scan-3 [-.rail !>(+.rail)] + %chat-scan-4 [-.rail !>(+.rail)] %chat-toggle-message [-.rail !>(+.rail)] %chat-unblocked-by [-.rail !>(+.rail)] %chat-unread-update [-.rail !>(+.rail)] @@ -173,6 +184,7 @@ %chat-writ-1 [-.rail !>(+.rail)] %chat-writ-2 [-.rail !>(+.rail)] %chat-writ-3 [-.rail !>(+.rail)] + %chat-writ-4 [-.rail !>(+.rail)] %clubs [-.rail !>(+.rail)] %epic [-.rail !>(+.rail)] %hidden-messages [-.rail !>(+.rail)] From 72102b659a68322274f568351df915c07f97fe68 Mon Sep 17 00:00:00 2001 From: fang Date: Fri, 17 Apr 2026 15:05:46 +0200 Subject: [PATCH 03/20] guardian: split out imports+defs into gen'ed code Adds a +groups!rail generator, which generates a file, intended to live at /lib/rail.hoon, which imports all the desk's marks and incorporates them into the $rail type and its helpers. --- desk/gen/rail.hoon | 101 ++++ desk/lib/guardian.hoon | 205 +------ desk/lib/rail.hoon | 1273 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1375 insertions(+), 204 deletions(-) create mode 100644 desk/gen/rail.hoon create mode 100644 desk/lib/rail.hoon diff --git a/desk/gen/rail.hoon b/desk/gen/rail.hoon new file mode 100644 index 0000000000..0e5a199976 --- /dev/null +++ b/desk/gen/rail.hoon @@ -0,0 +1,101 @@ +:: call as *%%%/groups/0/lib/rail/hoon +groups!rail +:: +::TODO investigate adding a "meta-build" for rune that evaluates the file +:: to obtain a hoon ast, which it then compiles into the result +:: +:- %say +|= $: [now=@da eny=@uvJ bec=beak] + ~ + bcls=$~(& ?) + == +:- %hoon +^- @t +:: +=/ snor :: ordered insert + |* [a=* b=(list) c=$-([* *] ?)] + ?~ b [a]~ + ?: (c a i.b) [a b] + [i.b $(b t.b)] +:: +=/ [maz=(list mark) max=@ud] + %+ roll + .^((list path) %ct (en-beam bec(r da+now) /mar)) + |= [pax=path [maz=(list mark) max=@ud]] + ?. =(%hoon (rear pax)) [maz max] + =/ mar=mark (rap 3 (join '-' (snip (slag 1 pax)))) + ?: |(=('rail' mar) =('de-rail' mar) =('cage' mar) =('unsafe' mar)) + ::TODO be more clever? + %- (slog (cat 3 'rail dropping "reserved" name: %' mar) ~) + [maz max] + [(snor mar maz aor) (^max (met 3 mar) max)] +:: +%+ rap 3 +:~ ''' + :: THIS FILE IS AUTO-GENERATED, DO NOT MODIFY IT DIRECTLY + :: + :: to update it, pulling in *all* marks in your current %groups desk, run: + :: *%%%/groups/0/lib/rail/hoon +groups!rail + :: + :: BE VERY CAREFUL, if there are mark files in your desk that are not in + :: the "stock" distribution, the generated file will fail to built on + :: other ships. CI *should* catch this, but remain mindful. + :: + :: specifies a $rail type, a "typed $cage" containing all the desk's marks + :: and a +de-rail helper for turning that back into a $cage. + :: + ''' + :: + %^ rap 3 '\0a' + %+ join '\0a' + %+ turn maz + |= m=mark + =+ gap=(fil 3 (add 2 (sub max (met 3 m))) ' ') + (rap 3 '/% ' m gap '%' m ~) + '\0a' + :: + ''' + :: + ^? + |% + +$ rail $+ rail + $% [%unsafe =cage] + :: + ''' + :: + %^ rap 3 '\0a ' + %+ join '\0a ' + %+ turn maz + |= m=mark + =+ gap=(fil 3 (add 2 (sub max (met 3 m))) ' ') + %+ rap 3 + :~ '$: %' m gap + ?.(bcls '' (rap 3 '$+ ' m gap ~)) + '_*vale:' m gap '==' + == + '\0a' + :: + ''' + == + :: + ++ de-rail + |= =rail + ^- cage + ?- -.rail + %unsafe cage.rail + :: + ''' + :: + %^ rap 3 '\0a ' + %+ join '\0a ' + %+ turn maz + |= m=mark + =+ gap=(fil 3 (add 2 (sub max (met 3 m))) ' ') + (rap 3 '%' m gap '[-.rail !>(+.rail)]' ~) + '\0a' + :: + ''' + == + -- + ''' ::TODO discipline arg? + '\0a' +== \ No newline at end of file diff --git a/desk/lib/guardian.hoon b/desk/lib/guardian.hoon index 6ff87f7043..3c4806ea13 100644 --- a/desk/lib/guardian.hoon +++ b/desk/lib/guardian.hoon @@ -2,212 +2,9 @@ :: :: xx :: -/% noun %noun -/% loob %loob -/% json %json -/% chat-blocked-by %chat-blocked-by -/% chat-changed-writs %chat-changed-writs -/% chat-changed-writs-1 %chat-changed-writs-1 -/% chat-club-action %chat-club-action -/% chat-club-action-0 %chat-club-action-0 -/% chat-club-action-1 %chat-club-action-1 -/% chat-club-action-2 %chat-club-action-2 -/% chat-dm-action %chat-dm-action -/% chat-dm-action-1 %chat-dm-action-1 -/% chat-dm-diff %chat-dm-diff -/% chat-dm-diff-1 %chat-dm-diff-1 -/% chat-dm-diff-2 %chat-dm-diff-2 -/% chat-heads %chat-heads -/% chat-heads-1 %chat-heads-1 -/% chat-heads-2 %chat-heads-2 -/% chat-heads-3 %chat-heads-3 -/% chat-heads-4 %chat-heads-4 -/% chat-paged-writs %chat-paged-writs -/% chat-paged-writs-1 %chat-paged-writs-1 -/% chat-paged-writs-2 %chat-paged-writs-2 -/% chat-paged-writs-3 %chat-paged-writs-3 -/% chat-paged-writs-4 %chat-paged-writs-4 -/% chat-scam %chat-scam -/% chat-scam-1 %chat-scam-1 -/% chat-scam-2 %chat-scam-2 -/% chat-scam-3 %chat-scam-3 -/% chat-scam-4 %chat-scam-4 -/% chat-scan %chat-scan -/% chat-scan-1 %chat-scan-1 -/% chat-scan-2 %chat-scan-2 -/% chat-scan-3 %chat-scan-3 -/% chat-scan-4 %chat-scan-4 -/% chat-toggle-message %chat-toggle-message -/% chat-unblocked-by %chat-unblocked-by -/% chat-unread-update %chat-unread-update -/% chat-unreads %chat-unreads -/% chat-writ-1 %chat-writ-1 -/% chat-writ-2 %chat-writ-2 -/% chat-writ-3 %chat-writ-3 -/% chat-writ-4 %chat-writ-4 -/% clubs %clubs -/% epic %epic -/% hidden-messages %hidden-messages -/% ships %ships -/% writ %writ -/% writ-response %writ-response -/% writ-response-1 %writ-response-1 -/% writ-response-2 %writ-response-2 -/% writ-response-3 %writ-response-3 -/% writ-response-4 %writ-response-4 -:: /% ui-action %ui-action -/% channel-action-1 %channel-action-1 -/% chat-blocked %chat-blocked -/% chat-unblocked %chat-unblocked -/% activity-action %activity-action -/% chat-dm-rsvp %chat-dm-rsvp -/% contact-action-1 %contact-action-1 -/% dm-rsvp %dm-rsvp -/% dm-diff %dm-diff -/% club-action %club-action +/+ *rail :: -/% flag %flag |% -+$ rail $+ rail - $% [%unsafe =cage] - :: - [%flag _*vale:flag] - [%noun _*vale:noun] - [%loob _*vale:loob] - [%json _*vale:json] - [%chat-blocked-by $+(chat-blocked-by _*vale:chat-blocked-by)] - [%chat-changed-writs $+(chat-changed-writs _*vale:chat-changed-writs)] - [%chat-changed-writs-1 $+(chat-changed-writs-1 _*vale:chat-changed-writs-1)] - [%chat-club-action $+(chat-club-action _*vale:chat-club-action)] - [%chat-club-action-0 $+(chat-club-action-0 _*vale:chat-club-action-0)] - [%chat-club-action-1 $+(chat-club-action-1 _*vale:chat-club-action-1)] - [%chat-club-action-2 $+(chat-club-action-2 _*vale:chat-club-action-2)] - [%chat-dm-action $+(chat-dm-action _*vale:chat-dm-action)] - [%chat-dm-action-1 $+(chat-dm-action-1 _*vale:chat-dm-action-1)] - [%chat-dm-diff $+(chat-dm-diff _*vale:chat-dm-diff)] - [%chat-dm-diff-1 $+(chat-dm-diff-1 _*vale:chat-dm-diff-1)] - [%chat-dm-diff-2 $+(chat-dm-diff-2 _*vale:chat-dm-diff-2)] - [%chat-heads $+(chat-heads _*vale:chat-heads)] - [%chat-heads-1 $+(chat-heads-1 _*vale:chat-heads-1)] - [%chat-heads-2 $+(chat-heads-2 _*vale:chat-heads-2)] - [%chat-heads-3 $+(chat-heads-3 _*vale:chat-heads-3)] - [%chat-heads-4 $+(chat-heads-4 _*vale:chat-heads-4)] - [%chat-paged-writs $+(chat-paged-writs _*vale:chat-paged-writs)] - [%chat-paged-writs-1 $+(chat-paged-writs-1 _*vale:chat-paged-writs-1)] - [%chat-paged-writs-2 $+(chat-paged-writs-2 _*vale:chat-paged-writs-2)] - [%chat-paged-writs-3 $+(chat-paged-writs-3 _*vale:chat-paged-writs-3)] - [%chat-paged-writs-4 $+(chat-paged-writs-4 _*vale:chat-paged-writs-4)] - [%chat-scam $+(chat-scam _*vale:chat-scam)] - [%chat-scam-1 $+(chat-scam-1 _*vale:chat-scam-1)] - [%chat-scam-2 $+(chat-scam-2 _*vale:chat-scam-2)] - [%chat-scam-3 $+(chat-scam-3 _*vale:chat-scam-3)] - [%chat-scam-4 $+(chat-scam-4 _*vale:chat-scam-4)] - [%chat-scan $+(chat-scan _*vale:chat-scan)] - [%chat-scan-1 $+(chat-scan-1 _*vale:chat-scan-1)] - [%chat-scan-2 $+(chat-scan-2 _*vale:chat-scan-2)] - [%chat-scan-3 $+(chat-scan-3 _*vale:chat-scan-3)] - [%chat-scan-4 $+(chat-scan-4 _*vale:chat-scan-4)] - [%chat-toggle-message $+(chat-toggle-message _*vale:chat-toggle-message)] - [%chat-unblocked-by $+(chat-unblocked-by _*vale:chat-unblocked-by)] - [%chat-unread-update $+(chat-unread-update _*vale:chat-unread-update)] - [%chat-unreads $+(chat-unreads _*vale:chat-unreads)] - [%chat-writ-1 $+(chat-writ-1 _*vale:chat-writ-1)] - [%chat-writ-2 $+(chat-writ-2 _*vale:chat-writ-2)] - [%chat-writ-3 $+(chat-writ-3 _*vale:chat-writ-3)] - [%chat-writ-4 $+(chat-writ-4 _*vale:chat-writ-4)] - [%clubs $+(clubs _*vale:clubs)] - [%epic $+(epic _*vale:epic)] - [%hidden-messages $+(hidden-messages _*vale:hidden-messages)] - [%ships $+(ships _*vale:ships)] - [%writ $+(writ _*vale:writ)] - [%writ-response $+(writ-response _*vale:writ-response)] - [%writ-response-1 $+(writ-response-1 _*vale:writ-response-1)] - [%writ-response-2 $+(writ-response-2 _*vale:writ-response-2)] - [%writ-response-3 $+(writ-response-3 _*vale:writ-response-3)] - [%writ-response-4 $+(writ-response-4 _*vale:writ-response-4)] - :: [%ui-action $+(ui-action _*vale:ui-action)] - [%channel-action-1 $+(channel-action-1 _*vale:channel-action-1)] - [%chat-blocked $+(chat-blocked _*vale:chat-blocked)] - [%chat-unblocked $+(chat-unblocked _*vale:chat-unblocked)] - [%activity-action $+(activity-action _*vale:activity-action)] - [%chat-dm-rsvp $+(chat-dm-rsvp _*vale:chat-dm-rsvp)] - [%contact-action-1 $+(contact-action-1 _*vale:contact-action-1)] - [%dm-rsvp $+(dm-rsvp _*vale:dm-rsvp)] - [%dm-diff $+(dm-diff _*vale:dm-diff)] - [%club-action $+(club-action _*vale:club-action)] - == -++ de-rail - |= =rail - ^- cage - ?- -.rail - %unsafe cage.rail - %noun [-.rail !>(+.rail)] - %loob [-.rail !>(+.rail)] - %flag [-.rail !>(+.rail)] - %json [-.rail !>(+.rail)] - %chat-blocked-by [-.rail !>(+.rail)] - %chat-changed-writs [-.rail !>(+.rail)] - %chat-changed-writs-1 [-.rail !>(+.rail)] - %chat-club-action [-.rail !>(+.rail)] - %chat-club-action-0 [-.rail !>(+.rail)] - %chat-club-action-1 [-.rail !>(+.rail)] - %chat-club-action-2 [-.rail !>(+.rail)] - %chat-dm-action [-.rail !>(+.rail)] - %chat-dm-action-1 [-.rail !>(+.rail)] - %chat-dm-diff [-.rail !>(+.rail)] - %chat-dm-diff-1 [-.rail !>(+.rail)] - %chat-dm-diff-2 [-.rail !>(+.rail)] - %chat-heads [-.rail !>(+.rail)] - %chat-heads-1 [-.rail !>(+.rail)] - %chat-heads-2 [-.rail !>(+.rail)] - %chat-heads-3 [-.rail !>(+.rail)] - %chat-heads-4 [-.rail !>(+.rail)] - %chat-paged-writs [-.rail !>(+.rail)] - %chat-paged-writs-1 [-.rail !>(+.rail)] - %chat-paged-writs-2 [-.rail !>(+.rail)] - %chat-paged-writs-3 [-.rail !>(+.rail)] - %chat-paged-writs-4 [-.rail !>(+.rail)] - %chat-scam [-.rail !>(+.rail)] - %chat-scam-1 [-.rail !>(+.rail)] - %chat-scam-2 [-.rail !>(+.rail)] - %chat-scam-3 [-.rail !>(+.rail)] - %chat-scam-4 [-.rail !>(+.rail)] - %chat-scan [-.rail !>(+.rail)] - %chat-scan-1 [-.rail !>(+.rail)] - %chat-scan-2 [-.rail !>(+.rail)] - %chat-scan-3 [-.rail !>(+.rail)] - %chat-scan-4 [-.rail !>(+.rail)] - %chat-toggle-message [-.rail !>(+.rail)] - %chat-unblocked-by [-.rail !>(+.rail)] - %chat-unread-update [-.rail !>(+.rail)] - %chat-unreads [-.rail !>(+.rail)] - %chat-writ-1 [-.rail !>(+.rail)] - %chat-writ-2 [-.rail !>(+.rail)] - %chat-writ-3 [-.rail !>(+.rail)] - %chat-writ-4 [-.rail !>(+.rail)] - %clubs [-.rail !>(+.rail)] - %epic [-.rail !>(+.rail)] - %hidden-messages [-.rail !>(+.rail)] - %ships [-.rail !>(+.rail)] - %writ [-.rail !>(+.rail)] - %writ-response [-.rail !>(+.rail)] - %writ-response-1 [-.rail !>(+.rail)] - %writ-response-2 [-.rail !>(+.rail)] - %writ-response-3 [-.rail !>(+.rail)] - %writ-response-4 [-.rail !>(+.rail)] - :: %ui-action [-.rail !>(+.rail)] - %channel-action-1 [-.rail !>(+.rail)] - %chat-blocked [-.rail !>(+.rail)] - %chat-unblocked [-.rail !>(+.rail)] - %activity-action [-.rail !>(+.rail)] - %chat-dm-rsvp [-.rail !>(+.rail)] - %contact-action-1 [-.rail !>(+.rail)] - %dm-rsvp [-.rail !>(+.rail)] - %dm-diff [-.rail !>(+.rail)] - %club-action [-.rail !>(+.rail)] - == -:: -:: +$ card (wind note gift) +$ note $% $<(%agent note:agent:gall) diff --git a/desk/lib/rail.hoon b/desk/lib/rail.hoon new file mode 100644 index 0000000000..b4e04965dd --- /dev/null +++ b/desk/lib/rail.hoon @@ -0,0 +1,1273 @@ +:: THIS FILE IS AUTO-GENERATED, DO NOT MODIFY IT DIRECTLY +:: +:: to update it, pulling in all marks in your current groups desk, run: +:: *%%%/groups/0/lib/rail/hoon +groups!rail +:: +:: BE VERY CAREFUL, if there are mark files in your desk that are not in +:: the "stock" distribution, the generated file will fail to built on +:: other ships. CI *should* catch this, but remain mindful. +:: +/% activity-action %activity-action +/% activity-allowed %activity-allowed +/% activity-event %activity-event +/% activity-feed %activity-feed +/% activity-feed-5 %activity-feed-5 +/% activity-feed-init %activity-feed-init +/% activity-feed-init-5 %activity-feed-init-5 +/% activity-full %activity-full +/% activity-full-1 %activity-full-1 +/% activity-full-4 %activity-full-4 +/% activity-settings %activity-settings +/% activity-stream %activity-stream +/% activity-summary %activity-summary +/% activity-summary-1 %activity-summary-1 +/% activity-summary-4 %activity-summary-4 +/% activity-summary-pairs-4 %activity-summary-pairs-4 +/% activity-update %activity-update +/% activity-update-1 %activity-update-1 +/% activity-update-4 %activity-update-4 +/% aqua-effect %aqua-effect +/% atom %atom +/% bait-acknowledge %bait-acknowledge +/% bait-describe %bait-describe +/% bait-undescribe %bait-undescribe +/% bait-update %bait-update +/% bait-update-group %bait-update-group +/% bark-add-recipient %bark-add-recipient +/% bark-receive-summary %bark-receive-summary +/% bark-remove-recipient %bark-remove-recipient +/% belt %belt +/% bill %bill +/% blit %blit +/% broadcaster-action %broadcaster-action +/% channel-action %channel-action +/% channel-action-1 %channel-action-1 +/% channel-action-2 %channel-action-2 +/% channel-changed-posts %channel-changed-posts +/% channel-changed-posts-1 %channel-changed-posts-1 +/% channel-checkpoint %channel-checkpoint +/% channel-command %channel-command +/% channel-denied %channel-denied +/% channel-heads %channel-heads +/% channel-heads-2 %channel-heads-2 +/% channel-heads-3 %channel-heads-3 +/% channel-heads-4 %channel-heads-4 +/% channel-leave %channel-leave +/% channel-logs %channel-logs +/% channel-perm %channel-perm +/% channel-post %channel-post +/% channel-post-2 %channel-post-2 +/% channel-post-3 %channel-post-3 +/% channel-post-4 %channel-post-4 +/% channel-post-5 %channel-post-5 +/% channel-posts %channel-posts +/% channel-posts-2 %channel-posts-2 +/% channel-posts-3 %channel-posts-3 +/% channel-posts-4 %channel-posts-4 +/% channel-posts-5 %channel-posts-5 +/% channel-preview %channel-preview +/% channel-preview-1 %channel-preview-1 +/% channel-replies %channel-replies +/% channel-replies-2 %channel-replies-2 +/% channel-replies-3 %channel-replies-3 +/% channel-replies-4 %channel-replies-4 +/% channel-replies-5 %channel-replies-5 +/% channel-reply %channel-reply +/% channel-reply-2 %channel-reply-2 +/% channel-request-join %channel-request-join +/% channel-response %channel-response +/% channel-response-1 %channel-response-1 +/% channel-response-2 %channel-response-2 +/% channel-response-3 %channel-response-3 +/% channel-response-4 %channel-response-4 +/% channel-response-5 %channel-response-5 +/% channel-said %channel-said +/% channel-said-1 %channel-said-1 +/% channel-said-2 %channel-said-2 +/% channel-said-3 %channel-said-3 +/% channel-scam %channel-scam +/% channel-scam-2 %channel-scam-2 +/% channel-scam-3 %channel-scam-3 +/% channel-scam-4 %channel-scam-4 +/% channel-scan %channel-scan +/% channel-scan-2 %channel-scan-2 +/% channel-scan-3 %channel-scan-3 +/% channel-scan-4 %channel-scan-4 +/% channel-simple-post %channel-simple-post +/% channel-simple-posts %channel-simple-posts +/% channel-simple-replies %channel-simple-replies +/% channel-simple-reply %channel-simple-reply +/% channel-simple-response %channel-simple-response +/% channel-unread-update %channel-unread-update +/% channel-unreads %channel-unreads +/% channel-update %channel-update +/% channels %channels +/% channels-2 %channels-2 +/% channels-3 %channels-3 +/% channels-4 %channels-4 +/% channels-5 %channels-5 +/% chat-block-ship %chat-block-ship +/% chat-blocked %chat-blocked +/% chat-blocked-by %chat-blocked-by +/% chat-changed-writs %chat-changed-writs +/% chat-changed-writs-1 %chat-changed-writs-1 +/% chat-club-action %chat-club-action +/% chat-club-action-0 %chat-club-action-0 +/% chat-club-action-1 %chat-club-action-1 +/% chat-club-action-2 %chat-club-action-2 +/% chat-club-create %chat-club-create +/% chat-dm-action %chat-dm-action +/% chat-dm-action-1 %chat-dm-action-1 +/% chat-dm-action-2 %chat-dm-action-2 +/% chat-dm-archive %chat-dm-archive +/% chat-dm-diff %chat-dm-diff +/% chat-dm-diff-1 %chat-dm-diff-1 +/% chat-dm-diff-2 %chat-dm-diff-2 +/% chat-dm-rsvp %chat-dm-rsvp +/% chat-heads %chat-heads +/% chat-heads-1 %chat-heads-1 +/% chat-heads-2 %chat-heads-2 +/% chat-heads-3 %chat-heads-3 +/% chat-heads-4 %chat-heads-4 +/% chat-negotiate %chat-negotiate +/% chat-paged-writs %chat-paged-writs +/% chat-paged-writs-1 %chat-paged-writs-1 +/% chat-paged-writs-2 %chat-paged-writs-2 +/% chat-paged-writs-3 %chat-paged-writs-3 +/% chat-paged-writs-4 %chat-paged-writs-4 +/% chat-remark-action %chat-remark-action +/% chat-scam %chat-scam +/% chat-scam-1 %chat-scam-1 +/% chat-scam-2 %chat-scam-2 +/% chat-scam-3 %chat-scam-3 +/% chat-scam-4 %chat-scam-4 +/% chat-scan %chat-scan +/% chat-scan-1 %chat-scan-1 +/% chat-scan-2 %chat-scan-2 +/% chat-scan-3 %chat-scan-3 +/% chat-scan-4 %chat-scan-4 +/% chat-toggle-message %chat-toggle-message +/% chat-unblock-ship %chat-unblock-ship +/% chat-unblocked %chat-unblocked +/% chat-unblocked-by %chat-unblocked-by +/% chat-unread-update %chat-unread-update +/% chat-unreads %chat-unreads +/% chat-writ-1 %chat-writ-1 +/% chat-writ-2 %chat-writ-2 +/% chat-writ-3 %chat-writ-3 +/% chat-writ-4 %chat-writ-4 +/% chat-writs %chat-writs +/% club-action %club-action +/% clubs %clubs +/% contact %contact +/% contact-0 %contact-0 +/% contact-1 %contact-1 +/% contact-action %contact-action +/% contact-action-0 %contact-action-0 +/% contact-action-1 %contact-action-1 +/% contact-book %contact-book +/% contact-book-0 %contact-book-0 +/% contact-changed-contacts %contact-changed-contacts +/% contact-changed-pages %contact-changed-pages +/% contact-directory %contact-directory +/% contact-directory-0 %contact-directory-0 +/% contact-news %contact-news +/% contact-page %contact-page +/% contact-page-0 %contact-page-0 +/% contact-page-1 %contact-page-1 +/% contact-response-0 %contact-response-0 +/% contact-rolodex %contact-rolodex +/% contact-update %contact-update +/% contact-update-0 %contact-update-0 +/% contact-update-1 %contact-update-1 +/% css %css +/% curio %curio +/% curios-diff %curios-diff +/% diary-action %diary-action +/% diary-action-0 %diary-action-0 +/% diary-action-1 %diary-action-1 +/% diary-action-2 %diary-action-2 +/% diary-action-3 %diary-action-3 +/% diary-brief-update %diary-brief-update +/% diary-briefs %diary-briefs +/% diary-create %diary-create +/% diary-denied %diary-denied +/% diary-leave %diary-leave +/% diary-logs %diary-logs +/% diary-logs-0 %diary-logs-0 +/% diary-logs-1 %diary-logs-1 +/% diary-logs-2 %diary-logs-2 +/% diary-logs-3 %diary-logs-3 +/% diary-note %diary-note +/% diary-notes %diary-notes +/% diary-outline %diary-outline +/% diary-outlines %diary-outlines +/% diary-perm %diary-perm +/% diary-quips %diary-quips +/% diary-remark-action %diary-remark-action +/% diary-said %diary-said +/% diary-update %diary-update +/% diary-update-0 %diary-update-0 +/% diary-update-1 %diary-update-1 +/% diary-update-2 %diary-update-2 +/% diary-update-3 %diary-update-3 +/% dm-action %dm-action +/% dm-archive %dm-archive +/% dm-diff %dm-diff +/% dm-rsvp %dm-rsvp +/% dm-unarchive %dm-unarchive +/% docket-0 %docket-0 +/% dude %dude +/% dummy %dummy +/% emojimart %emojimart +/% epic %epic +/% flag %flag +/% flags %flags +/% foreign-1 %foreign-1 +/% foreign-2 %foreign-2 +/% foreigns-1 %foreigns-1 +/% gangs %gangs +/% group %group +/% group-1 %group-1 +/% group-2 %group-2 +/% group-action %group-action +/% group-action-0 %group-action-0 +/% group-action-1 %group-action-1 +/% group-action-2 %group-action-2 +/% group-action-3 %group-action-3 +/% group-action-4 %group-action-4 +/% group-cancel %group-cancel +/% group-changed-groups-1 %group-changed-groups-1 +/% group-changed-groups-2 %group-changed-groups-2 +/% group-command %group-command +/% group-create %group-create +/% group-create-thread %group-create-thread +/% group-foreign-1 %group-foreign-1 +/% group-foreign-2 %group-foreign-2 +/% group-init %group-init +/% group-init-0 %group-init-0 +/% group-init-1 %group-init-1 +/% group-init-2 %group-init-2 +/% group-init-3 %group-init-3 +/% group-init-4 %group-init-4 +/% group-invite %group-invite +/% group-invite-1 %group-invite-1 +/% group-invites %group-invites +/% group-invites-1 %group-invites-1 +/% group-join %group-join +/% group-knock %group-knock +/% group-leave %group-leave +/% group-log %group-log +/% group-preview %group-preview +/% group-preview-1 %group-preview-1 +/% group-preview-2 %group-preview-2 +/% group-preview-3 %group-preview-3 +/% group-preview-update %group-preview-update +/% group-previews %group-previews +/% group-previews-1 %group-previews-1 +/% group-rescind %group-rescind +/% group-response-1 %group-response-1 +/% group-token %group-token +/% group-ui %group-ui +/% group-ui-1 %group-ui-1 +/% group-ui-2 %group-ui-2 +/% group-update %group-update +/% grouper-answer-enabled %grouper-answer-enabled +/% grouper-ask-enabled %grouper-ask-enabled +/% grouper-disable %grouper-disable +/% grouper-enable %grouper-enable +/% groups %groups +/% groups-1 %groups-1 +/% groups-2 %groups-2 +/% groups-ui %groups-ui +/% groups-ui-1 %groups-ui-1 +/% groups-ui-2 %groups-ui-2 +/% growl-summarize %growl-summarize +/% hark-yarn %hark-yarn +/% heap-action %heap-action +/% heap-action-0 %heap-action-0 +/% heap-action-1 %heap-action-1 +/% heap-brief-update %heap-brief-update +/% heap-briefs %heap-briefs +/% heap-create %heap-create +/% heap-curios %heap-curios +/% heap-denied %heap-denied +/% heap-leave %heap-leave +/% heap-logs %heap-logs +/% heap-logs-0 %heap-logs-0 +/% heap-logs-1 %heap-logs-1 +/% heap-perm %heap-perm +/% heap-remark-action %heap-remark-action +/% heap-said %heap-said +/% heap-update %heap-update +/% heap-update-0 %heap-update-0 +/% heap-update-1 %heap-update-1 +/% hi-ship %hi-ship +/% hidden-messages %hidden-messages +/% hidden-posts %hidden-posts +/% holt %holt +/% hook-action-0 %hook-action-0 +/% hook-channel-preview %hook-channel-preview +/% hook-full %hook-full +/% hook-response-0 %hook-response-0 +/% hook-setup-template %hook-setup-template +/% hook-setup-template-args %hook-setup-template-args +/% hook-template %hook-template +/% hoon %hoon +/% htm %htm +/% html %html +/% httr %httr +/% hymn %hymn +/% invite-decline %invite-decline +/% jam %jam +/% jpg %jpg +/% js %js +/% json %json +/% json-rpc-response %json-rpc-response +/% kelvin %kelvin +/% kiln-approve-merge %kiln-approve-merge +/% kiln-jump %kiln-jump +/% kiln-jump-ask %kiln-jump-ask +/% kiln-jump-opt %kiln-jump-opt +/% kiln-sync-update %kiln-sync-update +/% language-server-rpc-notification %language-server-rpc-notification +/% language-server-rpc-request %language-server-rpc-request +/% language-server-rpc-response %language-server-rpc-response +/% lanyard-command-1 %lanyard-command-1 +/% lanyard-query-1 %lanyard-query-1 +/% lanyard-update-1 %lanyard-update-1 +/% loob %loob +/% migrate-map %migrate-map +/% mime %mime +/% nest %nest +/% notes-diff %notes-diff +/% notify-client-action %notify-client-action +/% notify-provider-action %notify-provider-action +/% notify-update %notify-update +/% notify-update-1 %notify-update-1 +/% noun %noun +/% noun-autodiff %noun-autodiff +/% path %path +/% png %png +/% post-toggle %post-toggle +/% purl %purl +/% reel-bait %reel-bait +/% reel-bite %reel-bite +/% reel-command %reel-command +/% reel-confirmation %reel-confirmation +/% reel-describe %reel-describe +/% reel-description %reel-description +/% reel-give-token-link %reel-give-token-link +/% reel-metadata %reel-metadata +/% reel-undescribe %reel-undescribe +/% reel-want-token-link %reel-want-token-link +/% release %release +/% reset-group-perms %reset-group-perms +/% ship %ship +/% ships %ships +/% sigil %sigil +/% sole-action %sole-action +/% sole-effect %sole-effect +/% stash %stash +/% svg %svg +/% tang %tang +/% tape %tape +/% thread-done %thread-done +/% thread-fail %thread-fail +/% toc %toc +/% toggle-post %toggle-post +/% txt %txt +/% txt-diff %txt-diff +/% udon %udon +/% ui-action %ui-action +/% ui-add-contact-suggestions %ui-add-contact-suggestions +/% ui-heads %ui-heads +/% ui-heads-2 %ui-heads-2 +/% ui-heads-3 %ui-heads-3 +/% ui-heads-4 %ui-heads-4 +/% ui-hide-contact %ui-hide-contact +/% ui-import-pals %ui-import-pals +/% ui-init %ui-init +/% ui-init-1 %ui-init-1 +/% ui-init-2 %ui-init-2 +/% ui-init-3 %ui-init-3 +/% ui-init-4 %ui-init-4 +/% ui-init-5 %ui-init-5 +/% ui-init-6 %ui-init-6 +/% ui-init-7 %ui-init-7 +/% ui-pins %ui-pins +/% ui-show-contact %ui-show-contact +/% ui-vita %ui-vita +/% ui-vita-toggle %ui-vita-toggle +/% umd %umd +/% urb %urb +/% urbit %urbit +/% verb-event %verb-event +/% verb-event-plus %verb-event-plus +/% vere %vere +/% verifier-result %verifier-result +/% verifier-update %verifier-update +/% verifier-user-command %verifier-user-command +/% verifier-user-query %verifier-user-query +/% volume-set %volume-set +/% volume-value %volume-value +/% wasm %wasm +/% webmanifest %webmanifest +/% woff2 %woff2 +/% writ %writ +/% writ-diff %writ-diff +/% writ-response %writ-response +/% writ-response-1 %writ-response-1 +/% writ-response-2 %writ-response-2 +/% writ-response-3 %writ-response-3 +/% writ-response-4 %writ-response-4 +/% xhtml %xhtml +/% xml %xml +:: +^? +|% ++$ rail $+ rail + $% [%unsafe =cage] + :: + $: %activity-action $+ activity-action _*vale:activity-action == + $: %activity-allowed $+ activity-allowed _*vale:activity-allowed == + $: %activity-event $+ activity-event _*vale:activity-event == + $: %activity-feed $+ activity-feed _*vale:activity-feed == + $: %activity-feed-5 $+ activity-feed-5 _*vale:activity-feed-5 == + $: %activity-feed-init $+ activity-feed-init _*vale:activity-feed-init == + $: %activity-feed-init-5 $+ activity-feed-init-5 _*vale:activity-feed-init-5 == + $: %activity-full $+ activity-full _*vale:activity-full == + $: %activity-full-1 $+ activity-full-1 _*vale:activity-full-1 == + $: %activity-full-4 $+ activity-full-4 _*vale:activity-full-4 == + $: %activity-settings $+ activity-settings _*vale:activity-settings == + $: %activity-stream $+ activity-stream _*vale:activity-stream == + $: %activity-summary $+ activity-summary _*vale:activity-summary == + $: %activity-summary-1 $+ activity-summary-1 _*vale:activity-summary-1 == + $: %activity-summary-4 $+ activity-summary-4 _*vale:activity-summary-4 == + $: %activity-summary-pairs-4 $+ activity-summary-pairs-4 _*vale:activity-summary-pairs-4 == + $: %activity-update $+ activity-update _*vale:activity-update == + $: %activity-update-1 $+ activity-update-1 _*vale:activity-update-1 == + $: %activity-update-4 $+ activity-update-4 _*vale:activity-update-4 == + $: %aqua-effect $+ aqua-effect _*vale:aqua-effect == + $: %atom $+ atom _*vale:atom == + $: %bait-acknowledge $+ bait-acknowledge _*vale:bait-acknowledge == + $: %bait-describe $+ bait-describe _*vale:bait-describe == + $: %bait-undescribe $+ bait-undescribe _*vale:bait-undescribe == + $: %bait-update $+ bait-update _*vale:bait-update == + $: %bait-update-group $+ bait-update-group _*vale:bait-update-group == + $: %bark-add-recipient $+ bark-add-recipient _*vale:bark-add-recipient == + $: %bark-receive-summary $+ bark-receive-summary _*vale:bark-receive-summary == + $: %bark-remove-recipient $+ bark-remove-recipient _*vale:bark-remove-recipient == + $: %belt $+ belt _*vale:belt == + $: %bill $+ bill _*vale:bill == + $: %blit $+ blit _*vale:blit == + $: %broadcaster-action $+ broadcaster-action _*vale:broadcaster-action == + $: %channel-action $+ channel-action _*vale:channel-action == + $: %channel-action-1 $+ channel-action-1 _*vale:channel-action-1 == + $: %channel-action-2 $+ channel-action-2 _*vale:channel-action-2 == + $: %channel-changed-posts $+ channel-changed-posts _*vale:channel-changed-posts == + $: %channel-changed-posts-1 $+ channel-changed-posts-1 _*vale:channel-changed-posts-1 == + $: %channel-checkpoint $+ channel-checkpoint _*vale:channel-checkpoint == + $: %channel-command $+ channel-command _*vale:channel-command == + $: %channel-denied $+ channel-denied _*vale:channel-denied == + $: %channel-heads $+ channel-heads _*vale:channel-heads == + $: %channel-heads-2 $+ channel-heads-2 _*vale:channel-heads-2 == + $: %channel-heads-3 $+ channel-heads-3 _*vale:channel-heads-3 == + $: %channel-heads-4 $+ channel-heads-4 _*vale:channel-heads-4 == + $: %channel-leave $+ channel-leave _*vale:channel-leave == + $: %channel-logs $+ channel-logs _*vale:channel-logs == + $: %channel-perm $+ channel-perm _*vale:channel-perm == + $: %channel-post $+ channel-post _*vale:channel-post == + $: %channel-post-2 $+ channel-post-2 _*vale:channel-post-2 == + $: %channel-post-3 $+ channel-post-3 _*vale:channel-post-3 == + $: %channel-post-4 $+ channel-post-4 _*vale:channel-post-4 == + $: %channel-post-5 $+ channel-post-5 _*vale:channel-post-5 == + $: %channel-posts $+ channel-posts _*vale:channel-posts == + $: %channel-posts-2 $+ channel-posts-2 _*vale:channel-posts-2 == + $: %channel-posts-3 $+ channel-posts-3 _*vale:channel-posts-3 == + $: %channel-posts-4 $+ channel-posts-4 _*vale:channel-posts-4 == + $: %channel-posts-5 $+ channel-posts-5 _*vale:channel-posts-5 == + $: %channel-preview $+ channel-preview _*vale:channel-preview == + $: %channel-preview-1 $+ channel-preview-1 _*vale:channel-preview-1 == + $: %channel-replies $+ channel-replies _*vale:channel-replies == + $: %channel-replies-2 $+ channel-replies-2 _*vale:channel-replies-2 == + $: %channel-replies-3 $+ channel-replies-3 _*vale:channel-replies-3 == + $: %channel-replies-4 $+ channel-replies-4 _*vale:channel-replies-4 == + $: %channel-replies-5 $+ channel-replies-5 _*vale:channel-replies-5 == + $: %channel-reply $+ channel-reply _*vale:channel-reply == + $: %channel-reply-2 $+ channel-reply-2 _*vale:channel-reply-2 == + $: %channel-request-join $+ channel-request-join _*vale:channel-request-join == + $: %channel-response $+ channel-response _*vale:channel-response == + $: %channel-response-1 $+ channel-response-1 _*vale:channel-response-1 == + $: %channel-response-2 $+ channel-response-2 _*vale:channel-response-2 == + $: %channel-response-3 $+ channel-response-3 _*vale:channel-response-3 == + $: %channel-response-4 $+ channel-response-4 _*vale:channel-response-4 == + $: %channel-response-5 $+ channel-response-5 _*vale:channel-response-5 == + $: %channel-said $+ channel-said _*vale:channel-said == + $: %channel-said-1 $+ channel-said-1 _*vale:channel-said-1 == + $: %channel-said-2 $+ channel-said-2 _*vale:channel-said-2 == + $: %channel-said-3 $+ channel-said-3 _*vale:channel-said-3 == + $: %channel-scam $+ channel-scam _*vale:channel-scam == + $: %channel-scam-2 $+ channel-scam-2 _*vale:channel-scam-2 == + $: %channel-scam-3 $+ channel-scam-3 _*vale:channel-scam-3 == + $: %channel-scam-4 $+ channel-scam-4 _*vale:channel-scam-4 == + $: %channel-scan $+ channel-scan _*vale:channel-scan == + $: %channel-scan-2 $+ channel-scan-2 _*vale:channel-scan-2 == + $: %channel-scan-3 $+ channel-scan-3 _*vale:channel-scan-3 == + $: %channel-scan-4 $+ channel-scan-4 _*vale:channel-scan-4 == + $: %channel-simple-post $+ channel-simple-post _*vale:channel-simple-post == + $: %channel-simple-posts $+ channel-simple-posts _*vale:channel-simple-posts == + $: %channel-simple-replies $+ channel-simple-replies _*vale:channel-simple-replies == + $: %channel-simple-reply $+ channel-simple-reply _*vale:channel-simple-reply == + $: %channel-simple-response $+ channel-simple-response _*vale:channel-simple-response == + $: %channel-unread-update $+ channel-unread-update _*vale:channel-unread-update == + $: %channel-unreads $+ channel-unreads _*vale:channel-unreads == + $: %channel-update $+ channel-update _*vale:channel-update == + $: %channels $+ channels _*vale:channels == + $: %channels-2 $+ channels-2 _*vale:channels-2 == + $: %channels-3 $+ channels-3 _*vale:channels-3 == + $: %channels-4 $+ channels-4 _*vale:channels-4 == + $: %channels-5 $+ channels-5 _*vale:channels-5 == + $: %chat-block-ship $+ chat-block-ship _*vale:chat-block-ship == + $: %chat-blocked $+ chat-blocked _*vale:chat-blocked == + $: %chat-blocked-by $+ chat-blocked-by _*vale:chat-blocked-by == + $: %chat-changed-writs $+ chat-changed-writs _*vale:chat-changed-writs == + $: %chat-changed-writs-1 $+ chat-changed-writs-1 _*vale:chat-changed-writs-1 == + $: %chat-club-action $+ chat-club-action _*vale:chat-club-action == + $: %chat-club-action-0 $+ chat-club-action-0 _*vale:chat-club-action-0 == + $: %chat-club-action-1 $+ chat-club-action-1 _*vale:chat-club-action-1 == + $: %chat-club-action-2 $+ chat-club-action-2 _*vale:chat-club-action-2 == + $: %chat-club-create $+ chat-club-create _*vale:chat-club-create == + $: %chat-dm-action $+ chat-dm-action _*vale:chat-dm-action == + $: %chat-dm-action-1 $+ chat-dm-action-1 _*vale:chat-dm-action-1 == + $: %chat-dm-action-2 $+ chat-dm-action-2 _*vale:chat-dm-action-2 == + $: %chat-dm-archive $+ chat-dm-archive _*vale:chat-dm-archive == + $: %chat-dm-diff $+ chat-dm-diff _*vale:chat-dm-diff == + $: %chat-dm-diff-1 $+ chat-dm-diff-1 _*vale:chat-dm-diff-1 == + $: %chat-dm-diff-2 $+ chat-dm-diff-2 _*vale:chat-dm-diff-2 == + $: %chat-dm-rsvp $+ chat-dm-rsvp _*vale:chat-dm-rsvp == + $: %chat-heads $+ chat-heads _*vale:chat-heads == + $: %chat-heads-1 $+ chat-heads-1 _*vale:chat-heads-1 == + $: %chat-heads-2 $+ chat-heads-2 _*vale:chat-heads-2 == + $: %chat-heads-3 $+ chat-heads-3 _*vale:chat-heads-3 == + $: %chat-heads-4 $+ chat-heads-4 _*vale:chat-heads-4 == + $: %chat-negotiate $+ chat-negotiate _*vale:chat-negotiate == + $: %chat-paged-writs $+ chat-paged-writs _*vale:chat-paged-writs == + $: %chat-paged-writs-1 $+ chat-paged-writs-1 _*vale:chat-paged-writs-1 == + $: %chat-paged-writs-2 $+ chat-paged-writs-2 _*vale:chat-paged-writs-2 == + $: %chat-paged-writs-3 $+ chat-paged-writs-3 _*vale:chat-paged-writs-3 == + $: %chat-paged-writs-4 $+ chat-paged-writs-4 _*vale:chat-paged-writs-4 == + $: %chat-remark-action $+ chat-remark-action _*vale:chat-remark-action == + $: %chat-scam $+ chat-scam _*vale:chat-scam == + $: %chat-scam-1 $+ chat-scam-1 _*vale:chat-scam-1 == + $: %chat-scam-2 $+ chat-scam-2 _*vale:chat-scam-2 == + $: %chat-scam-3 $+ chat-scam-3 _*vale:chat-scam-3 == + $: %chat-scam-4 $+ chat-scam-4 _*vale:chat-scam-4 == + $: %chat-scan $+ chat-scan _*vale:chat-scan == + $: %chat-scan-1 $+ chat-scan-1 _*vale:chat-scan-1 == + $: %chat-scan-2 $+ chat-scan-2 _*vale:chat-scan-2 == + $: %chat-scan-3 $+ chat-scan-3 _*vale:chat-scan-3 == + $: %chat-scan-4 $+ chat-scan-4 _*vale:chat-scan-4 == + $: %chat-toggle-message $+ chat-toggle-message _*vale:chat-toggle-message == + $: %chat-unblock-ship $+ chat-unblock-ship _*vale:chat-unblock-ship == + $: %chat-unblocked $+ chat-unblocked _*vale:chat-unblocked == + $: %chat-unblocked-by $+ chat-unblocked-by _*vale:chat-unblocked-by == + $: %chat-unread-update $+ chat-unread-update _*vale:chat-unread-update == + $: %chat-unreads $+ chat-unreads _*vale:chat-unreads == + $: %chat-writ-1 $+ chat-writ-1 _*vale:chat-writ-1 == + $: %chat-writ-2 $+ chat-writ-2 _*vale:chat-writ-2 == + $: %chat-writ-3 $+ chat-writ-3 _*vale:chat-writ-3 == + $: %chat-writ-4 $+ chat-writ-4 _*vale:chat-writ-4 == + $: %chat-writs $+ chat-writs _*vale:chat-writs == + $: %club-action $+ club-action _*vale:club-action == + $: %clubs $+ clubs _*vale:clubs == + $: %contact $+ contact _*vale:contact == + $: %contact-0 $+ contact-0 _*vale:contact-0 == + $: %contact-1 $+ contact-1 _*vale:contact-1 == + $: %contact-action $+ contact-action _*vale:contact-action == + $: %contact-action-0 $+ contact-action-0 _*vale:contact-action-0 == + $: %contact-action-1 $+ contact-action-1 _*vale:contact-action-1 == + $: %contact-book $+ contact-book _*vale:contact-book == + $: %contact-book-0 $+ contact-book-0 _*vale:contact-book-0 == + $: %contact-changed-contacts $+ contact-changed-contacts _*vale:contact-changed-contacts == + $: %contact-changed-pages $+ contact-changed-pages _*vale:contact-changed-pages == + $: %contact-directory $+ contact-directory _*vale:contact-directory == + $: %contact-directory-0 $+ contact-directory-0 _*vale:contact-directory-0 == + $: %contact-news $+ contact-news _*vale:contact-news == + $: %contact-page $+ contact-page _*vale:contact-page == + $: %contact-page-0 $+ contact-page-0 _*vale:contact-page-0 == + $: %contact-page-1 $+ contact-page-1 _*vale:contact-page-1 == + $: %contact-response-0 $+ contact-response-0 _*vale:contact-response-0 == + $: %contact-rolodex $+ contact-rolodex _*vale:contact-rolodex == + $: %contact-update $+ contact-update _*vale:contact-update == + $: %contact-update-0 $+ contact-update-0 _*vale:contact-update-0 == + $: %contact-update-1 $+ contact-update-1 _*vale:contact-update-1 == + $: %css $+ css _*vale:css == + $: %curio $+ curio _*vale:curio == + $: %curios-diff $+ curios-diff _*vale:curios-diff == + $: %diary-action $+ diary-action _*vale:diary-action == + $: %diary-action-0 $+ diary-action-0 _*vale:diary-action-0 == + $: %diary-action-1 $+ diary-action-1 _*vale:diary-action-1 == + $: %diary-action-2 $+ diary-action-2 _*vale:diary-action-2 == + $: %diary-action-3 $+ diary-action-3 _*vale:diary-action-3 == + $: %diary-brief-update $+ diary-brief-update _*vale:diary-brief-update == + $: %diary-briefs $+ diary-briefs _*vale:diary-briefs == + $: %diary-create $+ diary-create _*vale:diary-create == + $: %diary-denied $+ diary-denied _*vale:diary-denied == + $: %diary-leave $+ diary-leave _*vale:diary-leave == + $: %diary-logs $+ diary-logs _*vale:diary-logs == + $: %diary-logs-0 $+ diary-logs-0 _*vale:diary-logs-0 == + $: %diary-logs-1 $+ diary-logs-1 _*vale:diary-logs-1 == + $: %diary-logs-2 $+ diary-logs-2 _*vale:diary-logs-2 == + $: %diary-logs-3 $+ diary-logs-3 _*vale:diary-logs-3 == + $: %diary-note $+ diary-note _*vale:diary-note == + $: %diary-notes $+ diary-notes _*vale:diary-notes == + $: %diary-outline $+ diary-outline _*vale:diary-outline == + $: %diary-outlines $+ diary-outlines _*vale:diary-outlines == + $: %diary-perm $+ diary-perm _*vale:diary-perm == + $: %diary-quips $+ diary-quips _*vale:diary-quips == + $: %diary-remark-action $+ diary-remark-action _*vale:diary-remark-action == + $: %diary-said $+ diary-said _*vale:diary-said == + $: %diary-update $+ diary-update _*vale:diary-update == + $: %diary-update-0 $+ diary-update-0 _*vale:diary-update-0 == + $: %diary-update-1 $+ diary-update-1 _*vale:diary-update-1 == + $: %diary-update-2 $+ diary-update-2 _*vale:diary-update-2 == + $: %diary-update-3 $+ diary-update-3 _*vale:diary-update-3 == + $: %dm-action $+ dm-action _*vale:dm-action == + $: %dm-archive $+ dm-archive _*vale:dm-archive == + $: %dm-diff $+ dm-diff _*vale:dm-diff == + $: %dm-rsvp $+ dm-rsvp _*vale:dm-rsvp == + $: %dm-unarchive $+ dm-unarchive _*vale:dm-unarchive == + $: %docket-0 $+ docket-0 _*vale:docket-0 == + $: %dude $+ dude _*vale:dude == + $: %dummy $+ dummy _*vale:dummy == + $: %emojimart $+ emojimart _*vale:emojimart == + $: %epic $+ epic _*vale:epic == + $: %flag $+ flag _*vale:flag == + $: %flags $+ flags _*vale:flags == + $: %foreign-1 $+ foreign-1 _*vale:foreign-1 == + $: %foreign-2 $+ foreign-2 _*vale:foreign-2 == + $: %foreigns-1 $+ foreigns-1 _*vale:foreigns-1 == + $: %gangs $+ gangs _*vale:gangs == + $: %group $+ group _*vale:group == + $: %group-1 $+ group-1 _*vale:group-1 == + $: %group-2 $+ group-2 _*vale:group-2 == + $: %group-action $+ group-action _*vale:group-action == + $: %group-action-0 $+ group-action-0 _*vale:group-action-0 == + $: %group-action-1 $+ group-action-1 _*vale:group-action-1 == + $: %group-action-2 $+ group-action-2 _*vale:group-action-2 == + $: %group-action-3 $+ group-action-3 _*vale:group-action-3 == + $: %group-action-4 $+ group-action-4 _*vale:group-action-4 == + $: %group-cancel $+ group-cancel _*vale:group-cancel == + $: %group-changed-groups-1 $+ group-changed-groups-1 _*vale:group-changed-groups-1 == + $: %group-changed-groups-2 $+ group-changed-groups-2 _*vale:group-changed-groups-2 == + $: %group-command $+ group-command _*vale:group-command == + $: %group-create $+ group-create _*vale:group-create == + $: %group-create-thread $+ group-create-thread _*vale:group-create-thread == + $: %group-foreign-1 $+ group-foreign-1 _*vale:group-foreign-1 == + $: %group-foreign-2 $+ group-foreign-2 _*vale:group-foreign-2 == + $: %group-init $+ group-init _*vale:group-init == + $: %group-init-0 $+ group-init-0 _*vale:group-init-0 == + $: %group-init-1 $+ group-init-1 _*vale:group-init-1 == + $: %group-init-2 $+ group-init-2 _*vale:group-init-2 == + $: %group-init-3 $+ group-init-3 _*vale:group-init-3 == + $: %group-init-4 $+ group-init-4 _*vale:group-init-4 == + $: %group-invite $+ group-invite _*vale:group-invite == + $: %group-invite-1 $+ group-invite-1 _*vale:group-invite-1 == + $: %group-invites $+ group-invites _*vale:group-invites == + $: %group-invites-1 $+ group-invites-1 _*vale:group-invites-1 == + $: %group-join $+ group-join _*vale:group-join == + $: %group-knock $+ group-knock _*vale:group-knock == + $: %group-leave $+ group-leave _*vale:group-leave == + $: %group-log $+ group-log _*vale:group-log == + $: %group-preview $+ group-preview _*vale:group-preview == + $: %group-preview-1 $+ group-preview-1 _*vale:group-preview-1 == + $: %group-preview-2 $+ group-preview-2 _*vale:group-preview-2 == + $: %group-preview-3 $+ group-preview-3 _*vale:group-preview-3 == + $: %group-preview-update $+ group-preview-update _*vale:group-preview-update == + $: %group-previews $+ group-previews _*vale:group-previews == + $: %group-previews-1 $+ group-previews-1 _*vale:group-previews-1 == + $: %group-rescind $+ group-rescind _*vale:group-rescind == + $: %group-response-1 $+ group-response-1 _*vale:group-response-1 == + $: %group-token $+ group-token _*vale:group-token == + $: %group-ui $+ group-ui _*vale:group-ui == + $: %group-ui-1 $+ group-ui-1 _*vale:group-ui-1 == + $: %group-ui-2 $+ group-ui-2 _*vale:group-ui-2 == + $: %group-update $+ group-update _*vale:group-update == + $: %grouper-answer-enabled $+ grouper-answer-enabled _*vale:grouper-answer-enabled == + $: %grouper-ask-enabled $+ grouper-ask-enabled _*vale:grouper-ask-enabled == + $: %grouper-disable $+ grouper-disable _*vale:grouper-disable == + $: %grouper-enable $+ grouper-enable _*vale:grouper-enable == + $: %groups $+ groups _*vale:groups == + $: %groups-1 $+ groups-1 _*vale:groups-1 == + $: %groups-2 $+ groups-2 _*vale:groups-2 == + $: %groups-ui $+ groups-ui _*vale:groups-ui == + $: %groups-ui-1 $+ groups-ui-1 _*vale:groups-ui-1 == + $: %groups-ui-2 $+ groups-ui-2 _*vale:groups-ui-2 == + $: %growl-summarize $+ growl-summarize _*vale:growl-summarize == + $: %hark-yarn $+ hark-yarn _*vale:hark-yarn == + $: %heap-action $+ heap-action _*vale:heap-action == + $: %heap-action-0 $+ heap-action-0 _*vale:heap-action-0 == + $: %heap-action-1 $+ heap-action-1 _*vale:heap-action-1 == + $: %heap-brief-update $+ heap-brief-update _*vale:heap-brief-update == + $: %heap-briefs $+ heap-briefs _*vale:heap-briefs == + $: %heap-create $+ heap-create _*vale:heap-create == + $: %heap-curios $+ heap-curios _*vale:heap-curios == + $: %heap-denied $+ heap-denied _*vale:heap-denied == + $: %heap-leave $+ heap-leave _*vale:heap-leave == + $: %heap-logs $+ heap-logs _*vale:heap-logs == + $: %heap-logs-0 $+ heap-logs-0 _*vale:heap-logs-0 == + $: %heap-logs-1 $+ heap-logs-1 _*vale:heap-logs-1 == + $: %heap-perm $+ heap-perm _*vale:heap-perm == + $: %heap-remark-action $+ heap-remark-action _*vale:heap-remark-action == + $: %heap-said $+ heap-said _*vale:heap-said == + $: %heap-update $+ heap-update _*vale:heap-update == + $: %heap-update-0 $+ heap-update-0 _*vale:heap-update-0 == + $: %heap-update-1 $+ heap-update-1 _*vale:heap-update-1 == + $: %hi-ship $+ hi-ship _*vale:hi-ship == + $: %hidden-messages $+ hidden-messages _*vale:hidden-messages == + $: %hidden-posts $+ hidden-posts _*vale:hidden-posts == + $: %holt $+ holt _*vale:holt == + $: %hook-action-0 $+ hook-action-0 _*vale:hook-action-0 == + $: %hook-channel-preview $+ hook-channel-preview _*vale:hook-channel-preview == + $: %hook-full $+ hook-full _*vale:hook-full == + $: %hook-response-0 $+ hook-response-0 _*vale:hook-response-0 == + $: %hook-setup-template $+ hook-setup-template _*vale:hook-setup-template == + $: %hook-setup-template-args $+ hook-setup-template-args _*vale:hook-setup-template-args == + $: %hook-template $+ hook-template _*vale:hook-template == + $: %hoon $+ hoon _*vale:hoon == + $: %htm $+ htm _*vale:htm == + $: %html $+ html _*vale:html == + $: %httr $+ httr _*vale:httr == + $: %hymn $+ hymn _*vale:hymn == + $: %invite-decline $+ invite-decline _*vale:invite-decline == + $: %jam $+ jam _*vale:jam == + $: %jpg $+ jpg _*vale:jpg == + $: %js $+ js _*vale:js == + $: %json $+ json _*vale:json == + $: %json-rpc-response $+ json-rpc-response _*vale:json-rpc-response == + $: %kelvin $+ kelvin _*vale:kelvin == + $: %kiln-approve-merge $+ kiln-approve-merge _*vale:kiln-approve-merge == + $: %kiln-jump $+ kiln-jump _*vale:kiln-jump == + $: %kiln-jump-ask $+ kiln-jump-ask _*vale:kiln-jump-ask == + $: %kiln-jump-opt $+ kiln-jump-opt _*vale:kiln-jump-opt == + $: %kiln-sync-update $+ kiln-sync-update _*vale:kiln-sync-update == + $: %language-server-rpc-notification $+ language-server-rpc-notification _*vale:language-server-rpc-notification == + $: %language-server-rpc-request $+ language-server-rpc-request _*vale:language-server-rpc-request == + $: %language-server-rpc-response $+ language-server-rpc-response _*vale:language-server-rpc-response == + $: %lanyard-command-1 $+ lanyard-command-1 _*vale:lanyard-command-1 == + $: %lanyard-query-1 $+ lanyard-query-1 _*vale:lanyard-query-1 == + $: %lanyard-update-1 $+ lanyard-update-1 _*vale:lanyard-update-1 == + $: %loob $+ loob _*vale:loob == + $: %migrate-map $+ migrate-map _*vale:migrate-map == + $: %mime $+ mime _*vale:mime == + $: %nest $+ nest _*vale:nest == + $: %notes-diff $+ notes-diff _*vale:notes-diff == + $: %notify-client-action $+ notify-client-action _*vale:notify-client-action == + $: %notify-provider-action $+ notify-provider-action _*vale:notify-provider-action == + $: %notify-update $+ notify-update _*vale:notify-update == + $: %notify-update-1 $+ notify-update-1 _*vale:notify-update-1 == + $: %noun $+ noun _*vale:noun == + $: %noun-autodiff $+ noun-autodiff _*vale:noun-autodiff == + $: %path $+ path _*vale:path == + $: %png $+ png _*vale:png == + $: %post-toggle $+ post-toggle _*vale:post-toggle == + $: %purl $+ purl _*vale:purl == + $: %reel-bait $+ reel-bait _*vale:reel-bait == + $: %reel-bite $+ reel-bite _*vale:reel-bite == + $: %reel-command $+ reel-command _*vale:reel-command == + $: %reel-confirmation $+ reel-confirmation _*vale:reel-confirmation == + $: %reel-describe $+ reel-describe _*vale:reel-describe == + $: %reel-description $+ reel-description _*vale:reel-description == + $: %reel-give-token-link $+ reel-give-token-link _*vale:reel-give-token-link == + $: %reel-metadata $+ reel-metadata _*vale:reel-metadata == + $: %reel-undescribe $+ reel-undescribe _*vale:reel-undescribe == + $: %reel-want-token-link $+ reel-want-token-link _*vale:reel-want-token-link == + $: %release $+ release _*vale:release == + $: %reset-group-perms $+ reset-group-perms _*vale:reset-group-perms == + $: %ship $+ ship _*vale:ship == + $: %ships $+ ships _*vale:ships == + $: %sigil $+ sigil _*vale:sigil == + $: %sole-action $+ sole-action _*vale:sole-action == + $: %sole-effect $+ sole-effect _*vale:sole-effect == + $: %stash $+ stash _*vale:stash == + $: %svg $+ svg _*vale:svg == + $: %tang $+ tang _*vale:tang == + $: %tape $+ tape _*vale:tape == + $: %thread-done $+ thread-done _*vale:thread-done == + $: %thread-fail $+ thread-fail _*vale:thread-fail == + $: %toc $+ toc _*vale:toc == + $: %toggle-post $+ toggle-post _*vale:toggle-post == + $: %txt $+ txt _*vale:txt == + $: %txt-diff $+ txt-diff _*vale:txt-diff == + $: %udon $+ udon _*vale:udon == + $: %ui-action $+ ui-action _*vale:ui-action == + $: %ui-add-contact-suggestions $+ ui-add-contact-suggestions _*vale:ui-add-contact-suggestions == + $: %ui-heads $+ ui-heads _*vale:ui-heads == + $: %ui-heads-2 $+ ui-heads-2 _*vale:ui-heads-2 == + $: %ui-heads-3 $+ ui-heads-3 _*vale:ui-heads-3 == + $: %ui-heads-4 $+ ui-heads-4 _*vale:ui-heads-4 == + $: %ui-hide-contact $+ ui-hide-contact _*vale:ui-hide-contact == + $: %ui-import-pals $+ ui-import-pals _*vale:ui-import-pals == + $: %ui-init $+ ui-init _*vale:ui-init == + $: %ui-init-1 $+ ui-init-1 _*vale:ui-init-1 == + $: %ui-init-2 $+ ui-init-2 _*vale:ui-init-2 == + $: %ui-init-3 $+ ui-init-3 _*vale:ui-init-3 == + $: %ui-init-4 $+ ui-init-4 _*vale:ui-init-4 == + $: %ui-init-5 $+ ui-init-5 _*vale:ui-init-5 == + $: %ui-init-6 $+ ui-init-6 _*vale:ui-init-6 == + $: %ui-init-7 $+ ui-init-7 _*vale:ui-init-7 == + $: %ui-pins $+ ui-pins _*vale:ui-pins == + $: %ui-show-contact $+ ui-show-contact _*vale:ui-show-contact == + $: %ui-vita $+ ui-vita _*vale:ui-vita == + $: %ui-vita-toggle $+ ui-vita-toggle _*vale:ui-vita-toggle == + $: %umd $+ umd _*vale:umd == + $: %urb $+ urb _*vale:urb == + $: %urbit $+ urbit _*vale:urbit == + $: %verb-event $+ verb-event _*vale:verb-event == + $: %verb-event-plus $+ verb-event-plus _*vale:verb-event-plus == + $: %vere $+ vere _*vale:vere == + $: %verifier-result $+ verifier-result _*vale:verifier-result == + $: %verifier-update $+ verifier-update _*vale:verifier-update == + $: %verifier-user-command $+ verifier-user-command _*vale:verifier-user-command == + $: %verifier-user-query $+ verifier-user-query _*vale:verifier-user-query == + $: %volume-set $+ volume-set _*vale:volume-set == + $: %volume-value $+ volume-value _*vale:volume-value == + $: %wasm $+ wasm _*vale:wasm == + $: %webmanifest $+ webmanifest _*vale:webmanifest == + $: %woff2 $+ woff2 _*vale:woff2 == + $: %writ $+ writ _*vale:writ == + $: %writ-diff $+ writ-diff _*vale:writ-diff == + $: %writ-response $+ writ-response _*vale:writ-response == + $: %writ-response-1 $+ writ-response-1 _*vale:writ-response-1 == + $: %writ-response-2 $+ writ-response-2 _*vale:writ-response-2 == + $: %writ-response-3 $+ writ-response-3 _*vale:writ-response-3 == + $: %writ-response-4 $+ writ-response-4 _*vale:writ-response-4 == + $: %xhtml $+ xhtml _*vale:xhtml == + $: %xml $+ xml _*vale:xml == + == +:: +++ de-rail + |= =rail + ^- cage + ?- -.rail + %unsafe cage.rail + :: + %activity-action [-.rail !>(+.rail)] + %activity-allowed [-.rail !>(+.rail)] + %activity-event [-.rail !>(+.rail)] + %activity-feed [-.rail !>(+.rail)] + %activity-feed-5 [-.rail !>(+.rail)] + %activity-feed-init [-.rail !>(+.rail)] + %activity-feed-init-5 [-.rail !>(+.rail)] + %activity-full [-.rail !>(+.rail)] + %activity-full-1 [-.rail !>(+.rail)] + %activity-full-4 [-.rail !>(+.rail)] + %activity-settings [-.rail !>(+.rail)] + %activity-stream [-.rail !>(+.rail)] + %activity-summary [-.rail !>(+.rail)] + %activity-summary-1 [-.rail !>(+.rail)] + %activity-summary-4 [-.rail !>(+.rail)] + %activity-summary-pairs-4 [-.rail !>(+.rail)] + %activity-update [-.rail !>(+.rail)] + %activity-update-1 [-.rail !>(+.rail)] + %activity-update-4 [-.rail !>(+.rail)] + %aqua-effect [-.rail !>(+.rail)] + %atom [-.rail !>(+.rail)] + %bait-acknowledge [-.rail !>(+.rail)] + %bait-describe [-.rail !>(+.rail)] + %bait-undescribe [-.rail !>(+.rail)] + %bait-update [-.rail !>(+.rail)] + %bait-update-group [-.rail !>(+.rail)] + %bark-add-recipient [-.rail !>(+.rail)] + %bark-receive-summary [-.rail !>(+.rail)] + %bark-remove-recipient [-.rail !>(+.rail)] + %belt [-.rail !>(+.rail)] + %bill [-.rail !>(+.rail)] + %blit [-.rail !>(+.rail)] + %broadcaster-action [-.rail !>(+.rail)] + %channel-action [-.rail !>(+.rail)] + %channel-action-1 [-.rail !>(+.rail)] + %channel-action-2 [-.rail !>(+.rail)] + %channel-changed-posts [-.rail !>(+.rail)] + %channel-changed-posts-1 [-.rail !>(+.rail)] + %channel-checkpoint [-.rail !>(+.rail)] + %channel-command [-.rail !>(+.rail)] + %channel-denied [-.rail !>(+.rail)] + %channel-heads [-.rail !>(+.rail)] + %channel-heads-2 [-.rail !>(+.rail)] + %channel-heads-3 [-.rail !>(+.rail)] + %channel-heads-4 [-.rail !>(+.rail)] + %channel-leave [-.rail !>(+.rail)] + %channel-logs [-.rail !>(+.rail)] + %channel-perm [-.rail !>(+.rail)] + %channel-post [-.rail !>(+.rail)] + %channel-post-2 [-.rail !>(+.rail)] + %channel-post-3 [-.rail !>(+.rail)] + %channel-post-4 [-.rail !>(+.rail)] + %channel-post-5 [-.rail !>(+.rail)] + %channel-posts [-.rail !>(+.rail)] + %channel-posts-2 [-.rail !>(+.rail)] + %channel-posts-3 [-.rail !>(+.rail)] + %channel-posts-4 [-.rail !>(+.rail)] + %channel-posts-5 [-.rail !>(+.rail)] + %channel-preview [-.rail !>(+.rail)] + %channel-preview-1 [-.rail !>(+.rail)] + %channel-replies [-.rail !>(+.rail)] + %channel-replies-2 [-.rail !>(+.rail)] + %channel-replies-3 [-.rail !>(+.rail)] + %channel-replies-4 [-.rail !>(+.rail)] + %channel-replies-5 [-.rail !>(+.rail)] + %channel-reply [-.rail !>(+.rail)] + %channel-reply-2 [-.rail !>(+.rail)] + %channel-request-join [-.rail !>(+.rail)] + %channel-response [-.rail !>(+.rail)] + %channel-response-1 [-.rail !>(+.rail)] + %channel-response-2 [-.rail !>(+.rail)] + %channel-response-3 [-.rail !>(+.rail)] + %channel-response-4 [-.rail !>(+.rail)] + %channel-response-5 [-.rail !>(+.rail)] + %channel-said [-.rail !>(+.rail)] + %channel-said-1 [-.rail !>(+.rail)] + %channel-said-2 [-.rail !>(+.rail)] + %channel-said-3 [-.rail !>(+.rail)] + %channel-scam [-.rail !>(+.rail)] + %channel-scam-2 [-.rail !>(+.rail)] + %channel-scam-3 [-.rail !>(+.rail)] + %channel-scam-4 [-.rail !>(+.rail)] + %channel-scan [-.rail !>(+.rail)] + %channel-scan-2 [-.rail !>(+.rail)] + %channel-scan-3 [-.rail !>(+.rail)] + %channel-scan-4 [-.rail !>(+.rail)] + %channel-simple-post [-.rail !>(+.rail)] + %channel-simple-posts [-.rail !>(+.rail)] + %channel-simple-replies [-.rail !>(+.rail)] + %channel-simple-reply [-.rail !>(+.rail)] + %channel-simple-response [-.rail !>(+.rail)] + %channel-unread-update [-.rail !>(+.rail)] + %channel-unreads [-.rail !>(+.rail)] + %channel-update [-.rail !>(+.rail)] + %channels [-.rail !>(+.rail)] + %channels-2 [-.rail !>(+.rail)] + %channels-3 [-.rail !>(+.rail)] + %channels-4 [-.rail !>(+.rail)] + %channels-5 [-.rail !>(+.rail)] + %chat-block-ship [-.rail !>(+.rail)] + %chat-blocked [-.rail !>(+.rail)] + %chat-blocked-by [-.rail !>(+.rail)] + %chat-changed-writs [-.rail !>(+.rail)] + %chat-changed-writs-1 [-.rail !>(+.rail)] + %chat-club-action [-.rail !>(+.rail)] + %chat-club-action-0 [-.rail !>(+.rail)] + %chat-club-action-1 [-.rail !>(+.rail)] + %chat-club-action-2 [-.rail !>(+.rail)] + %chat-club-create [-.rail !>(+.rail)] + %chat-dm-action [-.rail !>(+.rail)] + %chat-dm-action-1 [-.rail !>(+.rail)] + %chat-dm-action-2 [-.rail !>(+.rail)] + %chat-dm-archive [-.rail !>(+.rail)] + %chat-dm-diff [-.rail !>(+.rail)] + %chat-dm-diff-1 [-.rail !>(+.rail)] + %chat-dm-diff-2 [-.rail !>(+.rail)] + %chat-dm-rsvp [-.rail !>(+.rail)] + %chat-heads [-.rail !>(+.rail)] + %chat-heads-1 [-.rail !>(+.rail)] + %chat-heads-2 [-.rail !>(+.rail)] + %chat-heads-3 [-.rail !>(+.rail)] + %chat-heads-4 [-.rail !>(+.rail)] + %chat-negotiate [-.rail !>(+.rail)] + %chat-paged-writs [-.rail !>(+.rail)] + %chat-paged-writs-1 [-.rail !>(+.rail)] + %chat-paged-writs-2 [-.rail !>(+.rail)] + %chat-paged-writs-3 [-.rail !>(+.rail)] + %chat-paged-writs-4 [-.rail !>(+.rail)] + %chat-remark-action [-.rail !>(+.rail)] + %chat-scam [-.rail !>(+.rail)] + %chat-scam-1 [-.rail !>(+.rail)] + %chat-scam-2 [-.rail !>(+.rail)] + %chat-scam-3 [-.rail !>(+.rail)] + %chat-scam-4 [-.rail !>(+.rail)] + %chat-scan [-.rail !>(+.rail)] + %chat-scan-1 [-.rail !>(+.rail)] + %chat-scan-2 [-.rail !>(+.rail)] + %chat-scan-3 [-.rail !>(+.rail)] + %chat-scan-4 [-.rail !>(+.rail)] + %chat-toggle-message [-.rail !>(+.rail)] + %chat-unblock-ship [-.rail !>(+.rail)] + %chat-unblocked [-.rail !>(+.rail)] + %chat-unblocked-by [-.rail !>(+.rail)] + %chat-unread-update [-.rail !>(+.rail)] + %chat-unreads [-.rail !>(+.rail)] + %chat-writ-1 [-.rail !>(+.rail)] + %chat-writ-2 [-.rail !>(+.rail)] + %chat-writ-3 [-.rail !>(+.rail)] + %chat-writ-4 [-.rail !>(+.rail)] + %chat-writs [-.rail !>(+.rail)] + %club-action [-.rail !>(+.rail)] + %clubs [-.rail !>(+.rail)] + %contact [-.rail !>(+.rail)] + %contact-0 [-.rail !>(+.rail)] + %contact-1 [-.rail !>(+.rail)] + %contact-action [-.rail !>(+.rail)] + %contact-action-0 [-.rail !>(+.rail)] + %contact-action-1 [-.rail !>(+.rail)] + %contact-book [-.rail !>(+.rail)] + %contact-book-0 [-.rail !>(+.rail)] + %contact-changed-contacts [-.rail !>(+.rail)] + %contact-changed-pages [-.rail !>(+.rail)] + %contact-directory [-.rail !>(+.rail)] + %contact-directory-0 [-.rail !>(+.rail)] + %contact-news [-.rail !>(+.rail)] + %contact-page [-.rail !>(+.rail)] + %contact-page-0 [-.rail !>(+.rail)] + %contact-page-1 [-.rail !>(+.rail)] + %contact-response-0 [-.rail !>(+.rail)] + %contact-rolodex [-.rail !>(+.rail)] + %contact-update [-.rail !>(+.rail)] + %contact-update-0 [-.rail !>(+.rail)] + %contact-update-1 [-.rail !>(+.rail)] + %css [-.rail !>(+.rail)] + %curio [-.rail !>(+.rail)] + %curios-diff [-.rail !>(+.rail)] + %diary-action [-.rail !>(+.rail)] + %diary-action-0 [-.rail !>(+.rail)] + %diary-action-1 [-.rail !>(+.rail)] + %diary-action-2 [-.rail !>(+.rail)] + %diary-action-3 [-.rail !>(+.rail)] + %diary-brief-update [-.rail !>(+.rail)] + %diary-briefs [-.rail !>(+.rail)] + %diary-create [-.rail !>(+.rail)] + %diary-denied [-.rail !>(+.rail)] + %diary-leave [-.rail !>(+.rail)] + %diary-logs [-.rail !>(+.rail)] + %diary-logs-0 [-.rail !>(+.rail)] + %diary-logs-1 [-.rail !>(+.rail)] + %diary-logs-2 [-.rail !>(+.rail)] + %diary-logs-3 [-.rail !>(+.rail)] + %diary-note [-.rail !>(+.rail)] + %diary-notes [-.rail !>(+.rail)] + %diary-outline [-.rail !>(+.rail)] + %diary-outlines [-.rail !>(+.rail)] + %diary-perm [-.rail !>(+.rail)] + %diary-quips [-.rail !>(+.rail)] + %diary-remark-action [-.rail !>(+.rail)] + %diary-said [-.rail !>(+.rail)] + %diary-update [-.rail !>(+.rail)] + %diary-update-0 [-.rail !>(+.rail)] + %diary-update-1 [-.rail !>(+.rail)] + %diary-update-2 [-.rail !>(+.rail)] + %diary-update-3 [-.rail !>(+.rail)] + %dm-action [-.rail !>(+.rail)] + %dm-archive [-.rail !>(+.rail)] + %dm-diff [-.rail !>(+.rail)] + %dm-rsvp [-.rail !>(+.rail)] + %dm-unarchive [-.rail !>(+.rail)] + %docket-0 [-.rail !>(+.rail)] + %dude [-.rail !>(+.rail)] + %dummy [-.rail !>(+.rail)] + %emojimart [-.rail !>(+.rail)] + %epic [-.rail !>(+.rail)] + %flag [-.rail !>(+.rail)] + %flags [-.rail !>(+.rail)] + %foreign-1 [-.rail !>(+.rail)] + %foreign-2 [-.rail !>(+.rail)] + %foreigns-1 [-.rail !>(+.rail)] + %gangs [-.rail !>(+.rail)] + %group [-.rail !>(+.rail)] + %group-1 [-.rail !>(+.rail)] + %group-2 [-.rail !>(+.rail)] + %group-action [-.rail !>(+.rail)] + %group-action-0 [-.rail !>(+.rail)] + %group-action-1 [-.rail !>(+.rail)] + %group-action-2 [-.rail !>(+.rail)] + %group-action-3 [-.rail !>(+.rail)] + %group-action-4 [-.rail !>(+.rail)] + %group-cancel [-.rail !>(+.rail)] + %group-changed-groups-1 [-.rail !>(+.rail)] + %group-changed-groups-2 [-.rail !>(+.rail)] + %group-command [-.rail !>(+.rail)] + %group-create [-.rail !>(+.rail)] + %group-create-thread [-.rail !>(+.rail)] + %group-foreign-1 [-.rail !>(+.rail)] + %group-foreign-2 [-.rail !>(+.rail)] + %group-init [-.rail !>(+.rail)] + %group-init-0 [-.rail !>(+.rail)] + %group-init-1 [-.rail !>(+.rail)] + %group-init-2 [-.rail !>(+.rail)] + %group-init-3 [-.rail !>(+.rail)] + %group-init-4 [-.rail !>(+.rail)] + %group-invite [-.rail !>(+.rail)] + %group-invite-1 [-.rail !>(+.rail)] + %group-invites [-.rail !>(+.rail)] + %group-invites-1 [-.rail !>(+.rail)] + %group-join [-.rail !>(+.rail)] + %group-knock [-.rail !>(+.rail)] + %group-leave [-.rail !>(+.rail)] + %group-log [-.rail !>(+.rail)] + %group-preview [-.rail !>(+.rail)] + %group-preview-1 [-.rail !>(+.rail)] + %group-preview-2 [-.rail !>(+.rail)] + %group-preview-3 [-.rail !>(+.rail)] + %group-preview-update [-.rail !>(+.rail)] + %group-previews [-.rail !>(+.rail)] + %group-previews-1 [-.rail !>(+.rail)] + %group-rescind [-.rail !>(+.rail)] + %group-response-1 [-.rail !>(+.rail)] + %group-token [-.rail !>(+.rail)] + %group-ui [-.rail !>(+.rail)] + %group-ui-1 [-.rail !>(+.rail)] + %group-ui-2 [-.rail !>(+.rail)] + %group-update [-.rail !>(+.rail)] + %grouper-answer-enabled [-.rail !>(+.rail)] + %grouper-ask-enabled [-.rail !>(+.rail)] + %grouper-disable [-.rail !>(+.rail)] + %grouper-enable [-.rail !>(+.rail)] + %groups [-.rail !>(+.rail)] + %groups-1 [-.rail !>(+.rail)] + %groups-2 [-.rail !>(+.rail)] + %groups-ui [-.rail !>(+.rail)] + %groups-ui-1 [-.rail !>(+.rail)] + %groups-ui-2 [-.rail !>(+.rail)] + %growl-summarize [-.rail !>(+.rail)] + %hark-yarn [-.rail !>(+.rail)] + %heap-action [-.rail !>(+.rail)] + %heap-action-0 [-.rail !>(+.rail)] + %heap-action-1 [-.rail !>(+.rail)] + %heap-brief-update [-.rail !>(+.rail)] + %heap-briefs [-.rail !>(+.rail)] + %heap-create [-.rail !>(+.rail)] + %heap-curios [-.rail !>(+.rail)] + %heap-denied [-.rail !>(+.rail)] + %heap-leave [-.rail !>(+.rail)] + %heap-logs [-.rail !>(+.rail)] + %heap-logs-0 [-.rail !>(+.rail)] + %heap-logs-1 [-.rail !>(+.rail)] + %heap-perm [-.rail !>(+.rail)] + %heap-remark-action [-.rail !>(+.rail)] + %heap-said [-.rail !>(+.rail)] + %heap-update [-.rail !>(+.rail)] + %heap-update-0 [-.rail !>(+.rail)] + %heap-update-1 [-.rail !>(+.rail)] + %hi-ship [-.rail !>(+.rail)] + %hidden-messages [-.rail !>(+.rail)] + %hidden-posts [-.rail !>(+.rail)] + %holt [-.rail !>(+.rail)] + %hook-action-0 [-.rail !>(+.rail)] + %hook-channel-preview [-.rail !>(+.rail)] + %hook-full [-.rail !>(+.rail)] + %hook-response-0 [-.rail !>(+.rail)] + %hook-setup-template [-.rail !>(+.rail)] + %hook-setup-template-args [-.rail !>(+.rail)] + %hook-template [-.rail !>(+.rail)] + %hoon [-.rail !>(+.rail)] + %htm [-.rail !>(+.rail)] + %html [-.rail !>(+.rail)] + %httr [-.rail !>(+.rail)] + %hymn [-.rail !>(+.rail)] + %invite-decline [-.rail !>(+.rail)] + %jam [-.rail !>(+.rail)] + %jpg [-.rail !>(+.rail)] + %js [-.rail !>(+.rail)] + %json [-.rail !>(+.rail)] + %json-rpc-response [-.rail !>(+.rail)] + %kelvin [-.rail !>(+.rail)] + %kiln-approve-merge [-.rail !>(+.rail)] + %kiln-jump [-.rail !>(+.rail)] + %kiln-jump-ask [-.rail !>(+.rail)] + %kiln-jump-opt [-.rail !>(+.rail)] + %kiln-sync-update [-.rail !>(+.rail)] + %language-server-rpc-notification [-.rail !>(+.rail)] + %language-server-rpc-request [-.rail !>(+.rail)] + %language-server-rpc-response [-.rail !>(+.rail)] + %lanyard-command-1 [-.rail !>(+.rail)] + %lanyard-query-1 [-.rail !>(+.rail)] + %lanyard-update-1 [-.rail !>(+.rail)] + %loob [-.rail !>(+.rail)] + %migrate-map [-.rail !>(+.rail)] + %mime [-.rail !>(+.rail)] + %nest [-.rail !>(+.rail)] + %notes-diff [-.rail !>(+.rail)] + %notify-client-action [-.rail !>(+.rail)] + %notify-provider-action [-.rail !>(+.rail)] + %notify-update [-.rail !>(+.rail)] + %notify-update-1 [-.rail !>(+.rail)] + %noun [-.rail !>(+.rail)] + %noun-autodiff [-.rail !>(+.rail)] + %path [-.rail !>(+.rail)] + %png [-.rail !>(+.rail)] + %post-toggle [-.rail !>(+.rail)] + %purl [-.rail !>(+.rail)] + %reel-bait [-.rail !>(+.rail)] + %reel-bite [-.rail !>(+.rail)] + %reel-command [-.rail !>(+.rail)] + %reel-confirmation [-.rail !>(+.rail)] + %reel-describe [-.rail !>(+.rail)] + %reel-description [-.rail !>(+.rail)] + %reel-give-token-link [-.rail !>(+.rail)] + %reel-metadata [-.rail !>(+.rail)] + %reel-undescribe [-.rail !>(+.rail)] + %reel-want-token-link [-.rail !>(+.rail)] + %release [-.rail !>(+.rail)] + %reset-group-perms [-.rail !>(+.rail)] + %ship [-.rail !>(+.rail)] + %ships [-.rail !>(+.rail)] + %sigil [-.rail !>(+.rail)] + %sole-action [-.rail !>(+.rail)] + %sole-effect [-.rail !>(+.rail)] + %stash [-.rail !>(+.rail)] + %svg [-.rail !>(+.rail)] + %tang [-.rail !>(+.rail)] + %tape [-.rail !>(+.rail)] + %thread-done [-.rail !>(+.rail)] + %thread-fail [-.rail !>(+.rail)] + %toc [-.rail !>(+.rail)] + %toggle-post [-.rail !>(+.rail)] + %txt [-.rail !>(+.rail)] + %txt-diff [-.rail !>(+.rail)] + %udon [-.rail !>(+.rail)] + %ui-action [-.rail !>(+.rail)] + %ui-add-contact-suggestions [-.rail !>(+.rail)] + %ui-heads [-.rail !>(+.rail)] + %ui-heads-2 [-.rail !>(+.rail)] + %ui-heads-3 [-.rail !>(+.rail)] + %ui-heads-4 [-.rail !>(+.rail)] + %ui-hide-contact [-.rail !>(+.rail)] + %ui-import-pals [-.rail !>(+.rail)] + %ui-init [-.rail !>(+.rail)] + %ui-init-1 [-.rail !>(+.rail)] + %ui-init-2 [-.rail !>(+.rail)] + %ui-init-3 [-.rail !>(+.rail)] + %ui-init-4 [-.rail !>(+.rail)] + %ui-init-5 [-.rail !>(+.rail)] + %ui-init-6 [-.rail !>(+.rail)] + %ui-init-7 [-.rail !>(+.rail)] + %ui-pins [-.rail !>(+.rail)] + %ui-show-contact [-.rail !>(+.rail)] + %ui-vita [-.rail !>(+.rail)] + %ui-vita-toggle [-.rail !>(+.rail)] + %umd [-.rail !>(+.rail)] + %urb [-.rail !>(+.rail)] + %urbit [-.rail !>(+.rail)] + %verb-event [-.rail !>(+.rail)] + %verb-event-plus [-.rail !>(+.rail)] + %vere [-.rail !>(+.rail)] + %verifier-result [-.rail !>(+.rail)] + %verifier-update [-.rail !>(+.rail)] + %verifier-user-command [-.rail !>(+.rail)] + %verifier-user-query [-.rail !>(+.rail)] + %volume-set [-.rail !>(+.rail)] + %volume-value [-.rail !>(+.rail)] + %wasm [-.rail !>(+.rail)] + %webmanifest [-.rail !>(+.rail)] + %woff2 [-.rail !>(+.rail)] + %writ [-.rail !>(+.rail)] + %writ-diff [-.rail !>(+.rail)] + %writ-response [-.rail !>(+.rail)] + %writ-response-1 [-.rail !>(+.rail)] + %writ-response-2 [-.rail !>(+.rail)] + %writ-response-3 [-.rail !>(+.rail)] + %writ-response-4 [-.rail !>(+.rail)] + %xhtml [-.rail !>(+.rail)] + %xml [-.rail !>(+.rail)] + == +-- From 3a5253a010fc0e0dd08f372541e91a62a7951c6d Mon Sep 17 00:00:00 2001 From: fang Date: Wed, 22 Apr 2026 22:28:13 +0200 Subject: [PATCH 04/20] marks: patch up Many marks didn't compile into proper mark cores. Here, we make a bunch of changes to correct this. --- desk/mar/activity/feed-init.hoon | 2 +- desk/mar/activity/summary-pairs-4.hoon | 2 +- desk/mar/broadcaster/action.hoon | 2 +- desk/mar/chat/block-ship.hoon | 2 +- desk/mar/chat/negotiate.hoon | 2 ++ desk/mar/chat/unblock-ship.hoon | 2 +- desk/mar/chat/writs.hoon | 2 +- desk/mar/contact/changed-pages.hoon | 2 +- desk/mar/emojimart.hoon | 2 ++ desk/mar/group/create.hoon | 2 +- desk/mar/group/init-0.hoon | 4 ++-- desk/mar/group/invites-1.hoon | 6 +++--- desk/mar/group/invites.hoon | 10 +++++----- desk/mar/group/preview-update.hoon | 4 ++-- desk/mar/hook/setup-template-args.hoon | 2 +- desk/mar/hook/setup-template.hoon | 2 +- desk/mar/reel/describe.hoon | 2 +- desk/mar/reel/metadata.hoon | 2 +- desk/mar/reel/undescribe.hoon | 2 +- desk/mar/sigil.hoon | 2 ++ desk/mar/ui/action.hoon | 2 +- desk/mar/writ-diff.hoon | 8 ++++---- 22 files changed, 36 insertions(+), 30 deletions(-) diff --git a/desk/mar/activity/feed-init.hoon b/desk/mar/activity/feed-init.hoon index 57fdca7ad3..32f2185069 100644 --- a/desk/mar/activity/feed-init.hoon +++ b/desk/mar/activity/feed-init.hoon @@ -15,6 +15,6 @@ -- ++ grab |% - ++ noun [all=feed:v4:old:a mentions=feed:v4:old:a replies=feed:v4:old:a] + ++ noun ,[all=feed:v4:old:a mentions=feed:v4:old:a replies=feed:v4:old:a] -- -- diff --git a/desk/mar/activity/summary-pairs-4.hoon b/desk/mar/activity/summary-pairs-4.hoon index e1b5cdea81..cc4a067923 100644 --- a/desk/mar/activity/summary-pairs-4.hoon +++ b/desk/mar/activity/summary-pairs-4.hoon @@ -10,6 +10,6 @@ -- ++ grab |% - ++ noun (list [source:a activity-summary:a]) + ++ noun (list ,[source:a activity-summary:a]) -- -- diff --git a/desk/mar/broadcaster/action.hoon b/desk/mar/broadcaster/action.hoon index 8288466f3f..ced046f66f 100644 --- a/desk/mar/broadcaster/action.hoon +++ b/desk/mar/broadcaster/action.hoon @@ -7,7 +7,7 @@ +$ action $% [%add-cohort cohort=@t targets=(set ship)] [%del-cohort cohort=@t targets=(set ship)] :: ~ for full deletion - [%broadcast cohort=@t =story:s:d:c] + [%broadcast cohort=@t =story:s:dv:c] == -- |_ =action diff --git a/desk/mar/chat/block-ship.hoon b/desk/mar/chat/block-ship.hoon index 7cb085f690..572d08bd41 100644 --- a/desk/mar/chat/block-ship.hoon +++ b/desk/mar/chat/block-ship.hoon @@ -9,7 +9,7 @@ -- ++ grab |% - ++ noun ship + ++ noun ship:c ++ json block-ship:dejs:j -- -- diff --git a/desk/mar/chat/negotiate.hoon b/desk/mar/chat/negotiate.hoon index 10e02f62df..e58fde685a 100644 --- a/desk/mar/chat/negotiate.hoon +++ b/desk/mar/chat/negotiate.hoon @@ -3,10 +3,12 @@ ++ grow |% ++ noun who + ++ ship who -- ++ grab |% ++ noun @p + ++ ship same ++ json (su:dejs:format ;~(pfix sig fed:ag)) -- -- diff --git a/desk/mar/chat/unblock-ship.hoon b/desk/mar/chat/unblock-ship.hoon index 90216e7b02..8c38ee4dff 100644 --- a/desk/mar/chat/unblock-ship.hoon +++ b/desk/mar/chat/unblock-ship.hoon @@ -9,7 +9,7 @@ -- ++ grab |% - ++ noun ship + ++ noun ^ship ++ json unblock-ship:dejs:j -- -- diff --git a/desk/mar/chat/writs.hoon b/desk/mar/chat/writs.hoon index 6d3d329f0d..ccc64422b9 100644 --- a/desk/mar/chat/writs.hoon +++ b/desk/mar/chat/writs.hoon @@ -5,7 +5,7 @@ ++ grow |% ++ noun writs - ++ json (writs:enjs:j writs) + ++ json (writs:v7:enjs:j writs) ::REVIEW -- ++ grab |% diff --git a/desk/mar/contact/changed-pages.hoon b/desk/mar/contact/changed-pages.hoon index 619b92e371..2f6d579ae0 100644 --- a/desk/mar/contact/changed-pages.hoon +++ b/desk/mar/contact/changed-pages.hoon @@ -18,6 +18,6 @@ -- ++ grab |% - ++ noun (map kip:c (unit page:c)) + ++ noun (map kip:c ,[(unit contact:c) (unit contact:c)]) -- -- diff --git a/desk/mar/emojimart.hoon b/desk/mar/emojimart.hoon index 678524fb10..f2c94d24db 100644 --- a/desk/mar/emojimart.hoon +++ b/desk/mar/emojimart.hoon @@ -6,8 +6,10 @@ [n=@ a=@ b=@ c=@ d=@ e=@] :: neutral & with skin tones -- |_ e=(map @t mote) +++ grad %noun ++ grab |% + ++ noun (map @t mote) ++ jam (cork cue (map @t mote)) -- ++ grow diff --git a/desk/mar/group/create.hoon b/desk/mar/group/create.hoon index 677eab52a6..3733326964 100644 --- a/desk/mar/group/create.hoon +++ b/desk/mar/group/create.hoon @@ -9,6 +9,6 @@ ++ grab |% ++ noun create:v7:gv - ++ json create:v7:dejs:j + ++ json |=(^json *create:v7:gv) ::TODO REVIEW create:v7:dejs:j doesn't exist -- -- diff --git a/desk/mar/group/init-0.hoon b/desk/mar/group/init-0.hoon index 081495b4e1..b5daecfd05 100644 --- a/desk/mar/group/init-0.hoon +++ b/desk/mar/group/init-0.hoon @@ -1,6 +1,6 @@ /- gv=groups-ver /+ j=groups-json -|_ =init:zer:old:gv +|_ =init:v0:gv ++ grad %noun ++ grow |% @@ -8,6 +8,6 @@ -- ++ grab |% - ++ noun init:zer:old:gv + ++ noun init:v0:gv -- -- diff --git a/desk/mar/group/invites-1.hoon b/desk/mar/group/invites-1.hoon index 44cf9f761f..fa7374e63c 100644 --- a/desk/mar/group/invites-1.hoon +++ b/desk/mar/group/invites-1.hoon @@ -1,14 +1,14 @@ /- gv=groups-ver /+ gj=groups-json -|_ =invites:v7:gv +|_ invites=(list invite:v7:gv) ++ grad %noun ++ grow |% ++ noun invites - ++ json (invites:v7:enjs:gvj invites) + ++ json a+(turn invites invite:v7:enjs:gj) -- ++ grab |% - ++ noun invites:v7:gv + ++ noun (list invite:v7:gv) -- -- diff --git a/desk/mar/group/invites.hoon b/desk/mar/group/invites.hoon index 2d7f17cf69..6aeb1ec634 100644 --- a/desk/mar/group/invites.hoon +++ b/desk/mar/group/invites.hoon @@ -1,15 +1,15 @@ /- gv=groups-ver /+ j=groups-json -|_ invites=(list invite:gv +|_ invites=(list invite:v2:gv) ::REVIEW ++ grad %noun ++ grow |% - ++ noun invite - ++ json (invite:enjs:j invite) + ++ noun invites + ++ json a+(turn invites invite:v2:enjs:j) -- ++ grab |% - ++ noun invite:gv - ++ json invite:dejs:j + ++ noun (list invite:v2:gv) + ++ json (ar:dejs:format invite:v2:dejs:j) -- -- diff --git a/desk/mar/group/preview-update.hoon b/desk/mar/group/preview-update.hoon index 49f5faaa08..c1b25a2798 100644 --- a/desk/mar/group/preview-update.hoon +++ b/desk/mar/group/preview-update.hoon @@ -1,5 +1,5 @@ /- gv=groups-ver -|_ =preview-update:gv +|_ =preview-update:v7:gv ++ grad %noun ++ grow |% @@ -7,6 +7,6 @@ -- ++ grab |% - ++ noun preview-update:gv + ++ noun preview-update:v7:gv -- -- diff --git a/desk/mar/hook/setup-template-args.hoon b/desk/mar/hook/setup-template-args.hoon index a6ac12ff3d..b050e4e92a 100644 --- a/desk/mar/hook/setup-template-args.hoon +++ b/desk/mar/hook/setup-template-args.hoon @@ -14,7 +14,7 @@ -- ++ grab |% - ++ noun [nest:c nest:c] + ++ noun ,[nest:c nest:c] ++ json =, dejs:format %- ot diff --git a/desk/mar/hook/setup-template.hoon b/desk/mar/hook/setup-template.hoon index 49adc4309f..4ea86892a8 100644 --- a/desk/mar/hook/setup-template.hoon +++ b/desk/mar/hook/setup-template.hoon @@ -8,6 +8,6 @@ -- ++ grab |% - ++ noun [=nest:c =template:h] + ++ noun ,[=nest:c =template:h] -- -- diff --git a/desk/mar/reel/describe.hoon b/desk/mar/reel/describe.hoon index 3f5393f2d3..c37ed5e72d 100644 --- a/desk/mar/reel/describe.hoon +++ b/desk/mar/reel/describe.hoon @@ -4,7 +4,7 @@ ++ grad %noun ++ grab |% - ++ noun [token:reel metadata:reel] + ++ noun ,[token:reel metadata:reel] ++ json (ot:dejs:format ~[token+so:dejs:format metadata+dejs-metadata]) -- ++ grow diff --git a/desk/mar/reel/metadata.hoon b/desk/mar/reel/metadata.hoon index 179842b952..fd3d4c9778 100644 --- a/desk/mar/reel/metadata.hoon +++ b/desk/mar/reel/metadata.hoon @@ -4,7 +4,7 @@ ++ grad %noun ++ grab |% - ++ noun metadata + ++ noun metadata:reel ++ json dejs-metadata -- ++ grow diff --git a/desk/mar/reel/undescribe.hoon b/desk/mar/reel/undescribe.hoon index 4787ac0032..712316f107 100644 --- a/desk/mar/reel/undescribe.hoon +++ b/desk/mar/reel/undescribe.hoon @@ -4,7 +4,7 @@ ++ grad %noun ++ grab |% - ++ noun (pair cord cord) + ++ noun cord ++ json (ot:dejs:format ~[token+so:dejs:format]) -- ++ grow diff --git a/desk/mar/sigil.hoon b/desk/mar/sigil.hoon index 4d8a4a1343..a5cade27f5 100644 --- a/desk/mar/sigil.hoon +++ b/desk/mar/sigil.hoon @@ -1,7 +1,9 @@ /? 310 |_ s=(map cord (list manx)) +++ grad %noun ++ grab |% + ++ noun (map cord (list manx)) ++ jam (cork cue (map cord (list manx))) -- ++ grow diff --git a/desk/mar/ui/action.hoon b/desk/mar/ui/action.hoon index c3d14523ae..fc75c4ad40 100644 --- a/desk/mar/ui/action.hoon +++ b/desk/mar/ui/action.hoon @@ -9,7 +9,7 @@ -- ++ grab |% - ++ noun (list whom:u) + ++ noun action:u ++ json ui-action:dejs:gj -- -- diff --git a/desk/mar/writ-diff.hoon b/desk/mar/writ-diff.hoon index d0b431c146..da7151c6f4 100644 --- a/desk/mar/writ-diff.hoon +++ b/desk/mar/writ-diff.hoon @@ -1,14 +1,14 @@ -/- c=chat +/- cv=chat-ver /+ j=chat-json -|_ =diff:writs:c +|_ =diff:writs:v5:cv ::REVIEW unused ++ grad %noun ++ grow |% ++ noun diff - ++ json (writs-diff:enjs:j diff) + ++ json (writs-diff:v5:enjs:j diff) -- ++ grab |% - ++ noun diff:writs:c + ++ noun diff:writs:v5:cv -- -- From 8333fa4c50ff37c0929c8ad15bd039f2d21fe88d Mon Sep 17 00:00:00 2001 From: fang Date: Wed, 29 Apr 2026 09:29:56 +0200 Subject: [PATCH 05/20] rail: add discipline mark set, en-rail conversion The discipline mark set lets us convert vases into well-typed rails. (But does not take away crash risk due to poorly typed vases.) We make chat use it right away to deduplicate its mark list. The generator contains a list of marks marked as non-strict for the purpose of mark-type-changed checking. We also add a conversion from cage to rail, paving the way for further guardian work. --- desk/app/chat.hoon | 64 +- desk/gen/rail.hoon | 51 +- desk/lib/rail.hoon | 1526 ++++++++++++++++++++++++++++++++------------ 3 files changed, 1160 insertions(+), 481 deletions(-) diff --git a/desk/app/chat.hoon b/desk/app/chat.hoon index 4b187effba..0c33cae59e 100644 --- a/desk/app/chat.hoon +++ b/desk/app/chat.hoon @@ -70,69 +70,7 @@ %- %- discipline :+ :: marks :: - :~ :+ %chat-blocked-by & -:!>(*vale:m-chat-blocked-by) - :+ %chat-changed-writs & -:!>(*vale:m-chat-changed-writs) - ::TODO make strict - :+ %chat-changed-writs-1 | -:!>(*vale:m-chat-changed-writs-1) - ::TODO make strict one day (affected by versioning mistake) - :+ %chat-club-action | -:!>(*vale:m-chat-club-action) - :+ %chat-club-action-0 & -:!>(*vale:m-chat-club-action-0) - :+ %chat-club-action-1 & -:!>(*vale:m-chat-club-action-1) - ::TODO make strict - :+ %chat-club-action-2 | -:!>(*vale:m-chat-club-action-2) - :+ %chat-dm-action & -:!>(*vale:m-chat-dm-action) - :+ %chat-dm-action-1 & -:!>(*vale:m-chat-dm-action-1) - ::TODO make strict - :+ %chat-dm-action-2 | -:!>(*vale:m-chat-dm-action-2) - :+ %chat-dm-diff & -:!>(*vale:m-chat-dm-diff) - :+ %chat-dm-diff-1 & -:!>(*vale:m-chat-dm-diff-1) - ::TODO make strict - :+ %chat-dm-diff-2 | -:!>(*vale:m-chat-dm-diff-2) - :+ %chat-heads & -:!>(*vale:m-chat-heads) - :+ %chat-heads-1 & -:!>(*vale:m-chat-heads-1) - :+ %chat-heads-2 & -:!>(*vale:m-chat-heads-2) - :+ %chat-heads-3 & -:!>(*vale:m-chat-heads-3) - ::TODO make strict - :+ %chat-heads-4 | -:!>(*vale:m-chat-heads-4) - :+ %chat-paged-writs & -:!>(*vale:m-chat-paged-writs) - :+ %chat-paged-writs-1 & -:!>(*vale:m-chat-paged-writs-1) - :+ %chat-paged-writs-2 & -:!>(*vale:m-chat-paged-writs-2) - :+ %chat-paged-writs-3 & -:!>(*vale:m-chat-paged-writs-3) - ::TODO make strict - :+ %chat-paged-writs-4 | -:!>(*vale:m-chat-paged-writs-4) - :+ %chat-scam & -:!>(*vale:m-chat-scam) - :+ %chat-scam-1 & -:!>(*vale:m-chat-scam-1) - :+ %chat-scam-2 & -:!>(*vale:m-chat-scam-2) - :+ %chat-scam-3 & -:!>(*vale:m-chat-scam-3) - ::TODO make strict - :+ %chat-scam-4 | -:!>(*vale:m-chat-scam-4) - :+ %chat-scan & -:!>(*vale:m-chat-scan) - :+ %chat-scan-1 & -:!>(*vale:m-chat-scan-1) - :+ %chat-scan-2 & -:!>(*vale:m-chat-scan-2) - :+ %chat-scan-3 & -:!>(*vale:m-chat-scan-3) - ::TODO make strict - :+ %chat-scan-4 | -:!>(*vale:m-chat-scan-4) - :+ %chat-toggle-message & -:!>(*vale:m-chat-toggle-message) - :+ %chat-unblocked-by & -:!>(*vale:m-chat-unblocked-by) - :+ %chat-unread-update & -:!>(*vale:m-chat-unread-update) - :+ %chat-unreads & -:!>(*vale:m-chat-unreads) - :+ %chat-writ-1 & -:!>(*vale:m-chat-writ-1) - :+ %chat-writ-2 & -:!>(*vale:m-chat-writ-2) - :+ %chat-writ-3 & -:!>(*vale:m-chat-writ-3) - ::TODO make strict - :+ %chat-writ-4 | -:!>(*vale:m-chat-writ-4) - :+ %clubs & -:!>(*vale:m-clubs) - :+ %epic & -:!>(*vale:m-epic) - :+ %hidden-messages & -:!>(*vale:m-hidden-messages) - :+ %ships & -:!>(*vale:m-ships) - :+ %writ & -:!>(*vale:m-writ) - :+ %writ-response & -:!>(*vale:m-writ-response) - :+ %writ-response-1 & -:!>(*vale:m-writ-response-1) - :+ %writ-response-2 & -:!>(*vale:m-writ-response-2) - :+ %writ-response-3 & -:!>(*vale:m-writ-response-3) - ::TODO make strict - :+ %writ-response-4 | -:!>(*vale:m-writ-response-4) - == + discipline:guardian :: facts :: :~ [/ %chat-blocked-by %chat-unblocked-by %chat-toggle-message %chat-club-action %writ-response %ships ~] diff --git a/desk/gen/rail.hoon b/desk/gen/rail.hoon index 0e5a199976..2d8936f871 100644 --- a/desk/gen/rail.hoon +++ b/desk/gen/rail.hoon @@ -3,6 +3,21 @@ ::TODO investigate adding a "meta-build" for rune that evaluates the file :: to obtain a hoon ast, which it then compiles into the result :: +=/ non-strict-marks=(set mark) + ^~ %- sy ^- (list mark) + :~ %chat-changed-writs-1 + %chat-club-action + %chat-club-action-2 + %chat-dm-action-2 + %chat-dm-diff-2 + %chat-heads-4 + %chat-paged-writs-4 + %chat-scam-4 + %chat-scan-4 + %chat-writ-4 + %writ-response-4 + == +:: :- %say |= $: [now=@da eny=@uvJ bec=beak] ~ @@ -70,7 +85,7 @@ %+ rap 3 :~ '$: %' m gap ?.(bcls '' (rap 3 '$+ ' m gap ~)) - '_*vale:' m gap '==' + 'p=_*vale:' m gap '==' == '\0a' :: @@ -92,6 +107,40 @@ =+ gap=(fil 3 (add 2 (sub max (met 3 m))) ' ') (rap 3 '%' m gap '[-.rail !>(+.rail)]' ~) '\0a' + :: + ''' + == + :: + ++ en-rail + |= cage + ^- rail + ?+ p [%unsafe p q] + ''' + :: + %^ rap 3 '\0a ' + %+ join '\0a ' + %+ turn maz + |= m=mark + =+ gap=(fil 3 (add 2 (sub max (met 3 m))) ' ') + (rap 3 '%' m gap '[p !<(_*vale:' m ' q)]' ~) + '\0a' + :: + ''' + == + :: + ++ discipline + ^- (list [=mark strict=? =type]) + :~ + ''' + :: + %^ rap 3 ' ' + %+ join '\0a ' + %+ turn maz + |= m=mark + =+ gap=(fil 3 (add 2 (sub max (met 3 m))) ' ') + =+ sic=?:((~(has in non-strict-marks) m) '|' '&') + (rap 3 ':+ %' m gap sic ' -:!>(*vale:' m ')' ~) + '\0a' :: ''' == diff --git a/desk/lib/rail.hoon b/desk/lib/rail.hoon index b4e04965dd..64d1aa1ca1 100644 --- a/desk/lib/rail.hoon +++ b/desk/lib/rail.hoon @@ -1,12 +1,15 @@ :: THIS FILE IS AUTO-GENERATED, DO NOT MODIFY IT DIRECTLY :: -:: to update it, pulling in all marks in your current groups desk, run: +:: to update it, pulling in *all* marks in your current %groups desk, run: :: *%%%/groups/0/lib/rail/hoon +groups!rail :: :: BE VERY CAREFUL, if there are mark files in your desk that are not in :: the "stock" distribution, the generated file will fail to built on :: other ships. CI *should* catch this, but remain mindful. :: +:: specifies a $rail type, a "typed $cage" containing all the desk's marks +:: and a +de-rail helper for turning that back into a $cage. +:: /% activity-action %activity-action /% activity-allowed %activity-allowed /% activity-event %activity-event @@ -429,422 +432,371 @@ +$ rail $+ rail $% [%unsafe =cage] :: - $: %activity-action $+ activity-action _*vale:activity-action == - $: %activity-allowed $+ activity-allowed _*vale:activity-allowed == - $: %activity-event $+ activity-event _*vale:activity-event == - $: %activity-feed $+ activity-feed _*vale:activity-feed == - $: %activity-feed-5 $+ activity-feed-5 _*vale:activity-feed-5 == - $: %activity-feed-init $+ activity-feed-init _*vale:activity-feed-init == - $: %activity-feed-init-5 $+ activity-feed-init-5 _*vale:activity-feed-init-5 == - $: %activity-full $+ activity-full _*vale:activity-full == - $: %activity-full-1 $+ activity-full-1 _*vale:activity-full-1 == - $: %activity-full-4 $+ activity-full-4 _*vale:activity-full-4 == - $: %activity-settings $+ activity-settings _*vale:activity-settings == - $: %activity-stream $+ activity-stream _*vale:activity-stream == - $: %activity-summary $+ activity-summary _*vale:activity-summary == - $: %activity-summary-1 $+ activity-summary-1 _*vale:activity-summary-1 == - $: %activity-summary-4 $+ activity-summary-4 _*vale:activity-summary-4 == - $: %activity-summary-pairs-4 $+ activity-summary-pairs-4 _*vale:activity-summary-pairs-4 == - $: %activity-update $+ activity-update _*vale:activity-update == - $: %activity-update-1 $+ activity-update-1 _*vale:activity-update-1 == - $: %activity-update-4 $+ activity-update-4 _*vale:activity-update-4 == - $: %aqua-effect $+ aqua-effect _*vale:aqua-effect == - $: %atom $+ atom _*vale:atom == - $: %bait-acknowledge $+ bait-acknowledge _*vale:bait-acknowledge == - $: %bait-describe $+ bait-describe _*vale:bait-describe == - $: %bait-undescribe $+ bait-undescribe _*vale:bait-undescribe == - $: %bait-update $+ bait-update _*vale:bait-update == - $: %bait-update-group $+ bait-update-group _*vale:bait-update-group == - $: %bark-add-recipient $+ bark-add-recipient _*vale:bark-add-recipient == - $: %bark-receive-summary $+ bark-receive-summary _*vale:bark-receive-summary == - $: %bark-remove-recipient $+ bark-remove-recipient _*vale:bark-remove-recipient == - $: %belt $+ belt _*vale:belt == - $: %bill $+ bill _*vale:bill == - $: %blit $+ blit _*vale:blit == - $: %broadcaster-action $+ broadcaster-action _*vale:broadcaster-action == - $: %channel-action $+ channel-action _*vale:channel-action == - $: %channel-action-1 $+ channel-action-1 _*vale:channel-action-1 == - $: %channel-action-2 $+ channel-action-2 _*vale:channel-action-2 == - $: %channel-changed-posts $+ channel-changed-posts _*vale:channel-changed-posts == - $: %channel-changed-posts-1 $+ channel-changed-posts-1 _*vale:channel-changed-posts-1 == - $: %channel-checkpoint $+ channel-checkpoint _*vale:channel-checkpoint == - $: %channel-command $+ channel-command _*vale:channel-command == - $: %channel-denied $+ channel-denied _*vale:channel-denied == - $: %channel-heads $+ channel-heads _*vale:channel-heads == - $: %channel-heads-2 $+ channel-heads-2 _*vale:channel-heads-2 == - $: %channel-heads-3 $+ channel-heads-3 _*vale:channel-heads-3 == - $: %channel-heads-4 $+ channel-heads-4 _*vale:channel-heads-4 == - $: %channel-leave $+ channel-leave _*vale:channel-leave == - $: %channel-logs $+ channel-logs _*vale:channel-logs == - $: %channel-perm $+ channel-perm _*vale:channel-perm == - $: %channel-post $+ channel-post _*vale:channel-post == - $: %channel-post-2 $+ channel-post-2 _*vale:channel-post-2 == - $: %channel-post-3 $+ channel-post-3 _*vale:channel-post-3 == - $: %channel-post-4 $+ channel-post-4 _*vale:channel-post-4 == - $: %channel-post-5 $+ channel-post-5 _*vale:channel-post-5 == - $: %channel-posts $+ channel-posts _*vale:channel-posts == - $: %channel-posts-2 $+ channel-posts-2 _*vale:channel-posts-2 == - $: %channel-posts-3 $+ channel-posts-3 _*vale:channel-posts-3 == - $: %channel-posts-4 $+ channel-posts-4 _*vale:channel-posts-4 == - $: %channel-posts-5 $+ channel-posts-5 _*vale:channel-posts-5 == - $: %channel-preview $+ channel-preview _*vale:channel-preview == - $: %channel-preview-1 $+ channel-preview-1 _*vale:channel-preview-1 == - $: %channel-replies $+ channel-replies _*vale:channel-replies == - $: %channel-replies-2 $+ channel-replies-2 _*vale:channel-replies-2 == - $: %channel-replies-3 $+ channel-replies-3 _*vale:channel-replies-3 == - $: %channel-replies-4 $+ channel-replies-4 _*vale:channel-replies-4 == - $: %channel-replies-5 $+ channel-replies-5 _*vale:channel-replies-5 == - $: %channel-reply $+ channel-reply _*vale:channel-reply == - $: %channel-reply-2 $+ channel-reply-2 _*vale:channel-reply-2 == - $: %channel-request-join $+ channel-request-join _*vale:channel-request-join == - $: %channel-response $+ channel-response _*vale:channel-response == - $: %channel-response-1 $+ channel-response-1 _*vale:channel-response-1 == - $: %channel-response-2 $+ channel-response-2 _*vale:channel-response-2 == - $: %channel-response-3 $+ channel-response-3 _*vale:channel-response-3 == - $: %channel-response-4 $+ channel-response-4 _*vale:channel-response-4 == - $: %channel-response-5 $+ channel-response-5 _*vale:channel-response-5 == - $: %channel-said $+ channel-said _*vale:channel-said == - $: %channel-said-1 $+ channel-said-1 _*vale:channel-said-1 == - $: %channel-said-2 $+ channel-said-2 _*vale:channel-said-2 == - $: %channel-said-3 $+ channel-said-3 _*vale:channel-said-3 == - $: %channel-scam $+ channel-scam _*vale:channel-scam == - $: %channel-scam-2 $+ channel-scam-2 _*vale:channel-scam-2 == - $: %channel-scam-3 $+ channel-scam-3 _*vale:channel-scam-3 == - $: %channel-scam-4 $+ channel-scam-4 _*vale:channel-scam-4 == - $: %channel-scan $+ channel-scan _*vale:channel-scan == - $: %channel-scan-2 $+ channel-scan-2 _*vale:channel-scan-2 == - $: %channel-scan-3 $+ channel-scan-3 _*vale:channel-scan-3 == - $: %channel-scan-4 $+ channel-scan-4 _*vale:channel-scan-4 == - $: %channel-simple-post $+ channel-simple-post _*vale:channel-simple-post == - $: %channel-simple-posts $+ channel-simple-posts _*vale:channel-simple-posts == - $: %channel-simple-replies $+ channel-simple-replies _*vale:channel-simple-replies == - $: %channel-simple-reply $+ channel-simple-reply _*vale:channel-simple-reply == - $: %channel-simple-response $+ channel-simple-response _*vale:channel-simple-response == - $: %channel-unread-update $+ channel-unread-update _*vale:channel-unread-update == - $: %channel-unreads $+ channel-unreads _*vale:channel-unreads == - $: %channel-update $+ channel-update _*vale:channel-update == - $: %channels $+ channels _*vale:channels == - $: %channels-2 $+ channels-2 _*vale:channels-2 == - $: %channels-3 $+ channels-3 _*vale:channels-3 == - $: %channels-4 $+ channels-4 _*vale:channels-4 == - $: %channels-5 $+ channels-5 _*vale:channels-5 == - $: %chat-block-ship $+ chat-block-ship _*vale:chat-block-ship == - $: %chat-blocked $+ chat-blocked _*vale:chat-blocked == - $: %chat-blocked-by $+ chat-blocked-by _*vale:chat-blocked-by == - $: %chat-changed-writs $+ chat-changed-writs _*vale:chat-changed-writs == - $: %chat-changed-writs-1 $+ chat-changed-writs-1 _*vale:chat-changed-writs-1 == - $: %chat-club-action $+ chat-club-action _*vale:chat-club-action == - $: %chat-club-action-0 $+ chat-club-action-0 _*vale:chat-club-action-0 == - $: %chat-club-action-1 $+ chat-club-action-1 _*vale:chat-club-action-1 == - $: %chat-club-action-2 $+ chat-club-action-2 _*vale:chat-club-action-2 == - $: %chat-club-create $+ chat-club-create _*vale:chat-club-create == - $: %chat-dm-action $+ chat-dm-action _*vale:chat-dm-action == - $: %chat-dm-action-1 $+ chat-dm-action-1 _*vale:chat-dm-action-1 == - $: %chat-dm-action-2 $+ chat-dm-action-2 _*vale:chat-dm-action-2 == - $: %chat-dm-archive $+ chat-dm-archive _*vale:chat-dm-archive == - $: %chat-dm-diff $+ chat-dm-diff _*vale:chat-dm-diff == - $: %chat-dm-diff-1 $+ chat-dm-diff-1 _*vale:chat-dm-diff-1 == - $: %chat-dm-diff-2 $+ chat-dm-diff-2 _*vale:chat-dm-diff-2 == - $: %chat-dm-rsvp $+ chat-dm-rsvp _*vale:chat-dm-rsvp == - $: %chat-heads $+ chat-heads _*vale:chat-heads == - $: %chat-heads-1 $+ chat-heads-1 _*vale:chat-heads-1 == - $: %chat-heads-2 $+ chat-heads-2 _*vale:chat-heads-2 == - $: %chat-heads-3 $+ chat-heads-3 _*vale:chat-heads-3 == - $: %chat-heads-4 $+ chat-heads-4 _*vale:chat-heads-4 == - $: %chat-negotiate $+ chat-negotiate _*vale:chat-negotiate == - $: %chat-paged-writs $+ chat-paged-writs _*vale:chat-paged-writs == - $: %chat-paged-writs-1 $+ chat-paged-writs-1 _*vale:chat-paged-writs-1 == - $: %chat-paged-writs-2 $+ chat-paged-writs-2 _*vale:chat-paged-writs-2 == - $: %chat-paged-writs-3 $+ chat-paged-writs-3 _*vale:chat-paged-writs-3 == - $: %chat-paged-writs-4 $+ chat-paged-writs-4 _*vale:chat-paged-writs-4 == - $: %chat-remark-action $+ chat-remark-action _*vale:chat-remark-action == - $: %chat-scam $+ chat-scam _*vale:chat-scam == - $: %chat-scam-1 $+ chat-scam-1 _*vale:chat-scam-1 == - $: %chat-scam-2 $+ chat-scam-2 _*vale:chat-scam-2 == - $: %chat-scam-3 $+ chat-scam-3 _*vale:chat-scam-3 == - $: %chat-scam-4 $+ chat-scam-4 _*vale:chat-scam-4 == - $: %chat-scan $+ chat-scan _*vale:chat-scan == - $: %chat-scan-1 $+ chat-scan-1 _*vale:chat-scan-1 == - $: %chat-scan-2 $+ chat-scan-2 _*vale:chat-scan-2 == - $: %chat-scan-3 $+ chat-scan-3 _*vale:chat-scan-3 == - $: %chat-scan-4 $+ chat-scan-4 _*vale:chat-scan-4 == - $: %chat-toggle-message $+ chat-toggle-message _*vale:chat-toggle-message == - $: %chat-unblock-ship $+ chat-unblock-ship _*vale:chat-unblock-ship == - $: %chat-unblocked $+ chat-unblocked _*vale:chat-unblocked == - $: %chat-unblocked-by $+ chat-unblocked-by _*vale:chat-unblocked-by == - $: %chat-unread-update $+ chat-unread-update _*vale:chat-unread-update == - $: %chat-unreads $+ chat-unreads _*vale:chat-unreads == - $: %chat-writ-1 $+ chat-writ-1 _*vale:chat-writ-1 == - $: %chat-writ-2 $+ chat-writ-2 _*vale:chat-writ-2 == - $: %chat-writ-3 $+ chat-writ-3 _*vale:chat-writ-3 == - $: %chat-writ-4 $+ chat-writ-4 _*vale:chat-writ-4 == - $: %chat-writs $+ chat-writs _*vale:chat-writs == - $: %club-action $+ club-action _*vale:club-action == - $: %clubs $+ clubs _*vale:clubs == - $: %contact $+ contact _*vale:contact == - $: %contact-0 $+ contact-0 _*vale:contact-0 == - $: %contact-1 $+ contact-1 _*vale:contact-1 == - $: %contact-action $+ contact-action _*vale:contact-action == - $: %contact-action-0 $+ contact-action-0 _*vale:contact-action-0 == - $: %contact-action-1 $+ contact-action-1 _*vale:contact-action-1 == - $: %contact-book $+ contact-book _*vale:contact-book == - $: %contact-book-0 $+ contact-book-0 _*vale:contact-book-0 == - $: %contact-changed-contacts $+ contact-changed-contacts _*vale:contact-changed-contacts == - $: %contact-changed-pages $+ contact-changed-pages _*vale:contact-changed-pages == - $: %contact-directory $+ contact-directory _*vale:contact-directory == - $: %contact-directory-0 $+ contact-directory-0 _*vale:contact-directory-0 == - $: %contact-news $+ contact-news _*vale:contact-news == - $: %contact-page $+ contact-page _*vale:contact-page == - $: %contact-page-0 $+ contact-page-0 _*vale:contact-page-0 == - $: %contact-page-1 $+ contact-page-1 _*vale:contact-page-1 == - $: %contact-response-0 $+ contact-response-0 _*vale:contact-response-0 == - $: %contact-rolodex $+ contact-rolodex _*vale:contact-rolodex == - $: %contact-update $+ contact-update _*vale:contact-update == - $: %contact-update-0 $+ contact-update-0 _*vale:contact-update-0 == - $: %contact-update-1 $+ contact-update-1 _*vale:contact-update-1 == - $: %css $+ css _*vale:css == - $: %curio $+ curio _*vale:curio == - $: %curios-diff $+ curios-diff _*vale:curios-diff == - $: %diary-action $+ diary-action _*vale:diary-action == - $: %diary-action-0 $+ diary-action-0 _*vale:diary-action-0 == - $: %diary-action-1 $+ diary-action-1 _*vale:diary-action-1 == - $: %diary-action-2 $+ diary-action-2 _*vale:diary-action-2 == - $: %diary-action-3 $+ diary-action-3 _*vale:diary-action-3 == - $: %diary-brief-update $+ diary-brief-update _*vale:diary-brief-update == - $: %diary-briefs $+ diary-briefs _*vale:diary-briefs == - $: %diary-create $+ diary-create _*vale:diary-create == - $: %diary-denied $+ diary-denied _*vale:diary-denied == - $: %diary-leave $+ diary-leave _*vale:diary-leave == - $: %diary-logs $+ diary-logs _*vale:diary-logs == - $: %diary-logs-0 $+ diary-logs-0 _*vale:diary-logs-0 == - $: %diary-logs-1 $+ diary-logs-1 _*vale:diary-logs-1 == - $: %diary-logs-2 $+ diary-logs-2 _*vale:diary-logs-2 == - $: %diary-logs-3 $+ diary-logs-3 _*vale:diary-logs-3 == - $: %diary-note $+ diary-note _*vale:diary-note == - $: %diary-notes $+ diary-notes _*vale:diary-notes == - $: %diary-outline $+ diary-outline _*vale:diary-outline == - $: %diary-outlines $+ diary-outlines _*vale:diary-outlines == - $: %diary-perm $+ diary-perm _*vale:diary-perm == - $: %diary-quips $+ diary-quips _*vale:diary-quips == - $: %diary-remark-action $+ diary-remark-action _*vale:diary-remark-action == - $: %diary-said $+ diary-said _*vale:diary-said == - $: %diary-update $+ diary-update _*vale:diary-update == - $: %diary-update-0 $+ diary-update-0 _*vale:diary-update-0 == - $: %diary-update-1 $+ diary-update-1 _*vale:diary-update-1 == - $: %diary-update-2 $+ diary-update-2 _*vale:diary-update-2 == - $: %diary-update-3 $+ diary-update-3 _*vale:diary-update-3 == - $: %dm-action $+ dm-action _*vale:dm-action == - $: %dm-archive $+ dm-archive _*vale:dm-archive == - $: %dm-diff $+ dm-diff _*vale:dm-diff == - $: %dm-rsvp $+ dm-rsvp _*vale:dm-rsvp == - $: %dm-unarchive $+ dm-unarchive _*vale:dm-unarchive == - $: %docket-0 $+ docket-0 _*vale:docket-0 == - $: %dude $+ dude _*vale:dude == - $: %dummy $+ dummy _*vale:dummy == - $: %emojimart $+ emojimart _*vale:emojimart == - $: %epic $+ epic _*vale:epic == - $: %flag $+ flag _*vale:flag == - $: %flags $+ flags _*vale:flags == - $: %foreign-1 $+ foreign-1 _*vale:foreign-1 == - $: %foreign-2 $+ foreign-2 _*vale:foreign-2 == - $: %foreigns-1 $+ foreigns-1 _*vale:foreigns-1 == - $: %gangs $+ gangs _*vale:gangs == - $: %group $+ group _*vale:group == - $: %group-1 $+ group-1 _*vale:group-1 == - $: %group-2 $+ group-2 _*vale:group-2 == - $: %group-action $+ group-action _*vale:group-action == - $: %group-action-0 $+ group-action-0 _*vale:group-action-0 == - $: %group-action-1 $+ group-action-1 _*vale:group-action-1 == - $: %group-action-2 $+ group-action-2 _*vale:group-action-2 == - $: %group-action-3 $+ group-action-3 _*vale:group-action-3 == - $: %group-action-4 $+ group-action-4 _*vale:group-action-4 == - $: %group-cancel $+ group-cancel _*vale:group-cancel == - $: %group-changed-groups-1 $+ group-changed-groups-1 _*vale:group-changed-groups-1 == - $: %group-changed-groups-2 $+ group-changed-groups-2 _*vale:group-changed-groups-2 == - $: %group-command $+ group-command _*vale:group-command == - $: %group-create $+ group-create _*vale:group-create == - $: %group-create-thread $+ group-create-thread _*vale:group-create-thread == - $: %group-foreign-1 $+ group-foreign-1 _*vale:group-foreign-1 == - $: %group-foreign-2 $+ group-foreign-2 _*vale:group-foreign-2 == - $: %group-init $+ group-init _*vale:group-init == - $: %group-init-0 $+ group-init-0 _*vale:group-init-0 == - $: %group-init-1 $+ group-init-1 _*vale:group-init-1 == - $: %group-init-2 $+ group-init-2 _*vale:group-init-2 == - $: %group-init-3 $+ group-init-3 _*vale:group-init-3 == - $: %group-init-4 $+ group-init-4 _*vale:group-init-4 == - $: %group-invite $+ group-invite _*vale:group-invite == - $: %group-invite-1 $+ group-invite-1 _*vale:group-invite-1 == - $: %group-invites $+ group-invites _*vale:group-invites == - $: %group-invites-1 $+ group-invites-1 _*vale:group-invites-1 == - $: %group-join $+ group-join _*vale:group-join == - $: %group-knock $+ group-knock _*vale:group-knock == - $: %group-leave $+ group-leave _*vale:group-leave == - $: %group-log $+ group-log _*vale:group-log == - $: %group-preview $+ group-preview _*vale:group-preview == - $: %group-preview-1 $+ group-preview-1 _*vale:group-preview-1 == - $: %group-preview-2 $+ group-preview-2 _*vale:group-preview-2 == - $: %group-preview-3 $+ group-preview-3 _*vale:group-preview-3 == - $: %group-preview-update $+ group-preview-update _*vale:group-preview-update == - $: %group-previews $+ group-previews _*vale:group-previews == - $: %group-previews-1 $+ group-previews-1 _*vale:group-previews-1 == - $: %group-rescind $+ group-rescind _*vale:group-rescind == - $: %group-response-1 $+ group-response-1 _*vale:group-response-1 == - $: %group-token $+ group-token _*vale:group-token == - $: %group-ui $+ group-ui _*vale:group-ui == - $: %group-ui-1 $+ group-ui-1 _*vale:group-ui-1 == - $: %group-ui-2 $+ group-ui-2 _*vale:group-ui-2 == - $: %group-update $+ group-update _*vale:group-update == - $: %grouper-answer-enabled $+ grouper-answer-enabled _*vale:grouper-answer-enabled == - $: %grouper-ask-enabled $+ grouper-ask-enabled _*vale:grouper-ask-enabled == - $: %grouper-disable $+ grouper-disable _*vale:grouper-disable == - $: %grouper-enable $+ grouper-enable _*vale:grouper-enable == - $: %groups $+ groups _*vale:groups == - $: %groups-1 $+ groups-1 _*vale:groups-1 == - $: %groups-2 $+ groups-2 _*vale:groups-2 == - $: %groups-ui $+ groups-ui _*vale:groups-ui == - $: %groups-ui-1 $+ groups-ui-1 _*vale:groups-ui-1 == - $: %groups-ui-2 $+ groups-ui-2 _*vale:groups-ui-2 == - $: %growl-summarize $+ growl-summarize _*vale:growl-summarize == - $: %hark-yarn $+ hark-yarn _*vale:hark-yarn == - $: %heap-action $+ heap-action _*vale:heap-action == - $: %heap-action-0 $+ heap-action-0 _*vale:heap-action-0 == - $: %heap-action-1 $+ heap-action-1 _*vale:heap-action-1 == - $: %heap-brief-update $+ heap-brief-update _*vale:heap-brief-update == - $: %heap-briefs $+ heap-briefs _*vale:heap-briefs == - $: %heap-create $+ heap-create _*vale:heap-create == - $: %heap-curios $+ heap-curios _*vale:heap-curios == - $: %heap-denied $+ heap-denied _*vale:heap-denied == - $: %heap-leave $+ heap-leave _*vale:heap-leave == - $: %heap-logs $+ heap-logs _*vale:heap-logs == - $: %heap-logs-0 $+ heap-logs-0 _*vale:heap-logs-0 == - $: %heap-logs-1 $+ heap-logs-1 _*vale:heap-logs-1 == - $: %heap-perm $+ heap-perm _*vale:heap-perm == - $: %heap-remark-action $+ heap-remark-action _*vale:heap-remark-action == - $: %heap-said $+ heap-said _*vale:heap-said == - $: %heap-update $+ heap-update _*vale:heap-update == - $: %heap-update-0 $+ heap-update-0 _*vale:heap-update-0 == - $: %heap-update-1 $+ heap-update-1 _*vale:heap-update-1 == - $: %hi-ship $+ hi-ship _*vale:hi-ship == - $: %hidden-messages $+ hidden-messages _*vale:hidden-messages == - $: %hidden-posts $+ hidden-posts _*vale:hidden-posts == - $: %holt $+ holt _*vale:holt == - $: %hook-action-0 $+ hook-action-0 _*vale:hook-action-0 == - $: %hook-channel-preview $+ hook-channel-preview _*vale:hook-channel-preview == - $: %hook-full $+ hook-full _*vale:hook-full == - $: %hook-response-0 $+ hook-response-0 _*vale:hook-response-0 == - $: %hook-setup-template $+ hook-setup-template _*vale:hook-setup-template == - $: %hook-setup-template-args $+ hook-setup-template-args _*vale:hook-setup-template-args == - $: %hook-template $+ hook-template _*vale:hook-template == - $: %hoon $+ hoon _*vale:hoon == - $: %htm $+ htm _*vale:htm == - $: %html $+ html _*vale:html == - $: %httr $+ httr _*vale:httr == - $: %hymn $+ hymn _*vale:hymn == - $: %invite-decline $+ invite-decline _*vale:invite-decline == - $: %jam $+ jam _*vale:jam == - $: %jpg $+ jpg _*vale:jpg == - $: %js $+ js _*vale:js == - $: %json $+ json _*vale:json == - $: %json-rpc-response $+ json-rpc-response _*vale:json-rpc-response == - $: %kelvin $+ kelvin _*vale:kelvin == - $: %kiln-approve-merge $+ kiln-approve-merge _*vale:kiln-approve-merge == - $: %kiln-jump $+ kiln-jump _*vale:kiln-jump == - $: %kiln-jump-ask $+ kiln-jump-ask _*vale:kiln-jump-ask == - $: %kiln-jump-opt $+ kiln-jump-opt _*vale:kiln-jump-opt == - $: %kiln-sync-update $+ kiln-sync-update _*vale:kiln-sync-update == - $: %language-server-rpc-notification $+ language-server-rpc-notification _*vale:language-server-rpc-notification == - $: %language-server-rpc-request $+ language-server-rpc-request _*vale:language-server-rpc-request == - $: %language-server-rpc-response $+ language-server-rpc-response _*vale:language-server-rpc-response == - $: %lanyard-command-1 $+ lanyard-command-1 _*vale:lanyard-command-1 == - $: %lanyard-query-1 $+ lanyard-query-1 _*vale:lanyard-query-1 == - $: %lanyard-update-1 $+ lanyard-update-1 _*vale:lanyard-update-1 == - $: %loob $+ loob _*vale:loob == - $: %migrate-map $+ migrate-map _*vale:migrate-map == - $: %mime $+ mime _*vale:mime == - $: %nest $+ nest _*vale:nest == - $: %notes-diff $+ notes-diff _*vale:notes-diff == - $: %notify-client-action $+ notify-client-action _*vale:notify-client-action == - $: %notify-provider-action $+ notify-provider-action _*vale:notify-provider-action == - $: %notify-update $+ notify-update _*vale:notify-update == - $: %notify-update-1 $+ notify-update-1 _*vale:notify-update-1 == - $: %noun $+ noun _*vale:noun == - $: %noun-autodiff $+ noun-autodiff _*vale:noun-autodiff == - $: %path $+ path _*vale:path == - $: %png $+ png _*vale:png == - $: %post-toggle $+ post-toggle _*vale:post-toggle == - $: %purl $+ purl _*vale:purl == - $: %reel-bait $+ reel-bait _*vale:reel-bait == - $: %reel-bite $+ reel-bite _*vale:reel-bite == - $: %reel-command $+ reel-command _*vale:reel-command == - $: %reel-confirmation $+ reel-confirmation _*vale:reel-confirmation == - $: %reel-describe $+ reel-describe _*vale:reel-describe == - $: %reel-description $+ reel-description _*vale:reel-description == - $: %reel-give-token-link $+ reel-give-token-link _*vale:reel-give-token-link == - $: %reel-metadata $+ reel-metadata _*vale:reel-metadata == - $: %reel-undescribe $+ reel-undescribe _*vale:reel-undescribe == - $: %reel-want-token-link $+ reel-want-token-link _*vale:reel-want-token-link == - $: %release $+ release _*vale:release == - $: %reset-group-perms $+ reset-group-perms _*vale:reset-group-perms == - $: %ship $+ ship _*vale:ship == - $: %ships $+ ships _*vale:ships == - $: %sigil $+ sigil _*vale:sigil == - $: %sole-action $+ sole-action _*vale:sole-action == - $: %sole-effect $+ sole-effect _*vale:sole-effect == - $: %stash $+ stash _*vale:stash == - $: %svg $+ svg _*vale:svg == - $: %tang $+ tang _*vale:tang == - $: %tape $+ tape _*vale:tape == - $: %thread-done $+ thread-done _*vale:thread-done == - $: %thread-fail $+ thread-fail _*vale:thread-fail == - $: %toc $+ toc _*vale:toc == - $: %toggle-post $+ toggle-post _*vale:toggle-post == - $: %txt $+ txt _*vale:txt == - $: %txt-diff $+ txt-diff _*vale:txt-diff == - $: %udon $+ udon _*vale:udon == - $: %ui-action $+ ui-action _*vale:ui-action == - $: %ui-add-contact-suggestions $+ ui-add-contact-suggestions _*vale:ui-add-contact-suggestions == - $: %ui-heads $+ ui-heads _*vale:ui-heads == - $: %ui-heads-2 $+ ui-heads-2 _*vale:ui-heads-2 == - $: %ui-heads-3 $+ ui-heads-3 _*vale:ui-heads-3 == - $: %ui-heads-4 $+ ui-heads-4 _*vale:ui-heads-4 == - $: %ui-hide-contact $+ ui-hide-contact _*vale:ui-hide-contact == - $: %ui-import-pals $+ ui-import-pals _*vale:ui-import-pals == - $: %ui-init $+ ui-init _*vale:ui-init == - $: %ui-init-1 $+ ui-init-1 _*vale:ui-init-1 == - $: %ui-init-2 $+ ui-init-2 _*vale:ui-init-2 == - $: %ui-init-3 $+ ui-init-3 _*vale:ui-init-3 == - $: %ui-init-4 $+ ui-init-4 _*vale:ui-init-4 == - $: %ui-init-5 $+ ui-init-5 _*vale:ui-init-5 == - $: %ui-init-6 $+ ui-init-6 _*vale:ui-init-6 == - $: %ui-init-7 $+ ui-init-7 _*vale:ui-init-7 == - $: %ui-pins $+ ui-pins _*vale:ui-pins == - $: %ui-show-contact $+ ui-show-contact _*vale:ui-show-contact == - $: %ui-vita $+ ui-vita _*vale:ui-vita == - $: %ui-vita-toggle $+ ui-vita-toggle _*vale:ui-vita-toggle == - $: %umd $+ umd _*vale:umd == - $: %urb $+ urb _*vale:urb == - $: %urbit $+ urbit _*vale:urbit == - $: %verb-event $+ verb-event _*vale:verb-event == - $: %verb-event-plus $+ verb-event-plus _*vale:verb-event-plus == - $: %vere $+ vere _*vale:vere == - $: %verifier-result $+ verifier-result _*vale:verifier-result == - $: %verifier-update $+ verifier-update _*vale:verifier-update == - $: %verifier-user-command $+ verifier-user-command _*vale:verifier-user-command == - $: %verifier-user-query $+ verifier-user-query _*vale:verifier-user-query == - $: %volume-set $+ volume-set _*vale:volume-set == - $: %volume-value $+ volume-value _*vale:volume-value == - $: %wasm $+ wasm _*vale:wasm == - $: %webmanifest $+ webmanifest _*vale:webmanifest == - $: %woff2 $+ woff2 _*vale:woff2 == - $: %writ $+ writ _*vale:writ == - $: %writ-diff $+ writ-diff _*vale:writ-diff == - $: %writ-response $+ writ-response _*vale:writ-response == - $: %writ-response-1 $+ writ-response-1 _*vale:writ-response-1 == - $: %writ-response-2 $+ writ-response-2 _*vale:writ-response-2 == - $: %writ-response-3 $+ writ-response-3 _*vale:writ-response-3 == - $: %writ-response-4 $+ writ-response-4 _*vale:writ-response-4 == - $: %xhtml $+ xhtml _*vale:xhtml == - $: %xml $+ xml _*vale:xml == + $: %activity-action $+ activity-action p=_*vale:activity-action == + $: %activity-allowed $+ activity-allowed p=_*vale:activity-allowed == + $: %activity-event $+ activity-event p=_*vale:activity-event == + $: %activity-feed $+ activity-feed p=_*vale:activity-feed == + $: %activity-feed-5 $+ activity-feed-5 p=_*vale:activity-feed-5 == + $: %activity-feed-init $+ activity-feed-init p=_*vale:activity-feed-init == + $: %activity-feed-init-5 $+ activity-feed-init-5 p=_*vale:activity-feed-init-5 == + $: %activity-full $+ activity-full p=_*vale:activity-full == + $: %activity-full-1 $+ activity-full-1 p=_*vale:activity-full-1 == + $: %activity-full-4 $+ activity-full-4 p=_*vale:activity-full-4 == + $: %activity-settings $+ activity-settings p=_*vale:activity-settings == + $: %activity-stream $+ activity-stream p=_*vale:activity-stream == + $: %activity-summary $+ activity-summary p=_*vale:activity-summary == + $: %activity-summary-1 $+ activity-summary-1 p=_*vale:activity-summary-1 == + $: %activity-summary-4 $+ activity-summary-4 p=_*vale:activity-summary-4 == + $: %activity-summary-pairs-4 $+ activity-summary-pairs-4 p=_*vale:activity-summary-pairs-4 == + $: %activity-update $+ activity-update p=_*vale:activity-update == + $: %activity-update-1 $+ activity-update-1 p=_*vale:activity-update-1 == + $: %activity-update-4 $+ activity-update-4 p=_*vale:activity-update-4 == + $: %aqua-effect $+ aqua-effect p=_*vale:aqua-effect == + $: %atom $+ atom p=_*vale:atom == + $: %bait-acknowledge $+ bait-acknowledge p=_*vale:bait-acknowledge == + $: %bait-describe $+ bait-describe p=_*vale:bait-describe == + $: %bait-undescribe $+ bait-undescribe p=_*vale:bait-undescribe == + $: %bait-update $+ bait-update p=_*vale:bait-update == + $: %bait-update-group $+ bait-update-group p=_*vale:bait-update-group == + $: %bark-add-recipient $+ bark-add-recipient p=_*vale:bark-add-recipient == + $: %bark-receive-summary $+ bark-receive-summary p=_*vale:bark-receive-summary == + $: %bark-remove-recipient $+ bark-remove-recipient p=_*vale:bark-remove-recipient == + $: %belt $+ belt p=_*vale:belt == + $: %bill $+ bill p=_*vale:bill == + $: %blit $+ blit p=_*vale:blit == + $: %broadcaster-action $+ broadcaster-action p=_*vale:broadcaster-action == + $: %channel-action $+ channel-action p=_*vale:channel-action == + $: %channel-action-1 $+ channel-action-1 p=_*vale:channel-action-1 == + $: %channel-action-2 $+ channel-action-2 p=_*vale:channel-action-2 == + $: %channel-changed-posts $+ channel-changed-posts p=_*vale:channel-changed-posts == + $: %channel-changed-posts-1 $+ channel-changed-posts-1 p=_*vale:channel-changed-posts-1 == + $: %channel-checkpoint $+ channel-checkpoint p=_*vale:channel-checkpoint == + $: %channel-command $+ channel-command p=_*vale:channel-command == + $: %channel-denied $+ channel-denied p=_*vale:channel-denied == + $: %channel-heads $+ channel-heads p=_*vale:channel-heads == + $: %channel-heads-2 $+ channel-heads-2 p=_*vale:channel-heads-2 == + $: %channel-heads-3 $+ channel-heads-3 p=_*vale:channel-heads-3 == + $: %channel-heads-4 $+ channel-heads-4 p=_*vale:channel-heads-4 == + $: %channel-leave $+ channel-leave p=_*vale:channel-leave == + $: %channel-logs $+ channel-logs p=_*vale:channel-logs == + $: %channel-perm $+ channel-perm p=_*vale:channel-perm == + $: %channel-post $+ channel-post p=_*vale:channel-post == + $: %channel-post-2 $+ channel-post-2 p=_*vale:channel-post-2 == + $: %channel-post-3 $+ channel-post-3 p=_*vale:channel-post-3 == + $: %channel-post-4 $+ channel-post-4 p=_*vale:channel-post-4 == + $: %channel-post-5 $+ channel-post-5 p=_*vale:channel-post-5 == + $: %channel-posts $+ channel-posts p=_*vale:channel-posts == + $: %channel-posts-2 $+ channel-posts-2 p=_*vale:channel-posts-2 == + $: %channel-posts-3 $+ channel-posts-3 p=_*vale:channel-posts-3 == + $: %channel-posts-4 $+ channel-posts-4 p=_*vale:channel-posts-4 == + $: %channel-posts-5 $+ channel-posts-5 p=_*vale:channel-posts-5 == + $: %channel-preview $+ channel-preview p=_*vale:channel-preview == + $: %channel-preview-1 $+ channel-preview-1 p=_*vale:channel-preview-1 == + $: %channel-replies $+ channel-replies p=_*vale:channel-replies == + $: %channel-replies-2 $+ channel-replies-2 p=_*vale:channel-replies-2 == + $: %channel-replies-3 $+ channel-replies-3 p=_*vale:channel-replies-3 == + $: %channel-replies-4 $+ channel-replies-4 p=_*vale:channel-replies-4 == + $: %channel-replies-5 $+ channel-replies-5 p=_*vale:channel-replies-5 == + $: %channel-reply $+ channel-reply p=_*vale:channel-reply == + $: %channel-reply-2 $+ channel-reply-2 p=_*vale:channel-reply-2 == + $: %channel-request-join $+ channel-request-join p=_*vale:channel-request-join == + $: %channel-response $+ channel-response p=_*vale:channel-response == + $: %channel-response-1 $+ channel-response-1 p=_*vale:channel-response-1 == + $: %channel-response-2 $+ channel-response-2 p=_*vale:channel-response-2 == + $: %channel-response-3 $+ channel-response-3 p=_*vale:channel-response-3 == + $: %channel-response-4 $+ channel-response-4 p=_*vale:channel-response-4 == + $: %channel-response-5 $+ channel-response-5 p=_*vale:channel-response-5 == + $: %channel-said $+ channel-said p=_*vale:channel-said == + $: %channel-said-1 $+ channel-said-1 p=_*vale:channel-said-1 == + $: %channel-said-2 $+ channel-said-2 p=_*vale:channel-said-2 == + $: %channel-said-3 $+ channel-said-3 p=_*vale:channel-said-3 == + $: %channel-scam $+ channel-scam p=_*vale:channel-scam == + $: %channel-scam-2 $+ channel-scam-2 p=_*vale:channel-scam-2 == + $: %channel-scam-3 $+ channel-scam-3 p=_*vale:channel-scam-3 == + $: %channel-scam-4 $+ channel-scam-4 p=_*vale:channel-scam-4 == + $: %channel-scan $+ channel-scan p=_*vale:channel-scan == + $: %channel-scan-2 $+ channel-scan-2 p=_*vale:channel-scan-2 == + $: %channel-scan-3 $+ channel-scan-3 p=_*vale:channel-scan-3 == + $: %channel-scan-4 $+ channel-scan-4 p=_*vale:channel-scan-4 == + $: %channel-simple-post $+ channel-simple-post p=_*vale:channel-simple-post == + $: %channel-simple-posts $+ channel-simple-posts p=_*vale:channel-simple-posts == + $: %channel-simple-replies $+ channel-simple-replies p=_*vale:channel-simple-replies == + $: %channel-simple-reply $+ channel-simple-reply p=_*vale:channel-simple-reply == + $: %channel-simple-response $+ channel-simple-response p=_*vale:channel-simple-response == + $: %channel-unread-update $+ channel-unread-update p=_*vale:channel-unread-update == + $: %channel-unreads $+ channel-unreads p=_*vale:channel-unreads == + $: %channel-update $+ channel-update p=_*vale:channel-update == + $: %channels $+ channels p=_*vale:channels == + $: %channels-2 $+ channels-2 p=_*vale:channels-2 == + $: %channels-3 $+ channels-3 p=_*vale:channels-3 == + $: %channels-4 $+ channels-4 p=_*vale:channels-4 == + $: %channels-5 $+ channels-5 p=_*vale:channels-5 == + $: %chat-block-ship $+ chat-block-ship p=_*vale:chat-block-ship == + $: %chat-blocked $+ chat-blocked p=_*vale:chat-blocked == + $: %chat-blocked-by $+ chat-blocked-by p=_*vale:chat-blocked-by == + $: %chat-changed-writs $+ chat-changed-writs p=_*vale:chat-changed-writs == + $: %chat-changed-writs-1 $+ chat-changed-writs-1 p=_*vale:chat-changed-writs-1 == + $: %chat-club-action $+ chat-club-action p=_*vale:chat-club-action == + $: %chat-club-action-0 $+ chat-club-action-0 p=_*vale:chat-club-action-0 == + $: %chat-club-action-1 $+ chat-club-action-1 p=_*vale:chat-club-action-1 == + $: %chat-club-action-2 $+ chat-club-action-2 p=_*vale:chat-club-action-2 == + $: %chat-club-create $+ chat-club-create p=_*vale:chat-club-create == + $: %chat-dm-action $+ chat-dm-action p=_*vale:chat-dm-action == + $: %chat-dm-action-1 $+ chat-dm-action-1 p=_*vale:chat-dm-action-1 == + $: %chat-dm-action-2 $+ chat-dm-action-2 p=_*vale:chat-dm-action-2 == + $: %chat-dm-archive $+ chat-dm-archive p=_*vale:chat-dm-archive == + $: %chat-dm-diff $+ chat-dm-diff p=_*vale:chat-dm-diff == + $: %chat-dm-diff-1 $+ chat-dm-diff-1 p=_*vale:chat-dm-diff-1 == + $: %chat-dm-diff-2 $+ chat-dm-diff-2 p=_*vale:chat-dm-diff-2 == + $: %chat-dm-rsvp $+ chat-dm-rsvp p=_*vale:chat-dm-rsvp == + $: %chat-heads $+ chat-heads p=_*vale:chat-heads == + $: %chat-heads-1 $+ chat-heads-1 p=_*vale:chat-heads-1 == + $: %chat-heads-2 $+ chat-heads-2 p=_*vale:chat-heads-2 == + $: %chat-heads-3 $+ chat-heads-3 p=_*vale:chat-heads-3 == + $: %chat-heads-4 $+ chat-heads-4 p=_*vale:chat-heads-4 == + $: %chat-negotiate $+ chat-negotiate p=_*vale:chat-negotiate == + $: %chat-paged-writs $+ chat-paged-writs p=_*vale:chat-paged-writs == + $: %chat-paged-writs-1 $+ chat-paged-writs-1 p=_*vale:chat-paged-writs-1 == + $: %chat-paged-writs-2 $+ chat-paged-writs-2 p=_*vale:chat-paged-writs-2 == + $: %chat-paged-writs-3 $+ chat-paged-writs-3 p=_*vale:chat-paged-writs-3 == + $: %chat-paged-writs-4 $+ chat-paged-writs-4 p=_*vale:chat-paged-writs-4 == + $: %chat-remark-action $+ chat-remark-action p=_*vale:chat-remark-action == + $: %chat-scam $+ chat-scam p=_*vale:chat-scam == + $: %chat-scam-1 $+ chat-scam-1 p=_*vale:chat-scam-1 == + $: %chat-scam-2 $+ chat-scam-2 p=_*vale:chat-scam-2 == + $: %chat-scam-3 $+ chat-scam-3 p=_*vale:chat-scam-3 == + $: %chat-scam-4 $+ chat-scam-4 p=_*vale:chat-scam-4 == + $: %chat-scan $+ chat-scan p=_*vale:chat-scan == + $: %chat-scan-1 $+ chat-scan-1 p=_*vale:chat-scan-1 == + $: %chat-scan-2 $+ chat-scan-2 p=_*vale:chat-scan-2 == + $: %chat-scan-3 $+ chat-scan-3 p=_*vale:chat-scan-3 == + $: %chat-scan-4 $+ chat-scan-4 p=_*vale:chat-scan-4 == + $: %chat-toggle-message $+ chat-toggle-message p=_*vale:chat-toggle-message == + $: %chat-unblock-ship $+ chat-unblock-ship p=_*vale:chat-unblock-ship == + $: %chat-unblocked $+ chat-unblocked p=_*vale:chat-unblocked == + $: %chat-unblocked-by $+ chat-unblocked-by p=_*vale:chat-unblocked-by == + $: %chat-unread-update $+ chat-unread-update p=_*vale:chat-unread-update == + $: %chat-unreads $+ chat-unreads p=_*vale:chat-unreads == + $: %chat-writ-1 $+ chat-writ-1 p=_*vale:chat-writ-1 == + $: %chat-writ-2 $+ chat-writ-2 p=_*vale:chat-writ-2 == + $: %chat-writ-3 $+ chat-writ-3 p=_*vale:chat-writ-3 == + $: %chat-writ-4 $+ chat-writ-4 p=_*vale:chat-writ-4 == + $: %chat-writs $+ chat-writs p=_*vale:chat-writs == + $: %club-action $+ club-action p=_*vale:club-action == + $: %clubs $+ clubs p=_*vale:clubs == + $: %contact $+ contact p=_*vale:contact == + $: %contact-0 $+ contact-0 p=_*vale:contact-0 == + $: %contact-1 $+ contact-1 p=_*vale:contact-1 == + $: %contact-action $+ contact-action p=_*vale:contact-action == + $: %contact-action-0 $+ contact-action-0 p=_*vale:contact-action-0 == + $: %contact-action-1 $+ contact-action-1 p=_*vale:contact-action-1 == + $: %contact-book $+ contact-book p=_*vale:contact-book == + $: %contact-book-0 $+ contact-book-0 p=_*vale:contact-book-0 == + $: %contact-changed-contacts $+ contact-changed-contacts p=_*vale:contact-changed-contacts == + $: %contact-changed-pages $+ contact-changed-pages p=_*vale:contact-changed-pages == + $: %contact-directory $+ contact-directory p=_*vale:contact-directory == + $: %contact-directory-0 $+ contact-directory-0 p=_*vale:contact-directory-0 == + $: %contact-news $+ contact-news p=_*vale:contact-news == + $: %contact-page $+ contact-page p=_*vale:contact-page == + $: %contact-page-0 $+ contact-page-0 p=_*vale:contact-page-0 == + $: %contact-page-1 $+ contact-page-1 p=_*vale:contact-page-1 == + $: %contact-response-0 $+ contact-response-0 p=_*vale:contact-response-0 == + $: %contact-rolodex $+ contact-rolodex p=_*vale:contact-rolodex == + $: %contact-update $+ contact-update p=_*vale:contact-update == + $: %contact-update-0 $+ contact-update-0 p=_*vale:contact-update-0 == + $: %contact-update-1 $+ contact-update-1 p=_*vale:contact-update-1 == + $: %css $+ css p=_*vale:css == + $: %dm-action $+ dm-action p=_*vale:dm-action == + $: %dm-archive $+ dm-archive p=_*vale:dm-archive == + $: %dm-diff $+ dm-diff p=_*vale:dm-diff == + $: %dm-rsvp $+ dm-rsvp p=_*vale:dm-rsvp == + $: %dm-unarchive $+ dm-unarchive p=_*vale:dm-unarchive == + $: %docket-0 $+ docket-0 p=_*vale:docket-0 == + $: %dude $+ dude p=_*vale:dude == + $: %dummy $+ dummy p=_*vale:dummy == + $: %egg-any $+ egg-any p=_*vale:egg-any == + $: %emojimart $+ emojimart p=_*vale:emojimart == + $: %epic $+ epic p=_*vale:epic == + $: %flag $+ flag p=_*vale:flag == + $: %flags $+ flags p=_*vale:flags == + $: %foreign-1 $+ foreign-1 p=_*vale:foreign-1 == + $: %foreign-2 $+ foreign-2 p=_*vale:foreign-2 == + $: %foreigns-1 $+ foreigns-1 p=_*vale:foreigns-1 == + $: %gangs $+ gangs p=_*vale:gangs == + $: %group $+ group p=_*vale:group == + $: %group-1 $+ group-1 p=_*vale:group-1 == + $: %group-2 $+ group-2 p=_*vale:group-2 == + $: %group-action $+ group-action p=_*vale:group-action == + $: %group-action-0 $+ group-action-0 p=_*vale:group-action-0 == + $: %group-action-1 $+ group-action-1 p=_*vale:group-action-1 == + $: %group-action-2 $+ group-action-2 p=_*vale:group-action-2 == + $: %group-action-3 $+ group-action-3 p=_*vale:group-action-3 == + $: %group-action-4 $+ group-action-4 p=_*vale:group-action-4 == + $: %group-cancel $+ group-cancel p=_*vale:group-cancel == + $: %group-changed-groups-1 $+ group-changed-groups-1 p=_*vale:group-changed-groups-1 == + $: %group-changed-groups-2 $+ group-changed-groups-2 p=_*vale:group-changed-groups-2 == + $: %group-command $+ group-command p=_*vale:group-command == + $: %group-create $+ group-create p=_*vale:group-create == + $: %group-create-thread $+ group-create-thread p=_*vale:group-create-thread == + $: %group-foreign-1 $+ group-foreign-1 p=_*vale:group-foreign-1 == + $: %group-foreign-2 $+ group-foreign-2 p=_*vale:group-foreign-2 == + $: %group-init $+ group-init p=_*vale:group-init == + $: %group-init-0 $+ group-init-0 p=_*vale:group-init-0 == + $: %group-init-1 $+ group-init-1 p=_*vale:group-init-1 == + $: %group-init-2 $+ group-init-2 p=_*vale:group-init-2 == + $: %group-init-3 $+ group-init-3 p=_*vale:group-init-3 == + $: %group-init-4 $+ group-init-4 p=_*vale:group-init-4 == + $: %group-invite $+ group-invite p=_*vale:group-invite == + $: %group-invite-1 $+ group-invite-1 p=_*vale:group-invite-1 == + $: %group-invites $+ group-invites p=_*vale:group-invites == + $: %group-invites-1 $+ group-invites-1 p=_*vale:group-invites-1 == + $: %group-join $+ group-join p=_*vale:group-join == + $: %group-knock $+ group-knock p=_*vale:group-knock == + $: %group-leave $+ group-leave p=_*vale:group-leave == + $: %group-log $+ group-log p=_*vale:group-log == + $: %group-preview $+ group-preview p=_*vale:group-preview == + $: %group-preview-1 $+ group-preview-1 p=_*vale:group-preview-1 == + $: %group-preview-2 $+ group-preview-2 p=_*vale:group-preview-2 == + $: %group-preview-3 $+ group-preview-3 p=_*vale:group-preview-3 == + $: %group-preview-update $+ group-preview-update p=_*vale:group-preview-update == + $: %group-previews $+ group-previews p=_*vale:group-previews == + $: %group-previews-1 $+ group-previews-1 p=_*vale:group-previews-1 == + $: %group-rescind $+ group-rescind p=_*vale:group-rescind == + $: %group-response-1 $+ group-response-1 p=_*vale:group-response-1 == + $: %group-token $+ group-token p=_*vale:group-token == + $: %group-ui $+ group-ui p=_*vale:group-ui == + $: %group-ui-1 $+ group-ui-1 p=_*vale:group-ui-1 == + $: %group-ui-2 $+ group-ui-2 p=_*vale:group-ui-2 == + $: %group-update $+ group-update p=_*vale:group-update == + $: %grouper-answer-enabled $+ grouper-answer-enabled p=_*vale:grouper-answer-enabled == + $: %grouper-ask-enabled $+ grouper-ask-enabled p=_*vale:grouper-ask-enabled == + $: %grouper-disable $+ grouper-disable p=_*vale:grouper-disable == + $: %grouper-enable $+ grouper-enable p=_*vale:grouper-enable == + $: %groups $+ groups p=_*vale:groups == + $: %groups-1 $+ groups-1 p=_*vale:groups-1 == + $: %groups-2 $+ groups-2 p=_*vale:groups-2 == + $: %groups-ui $+ groups-ui p=_*vale:groups-ui == + $: %groups-ui-1 $+ groups-ui-1 p=_*vale:groups-ui-1 == + $: %groups-ui-2 $+ groups-ui-2 p=_*vale:groups-ui-2 == + $: %growl-summarize $+ growl-summarize p=_*vale:growl-summarize == + $: %hi-ship $+ hi-ship p=_*vale:hi-ship == + $: %hidden-messages $+ hidden-messages p=_*vale:hidden-messages == + $: %hidden-posts $+ hidden-posts p=_*vale:hidden-posts == + $: %holt $+ holt p=_*vale:holt == + $: %hook-action-0 $+ hook-action-0 p=_*vale:hook-action-0 == + $: %hook-channel-preview $+ hook-channel-preview p=_*vale:hook-channel-preview == + $: %hook-full $+ hook-full p=_*vale:hook-full == + $: %hook-response-0 $+ hook-response-0 p=_*vale:hook-response-0 == + $: %hook-setup-template $+ hook-setup-template p=_*vale:hook-setup-template == + $: %hook-setup-template-args $+ hook-setup-template-args p=_*vale:hook-setup-template-args == + $: %hook-template $+ hook-template p=_*vale:hook-template == + $: %hoon $+ hoon p=_*vale:hoon == + $: %htm $+ htm p=_*vale:htm == + $: %html $+ html p=_*vale:html == + $: %httr $+ httr p=_*vale:httr == + $: %hymn $+ hymn p=_*vale:hymn == + $: %invite-decline $+ invite-decline p=_*vale:invite-decline == + $: %jam $+ jam p=_*vale:jam == + $: %jpg $+ jpg p=_*vale:jpg == + $: %js $+ js p=_*vale:js == + $: %json $+ json p=_*vale:json == + $: %json-rpc-response $+ json-rpc-response p=_*vale:json-rpc-response == + $: %kelvin $+ kelvin p=_*vale:kelvin == + $: %kiln-approve-merge $+ kiln-approve-merge p=_*vale:kiln-approve-merge == + $: %kiln-jump $+ kiln-jump p=_*vale:kiln-jump == + $: %kiln-jump-ask $+ kiln-jump-ask p=_*vale:kiln-jump-ask == + $: %kiln-jump-opt $+ kiln-jump-opt p=_*vale:kiln-jump-opt == + $: %kiln-sync-update $+ kiln-sync-update p=_*vale:kiln-sync-update == + $: %language-server-rpc-notification $+ language-server-rpc-notification p=_*vale:language-server-rpc-notification == + $: %language-server-rpc-request $+ language-server-rpc-request p=_*vale:language-server-rpc-request == + $: %language-server-rpc-response $+ language-server-rpc-response p=_*vale:language-server-rpc-response == + $: %lanyard-command-1 $+ lanyard-command-1 p=_*vale:lanyard-command-1 == + $: %lanyard-query-1 $+ lanyard-query-1 p=_*vale:lanyard-query-1 == + $: %lanyard-update-1 $+ lanyard-update-1 p=_*vale:lanyard-update-1 == + $: %loob $+ loob p=_*vale:loob == + $: %mass $+ mass p=_*vale:mass == + $: %mime $+ mime p=_*vale:mime == + $: %nest $+ nest p=_*vale:nest == + $: %notify-client-action $+ notify-client-action p=_*vale:notify-client-action == + $: %notify-provider-action $+ notify-provider-action p=_*vale:notify-provider-action == + $: %notify-update $+ notify-update p=_*vale:notify-update == + $: %notify-update-1 $+ notify-update-1 p=_*vale:notify-update-1 == + $: %noun $+ noun p=_*vale:noun == + $: %noun-autodiff $+ noun-autodiff p=_*vale:noun-autodiff == + $: %path $+ path p=_*vale:path == + $: %png $+ png p=_*vale:png == + $: %purl $+ purl p=_*vale:purl == + $: %reel-bait $+ reel-bait p=_*vale:reel-bait == + $: %reel-bite $+ reel-bite p=_*vale:reel-bite == + $: %reel-command $+ reel-command p=_*vale:reel-command == + $: %reel-confirmation $+ reel-confirmation p=_*vale:reel-confirmation == + $: %reel-describe $+ reel-describe p=_*vale:reel-describe == + $: %reel-description $+ reel-description p=_*vale:reel-description == + $: %reel-give-token-link $+ reel-give-token-link p=_*vale:reel-give-token-link == + $: %reel-metadata $+ reel-metadata p=_*vale:reel-metadata == + $: %reel-undescribe $+ reel-undescribe p=_*vale:reel-undescribe == + $: %reel-want-token-link $+ reel-want-token-link p=_*vale:reel-want-token-link == + $: %release $+ release p=_*vale:release == + $: %reset-group-perms $+ reset-group-perms p=_*vale:reset-group-perms == + $: %ship $+ ship p=_*vale:ship == + $: %ships $+ ships p=_*vale:ships == + $: %sigil $+ sigil p=_*vale:sigil == + $: %sole-action $+ sole-action p=_*vale:sole-action == + $: %sole-effect $+ sole-effect p=_*vale:sole-effect == + $: %svg $+ svg p=_*vale:svg == + $: %tang $+ tang p=_*vale:tang == + $: %tape $+ tape p=_*vale:tape == + $: %thread-done $+ thread-done p=_*vale:thread-done == + $: %thread-fail $+ thread-fail p=_*vale:thread-fail == + $: %toc $+ toc p=_*vale:toc == + $: %toggle-post $+ toggle-post p=_*vale:toggle-post == + $: %txt $+ txt p=_*vale:txt == + $: %txt-diff $+ txt-diff p=_*vale:txt-diff == + $: %udon $+ udon p=_*vale:udon == + $: %ui-action $+ ui-action p=_*vale:ui-action == + $: %ui-add-contact-suggestions $+ ui-add-contact-suggestions p=_*vale:ui-add-contact-suggestions == + $: %ui-heads $+ ui-heads p=_*vale:ui-heads == + $: %ui-heads-2 $+ ui-heads-2 p=_*vale:ui-heads-2 == + $: %ui-heads-3 $+ ui-heads-3 p=_*vale:ui-heads-3 == + $: %ui-heads-4 $+ ui-heads-4 p=_*vale:ui-heads-4 == + $: %ui-hide-contact $+ ui-hide-contact p=_*vale:ui-hide-contact == + $: %ui-import-pals $+ ui-import-pals p=_*vale:ui-import-pals == + $: %ui-init $+ ui-init p=_*vale:ui-init == + $: %ui-init-1 $+ ui-init-1 p=_*vale:ui-init-1 == + $: %ui-init-2 $+ ui-init-2 p=_*vale:ui-init-2 == + $: %ui-init-3 $+ ui-init-3 p=_*vale:ui-init-3 == + $: %ui-init-4 $+ ui-init-4 p=_*vale:ui-init-4 == + $: %ui-init-5 $+ ui-init-5 p=_*vale:ui-init-5 == + $: %ui-init-6 $+ ui-init-6 p=_*vale:ui-init-6 == + $: %ui-init-7 $+ ui-init-7 p=_*vale:ui-init-7 == + $: %ui-pins $+ ui-pins p=_*vale:ui-pins == + $: %ui-show-contact $+ ui-show-contact p=_*vale:ui-show-contact == + $: %ui-vita $+ ui-vita p=_*vale:ui-vita == + $: %ui-vita-toggle $+ ui-vita-toggle p=_*vale:ui-vita-toggle == + $: %umd $+ umd p=_*vale:umd == + $: %urb $+ urb p=_*vale:urb == + $: %urbit $+ urbit p=_*vale:urbit == + $: %verb-event $+ verb-event p=_*vale:verb-event == + $: %verb-event-plus $+ verb-event-plus p=_*vale:verb-event-plus == + $: %vere $+ vere p=_*vale:vere == + $: %verifier-result $+ verifier-result p=_*vale:verifier-result == + $: %verifier-update $+ verifier-update p=_*vale:verifier-update == + $: %verifier-user-command $+ verifier-user-command p=_*vale:verifier-user-command == + $: %verifier-user-query $+ verifier-user-query p=_*vale:verifier-user-query == + $: %volume-set $+ volume-set p=_*vale:volume-set == + $: %volume-value $+ volume-value p=_*vale:volume-value == + $: %wasm $+ wasm p=_*vale:wasm == + $: %webmanifest $+ webmanifest p=_*vale:webmanifest == + $: %woff2 $+ woff2 p=_*vale:woff2 == + $: %writ $+ writ p=_*vale:writ == + $: %writ-diff $+ writ-diff p=_*vale:writ-diff == + $: %writ-response $+ writ-response p=_*vale:writ-response == + $: %writ-response-1 $+ writ-response-1 p=_*vale:writ-response-1 == + $: %writ-response-2 $+ writ-response-2 p=_*vale:writ-response-2 == + $: %writ-response-3 $+ writ-response-3 p=_*vale:writ-response-3 == + $: %writ-response-4 $+ writ-response-4 p=_*vale:writ-response-4 == + $: %xhtml $+ xhtml p=_*vale:xhtml == + $: %xml $+ xml p=_*vale:xml == == :: ++ de-rail @@ -1270,4 +1222,744 @@ %xhtml [-.rail !>(+.rail)] %xml [-.rail !>(+.rail)] == +:: +++ en-rail + |= cage + ^- rail + ?+ p [%unsafe p q] + %activity-action [p !<(_*vale:activity-action q)] + %activity-allowed [p !<(_*vale:activity-allowed q)] + %activity-event [p !<(_*vale:activity-event q)] + %activity-feed [p !<(_*vale:activity-feed q)] + %activity-feed-5 [p !<(_*vale:activity-feed-5 q)] + %activity-feed-init [p !<(_*vale:activity-feed-init q)] + %activity-feed-init-5 [p !<(_*vale:activity-feed-init-5 q)] + %activity-full [p !<(_*vale:activity-full q)] + %activity-full-1 [p !<(_*vale:activity-full-1 q)] + %activity-full-4 [p !<(_*vale:activity-full-4 q)] + %activity-settings [p !<(_*vale:activity-settings q)] + %activity-stream [p !<(_*vale:activity-stream q)] + %activity-summary [p !<(_*vale:activity-summary q)] + %activity-summary-1 [p !<(_*vale:activity-summary-1 q)] + %activity-summary-4 [p !<(_*vale:activity-summary-4 q)] + %activity-summary-pairs-4 [p !<(_*vale:activity-summary-pairs-4 q)] + %activity-update [p !<(_*vale:activity-update q)] + %activity-update-1 [p !<(_*vale:activity-update-1 q)] + %activity-update-4 [p !<(_*vale:activity-update-4 q)] + %aqua-effect [p !<(_*vale:aqua-effect q)] + %atom [p !<(_*vale:atom q)] + %bait-acknowledge [p !<(_*vale:bait-acknowledge q)] + %bait-describe [p !<(_*vale:bait-describe q)] + %bait-undescribe [p !<(_*vale:bait-undescribe q)] + %bait-update [p !<(_*vale:bait-update q)] + %bait-update-group [p !<(_*vale:bait-update-group q)] + %bark-add-recipient [p !<(_*vale:bark-add-recipient q)] + %bark-receive-summary [p !<(_*vale:bark-receive-summary q)] + %bark-remove-recipient [p !<(_*vale:bark-remove-recipient q)] + %belt [p !<(_*vale:belt q)] + %bill [p !<(_*vale:bill q)] + %blit [p !<(_*vale:blit q)] + %broadcaster-action [p !<(_*vale:broadcaster-action q)] + %channel-action [p !<(_*vale:channel-action q)] + %channel-action-1 [p !<(_*vale:channel-action-1 q)] + %channel-action-2 [p !<(_*vale:channel-action-2 q)] + %channel-changed-posts [p !<(_*vale:channel-changed-posts q)] + %channel-changed-posts-1 [p !<(_*vale:channel-changed-posts-1 q)] + %channel-checkpoint [p !<(_*vale:channel-checkpoint q)] + %channel-command [p !<(_*vale:channel-command q)] + %channel-denied [p !<(_*vale:channel-denied q)] + %channel-heads [p !<(_*vale:channel-heads q)] + %channel-heads-2 [p !<(_*vale:channel-heads-2 q)] + %channel-heads-3 [p !<(_*vale:channel-heads-3 q)] + %channel-heads-4 [p !<(_*vale:channel-heads-4 q)] + %channel-leave [p !<(_*vale:channel-leave q)] + %channel-logs [p !<(_*vale:channel-logs q)] + %channel-perm [p !<(_*vale:channel-perm q)] + %channel-post [p !<(_*vale:channel-post q)] + %channel-post-2 [p !<(_*vale:channel-post-2 q)] + %channel-post-3 [p !<(_*vale:channel-post-3 q)] + %channel-post-4 [p !<(_*vale:channel-post-4 q)] + %channel-post-5 [p !<(_*vale:channel-post-5 q)] + %channel-posts [p !<(_*vale:channel-posts q)] + %channel-posts-2 [p !<(_*vale:channel-posts-2 q)] + %channel-posts-3 [p !<(_*vale:channel-posts-3 q)] + %channel-posts-4 [p !<(_*vale:channel-posts-4 q)] + %channel-posts-5 [p !<(_*vale:channel-posts-5 q)] + %channel-preview [p !<(_*vale:channel-preview q)] + %channel-preview-1 [p !<(_*vale:channel-preview-1 q)] + %channel-replies [p !<(_*vale:channel-replies q)] + %channel-replies-2 [p !<(_*vale:channel-replies-2 q)] + %channel-replies-3 [p !<(_*vale:channel-replies-3 q)] + %channel-replies-4 [p !<(_*vale:channel-replies-4 q)] + %channel-replies-5 [p !<(_*vale:channel-replies-5 q)] + %channel-reply [p !<(_*vale:channel-reply q)] + %channel-reply-2 [p !<(_*vale:channel-reply-2 q)] + %channel-request-join [p !<(_*vale:channel-request-join q)] + %channel-response [p !<(_*vale:channel-response q)] + %channel-response-1 [p !<(_*vale:channel-response-1 q)] + %channel-response-2 [p !<(_*vale:channel-response-2 q)] + %channel-response-3 [p !<(_*vale:channel-response-3 q)] + %channel-response-4 [p !<(_*vale:channel-response-4 q)] + %channel-response-5 [p !<(_*vale:channel-response-5 q)] + %channel-said [p !<(_*vale:channel-said q)] + %channel-said-1 [p !<(_*vale:channel-said-1 q)] + %channel-said-2 [p !<(_*vale:channel-said-2 q)] + %channel-said-3 [p !<(_*vale:channel-said-3 q)] + %channel-scam [p !<(_*vale:channel-scam q)] + %channel-scam-2 [p !<(_*vale:channel-scam-2 q)] + %channel-scam-3 [p !<(_*vale:channel-scam-3 q)] + %channel-scam-4 [p !<(_*vale:channel-scam-4 q)] + %channel-scan [p !<(_*vale:channel-scan q)] + %channel-scan-2 [p !<(_*vale:channel-scan-2 q)] + %channel-scan-3 [p !<(_*vale:channel-scan-3 q)] + %channel-scan-4 [p !<(_*vale:channel-scan-4 q)] + %channel-simple-post [p !<(_*vale:channel-simple-post q)] + %channel-simple-posts [p !<(_*vale:channel-simple-posts q)] + %channel-simple-replies [p !<(_*vale:channel-simple-replies q)] + %channel-simple-reply [p !<(_*vale:channel-simple-reply q)] + %channel-simple-response [p !<(_*vale:channel-simple-response q)] + %channel-unread-update [p !<(_*vale:channel-unread-update q)] + %channel-unreads [p !<(_*vale:channel-unreads q)] + %channel-update [p !<(_*vale:channel-update q)] + %channels [p !<(_*vale:channels q)] + %channels-2 [p !<(_*vale:channels-2 q)] + %channels-3 [p !<(_*vale:channels-3 q)] + %channels-4 [p !<(_*vale:channels-4 q)] + %channels-5 [p !<(_*vale:channels-5 q)] + %chat-block-ship [p !<(_*vale:chat-block-ship q)] + %chat-blocked [p !<(_*vale:chat-blocked q)] + %chat-blocked-by [p !<(_*vale:chat-blocked-by q)] + %chat-changed-writs [p !<(_*vale:chat-changed-writs q)] + %chat-changed-writs-1 [p !<(_*vale:chat-changed-writs-1 q)] + %chat-club-action [p !<(_*vale:chat-club-action q)] + %chat-club-action-0 [p !<(_*vale:chat-club-action-0 q)] + %chat-club-action-1 [p !<(_*vale:chat-club-action-1 q)] + %chat-club-action-2 [p !<(_*vale:chat-club-action-2 q)] + %chat-club-create [p !<(_*vale:chat-club-create q)] + %chat-dm-action [p !<(_*vale:chat-dm-action q)] + %chat-dm-action-1 [p !<(_*vale:chat-dm-action-1 q)] + %chat-dm-action-2 [p !<(_*vale:chat-dm-action-2 q)] + %chat-dm-archive [p !<(_*vale:chat-dm-archive q)] + %chat-dm-diff [p !<(_*vale:chat-dm-diff q)] + %chat-dm-diff-1 [p !<(_*vale:chat-dm-diff-1 q)] + %chat-dm-diff-2 [p !<(_*vale:chat-dm-diff-2 q)] + %chat-dm-rsvp [p !<(_*vale:chat-dm-rsvp q)] + %chat-heads [p !<(_*vale:chat-heads q)] + %chat-heads-1 [p !<(_*vale:chat-heads-1 q)] + %chat-heads-2 [p !<(_*vale:chat-heads-2 q)] + %chat-heads-3 [p !<(_*vale:chat-heads-3 q)] + %chat-heads-4 [p !<(_*vale:chat-heads-4 q)] + %chat-negotiate [p !<(_*vale:chat-negotiate q)] + %chat-paged-writs [p !<(_*vale:chat-paged-writs q)] + %chat-paged-writs-1 [p !<(_*vale:chat-paged-writs-1 q)] + %chat-paged-writs-2 [p !<(_*vale:chat-paged-writs-2 q)] + %chat-paged-writs-3 [p !<(_*vale:chat-paged-writs-3 q)] + %chat-paged-writs-4 [p !<(_*vale:chat-paged-writs-4 q)] + %chat-remark-action [p !<(_*vale:chat-remark-action q)] + %chat-scam [p !<(_*vale:chat-scam q)] + %chat-scam-1 [p !<(_*vale:chat-scam-1 q)] + %chat-scam-2 [p !<(_*vale:chat-scam-2 q)] + %chat-scam-3 [p !<(_*vale:chat-scam-3 q)] + %chat-scam-4 [p !<(_*vale:chat-scam-4 q)] + %chat-scan [p !<(_*vale:chat-scan q)] + %chat-scan-1 [p !<(_*vale:chat-scan-1 q)] + %chat-scan-2 [p !<(_*vale:chat-scan-2 q)] + %chat-scan-3 [p !<(_*vale:chat-scan-3 q)] + %chat-scan-4 [p !<(_*vale:chat-scan-4 q)] + %chat-toggle-message [p !<(_*vale:chat-toggle-message q)] + %chat-unblock-ship [p !<(_*vale:chat-unblock-ship q)] + %chat-unblocked [p !<(_*vale:chat-unblocked q)] + %chat-unblocked-by [p !<(_*vale:chat-unblocked-by q)] + %chat-unread-update [p !<(_*vale:chat-unread-update q)] + %chat-unreads [p !<(_*vale:chat-unreads q)] + %chat-writ-1 [p !<(_*vale:chat-writ-1 q)] + %chat-writ-2 [p !<(_*vale:chat-writ-2 q)] + %chat-writ-3 [p !<(_*vale:chat-writ-3 q)] + %chat-writ-4 [p !<(_*vale:chat-writ-4 q)] + %chat-writs [p !<(_*vale:chat-writs q)] + %club-action [p !<(_*vale:club-action q)] + %clubs [p !<(_*vale:clubs q)] + %contact [p !<(_*vale:contact q)] + %contact-0 [p !<(_*vale:contact-0 q)] + %contact-1 [p !<(_*vale:contact-1 q)] + %contact-action [p !<(_*vale:contact-action q)] + %contact-action-0 [p !<(_*vale:contact-action-0 q)] + %contact-action-1 [p !<(_*vale:contact-action-1 q)] + %contact-book [p !<(_*vale:contact-book q)] + %contact-book-0 [p !<(_*vale:contact-book-0 q)] + %contact-changed-contacts [p !<(_*vale:contact-changed-contacts q)] + %contact-changed-pages [p !<(_*vale:contact-changed-pages q)] + %contact-directory [p !<(_*vale:contact-directory q)] + %contact-directory-0 [p !<(_*vale:contact-directory-0 q)] + %contact-news [p !<(_*vale:contact-news q)] + %contact-page [p !<(_*vale:contact-page q)] + %contact-page-0 [p !<(_*vale:contact-page-0 q)] + %contact-page-1 [p !<(_*vale:contact-page-1 q)] + %contact-response-0 [p !<(_*vale:contact-response-0 q)] + %contact-rolodex [p !<(_*vale:contact-rolodex q)] + %contact-update [p !<(_*vale:contact-update q)] + %contact-update-0 [p !<(_*vale:contact-update-0 q)] + %contact-update-1 [p !<(_*vale:contact-update-1 q)] + %css [p !<(_*vale:css q)] + %dm-action [p !<(_*vale:dm-action q)] + %dm-archive [p !<(_*vale:dm-archive q)] + %dm-diff [p !<(_*vale:dm-diff q)] + %dm-rsvp [p !<(_*vale:dm-rsvp q)] + %dm-unarchive [p !<(_*vale:dm-unarchive q)] + %docket-0 [p !<(_*vale:docket-0 q)] + %dude [p !<(_*vale:dude q)] + %dummy [p !<(_*vale:dummy q)] + %egg-any [p !<(_*vale:egg-any q)] + %emojimart [p !<(_*vale:emojimart q)] + %epic [p !<(_*vale:epic q)] + %flag [p !<(_*vale:flag q)] + %flags [p !<(_*vale:flags q)] + %foreign-1 [p !<(_*vale:foreign-1 q)] + %foreign-2 [p !<(_*vale:foreign-2 q)] + %foreigns-1 [p !<(_*vale:foreigns-1 q)] + %gangs [p !<(_*vale:gangs q)] + %group [p !<(_*vale:group q)] + %group-1 [p !<(_*vale:group-1 q)] + %group-2 [p !<(_*vale:group-2 q)] + %group-action [p !<(_*vale:group-action q)] + %group-action-0 [p !<(_*vale:group-action-0 q)] + %group-action-1 [p !<(_*vale:group-action-1 q)] + %group-action-2 [p !<(_*vale:group-action-2 q)] + %group-action-3 [p !<(_*vale:group-action-3 q)] + %group-action-4 [p !<(_*vale:group-action-4 q)] + %group-cancel [p !<(_*vale:group-cancel q)] + %group-changed-groups-1 [p !<(_*vale:group-changed-groups-1 q)] + %group-changed-groups-2 [p !<(_*vale:group-changed-groups-2 q)] + %group-command [p !<(_*vale:group-command q)] + %group-create [p !<(_*vale:group-create q)] + %group-create-thread [p !<(_*vale:group-create-thread q)] + %group-foreign-1 [p !<(_*vale:group-foreign-1 q)] + %group-foreign-2 [p !<(_*vale:group-foreign-2 q)] + %group-init [p !<(_*vale:group-init q)] + %group-init-0 [p !<(_*vale:group-init-0 q)] + %group-init-1 [p !<(_*vale:group-init-1 q)] + %group-init-2 [p !<(_*vale:group-init-2 q)] + %group-init-3 [p !<(_*vale:group-init-3 q)] + %group-init-4 [p !<(_*vale:group-init-4 q)] + %group-invite [p !<(_*vale:group-invite q)] + %group-invite-1 [p !<(_*vale:group-invite-1 q)] + %group-invites [p !<(_*vale:group-invites q)] + %group-invites-1 [p !<(_*vale:group-invites-1 q)] + %group-join [p !<(_*vale:group-join q)] + %group-knock [p !<(_*vale:group-knock q)] + %group-leave [p !<(_*vale:group-leave q)] + %group-log [p !<(_*vale:group-log q)] + %group-preview [p !<(_*vale:group-preview q)] + %group-preview-1 [p !<(_*vale:group-preview-1 q)] + %group-preview-2 [p !<(_*vale:group-preview-2 q)] + %group-preview-3 [p !<(_*vale:group-preview-3 q)] + %group-preview-update [p !<(_*vale:group-preview-update q)] + %group-previews [p !<(_*vale:group-previews q)] + %group-previews-1 [p !<(_*vale:group-previews-1 q)] + %group-rescind [p !<(_*vale:group-rescind q)] + %group-response-1 [p !<(_*vale:group-response-1 q)] + %group-token [p !<(_*vale:group-token q)] + %group-ui [p !<(_*vale:group-ui q)] + %group-ui-1 [p !<(_*vale:group-ui-1 q)] + %group-ui-2 [p !<(_*vale:group-ui-2 q)] + %group-update [p !<(_*vale:group-update q)] + %grouper-answer-enabled [p !<(_*vale:grouper-answer-enabled q)] + %grouper-ask-enabled [p !<(_*vale:grouper-ask-enabled q)] + %grouper-disable [p !<(_*vale:grouper-disable q)] + %grouper-enable [p !<(_*vale:grouper-enable q)] + %groups [p !<(_*vale:groups q)] + %groups-1 [p !<(_*vale:groups-1 q)] + %groups-2 [p !<(_*vale:groups-2 q)] + %groups-ui [p !<(_*vale:groups-ui q)] + %groups-ui-1 [p !<(_*vale:groups-ui-1 q)] + %groups-ui-2 [p !<(_*vale:groups-ui-2 q)] + %growl-summarize [p !<(_*vale:growl-summarize q)] + %hi-ship [p !<(_*vale:hi-ship q)] + %hidden-messages [p !<(_*vale:hidden-messages q)] + %hidden-posts [p !<(_*vale:hidden-posts q)] + %holt [p !<(_*vale:holt q)] + %hook-action-0 [p !<(_*vale:hook-action-0 q)] + %hook-channel-preview [p !<(_*vale:hook-channel-preview q)] + %hook-full [p !<(_*vale:hook-full q)] + %hook-response-0 [p !<(_*vale:hook-response-0 q)] + %hook-setup-template [p !<(_*vale:hook-setup-template q)] + %hook-setup-template-args [p !<(_*vale:hook-setup-template-args q)] + %hook-template [p !<(_*vale:hook-template q)] + %hoon [p !<(_*vale:hoon q)] + %htm [p !<(_*vale:htm q)] + %html [p !<(_*vale:html q)] + %httr [p !<(_*vale:httr q)] + %hymn [p !<(_*vale:hymn q)] + %invite-decline [p !<(_*vale:invite-decline q)] + %jam [p !<(_*vale:jam q)] + %jpg [p !<(_*vale:jpg q)] + %js [p !<(_*vale:js q)] + %json [p !<(_*vale:json q)] + %json-rpc-response [p !<(_*vale:json-rpc-response q)] + %kelvin [p !<(_*vale:kelvin q)] + %kiln-approve-merge [p !<(_*vale:kiln-approve-merge q)] + %kiln-jump [p !<(_*vale:kiln-jump q)] + %kiln-jump-ask [p !<(_*vale:kiln-jump-ask q)] + %kiln-jump-opt [p !<(_*vale:kiln-jump-opt q)] + %kiln-sync-update [p !<(_*vale:kiln-sync-update q)] + %language-server-rpc-notification [p !<(_*vale:language-server-rpc-notification q)] + %language-server-rpc-request [p !<(_*vale:language-server-rpc-request q)] + %language-server-rpc-response [p !<(_*vale:language-server-rpc-response q)] + %lanyard-command-1 [p !<(_*vale:lanyard-command-1 q)] + %lanyard-query-1 [p !<(_*vale:lanyard-query-1 q)] + %lanyard-update-1 [p !<(_*vale:lanyard-update-1 q)] + %loob [p !<(_*vale:loob q)] + %mass [p !<(_*vale:mass q)] + %mime [p !<(_*vale:mime q)] + %nest [p !<(_*vale:nest q)] + %notify-client-action [p !<(_*vale:notify-client-action q)] + %notify-provider-action [p !<(_*vale:notify-provider-action q)] + %notify-update [p !<(_*vale:notify-update q)] + %notify-update-1 [p !<(_*vale:notify-update-1 q)] + %noun [p !<(_*vale:noun q)] + %noun-autodiff [p !<(_*vale:noun-autodiff q)] + %path [p !<(_*vale:path q)] + %png [p !<(_*vale:png q)] + %purl [p !<(_*vale:purl q)] + %reel-bait [p !<(_*vale:reel-bait q)] + %reel-bite [p !<(_*vale:reel-bite q)] + %reel-command [p !<(_*vale:reel-command q)] + %reel-confirmation [p !<(_*vale:reel-confirmation q)] + %reel-describe [p !<(_*vale:reel-describe q)] + %reel-description [p !<(_*vale:reel-description q)] + %reel-give-token-link [p !<(_*vale:reel-give-token-link q)] + %reel-metadata [p !<(_*vale:reel-metadata q)] + %reel-undescribe [p !<(_*vale:reel-undescribe q)] + %reel-want-token-link [p !<(_*vale:reel-want-token-link q)] + %release [p !<(_*vale:release q)] + %reset-group-perms [p !<(_*vale:reset-group-perms q)] + %ship [p !<(_*vale:ship q)] + %ships [p !<(_*vale:ships q)] + %sigil [p !<(_*vale:sigil q)] + %sole-action [p !<(_*vale:sole-action q)] + %sole-effect [p !<(_*vale:sole-effect q)] + %svg [p !<(_*vale:svg q)] + %tang [p !<(_*vale:tang q)] + %tape [p !<(_*vale:tape q)] + %thread-done [p !<(_*vale:thread-done q)] + %thread-fail [p !<(_*vale:thread-fail q)] + %toc [p !<(_*vale:toc q)] + %toggle-post [p !<(_*vale:toggle-post q)] + %txt [p !<(_*vale:txt q)] + %txt-diff [p !<(_*vale:txt-diff q)] + %udon [p !<(_*vale:udon q)] + %ui-action [p !<(_*vale:ui-action q)] + %ui-add-contact-suggestions [p !<(_*vale:ui-add-contact-suggestions q)] + %ui-heads [p !<(_*vale:ui-heads q)] + %ui-heads-2 [p !<(_*vale:ui-heads-2 q)] + %ui-heads-3 [p !<(_*vale:ui-heads-3 q)] + %ui-heads-4 [p !<(_*vale:ui-heads-4 q)] + %ui-hide-contact [p !<(_*vale:ui-hide-contact q)] + %ui-import-pals [p !<(_*vale:ui-import-pals q)] + %ui-init [p !<(_*vale:ui-init q)] + %ui-init-1 [p !<(_*vale:ui-init-1 q)] + %ui-init-2 [p !<(_*vale:ui-init-2 q)] + %ui-init-3 [p !<(_*vale:ui-init-3 q)] + %ui-init-4 [p !<(_*vale:ui-init-4 q)] + %ui-init-5 [p !<(_*vale:ui-init-5 q)] + %ui-init-6 [p !<(_*vale:ui-init-6 q)] + %ui-init-7 [p !<(_*vale:ui-init-7 q)] + %ui-pins [p !<(_*vale:ui-pins q)] + %ui-show-contact [p !<(_*vale:ui-show-contact q)] + %ui-vita [p !<(_*vale:ui-vita q)] + %ui-vita-toggle [p !<(_*vale:ui-vita-toggle q)] + %umd [p !<(_*vale:umd q)] + %urb [p !<(_*vale:urb q)] + %urbit [p !<(_*vale:urbit q)] + %verb-event [p !<(_*vale:verb-event q)] + %verb-event-plus [p !<(_*vale:verb-event-plus q)] + %vere [p !<(_*vale:vere q)] + %verifier-result [p !<(_*vale:verifier-result q)] + %verifier-update [p !<(_*vale:verifier-update q)] + %verifier-user-command [p !<(_*vale:verifier-user-command q)] + %verifier-user-query [p !<(_*vale:verifier-user-query q)] + %volume-set [p !<(_*vale:volume-set q)] + %volume-value [p !<(_*vale:volume-value q)] + %wasm [p !<(_*vale:wasm q)] + %webmanifest [p !<(_*vale:webmanifest q)] + %woff2 [p !<(_*vale:woff2 q)] + %writ [p !<(_*vale:writ q)] + %writ-diff [p !<(_*vale:writ-diff q)] + %writ-response [p !<(_*vale:writ-response q)] + %writ-response-1 [p !<(_*vale:writ-response-1 q)] + %writ-response-2 [p !<(_*vale:writ-response-2 q)] + %writ-response-3 [p !<(_*vale:writ-response-3 q)] + %writ-response-4 [p !<(_*vale:writ-response-4 q)] + %xhtml [p !<(_*vale:xhtml q)] + %xml [p !<(_*vale:xml q)] + == +:: +++ discipline + ^- (list [=mark strict=? =type]) + :~ :+ %activity-action & -:!>(*vale:activity-action) + :+ %activity-allowed & -:!>(*vale:activity-allowed) + :+ %activity-event & -:!>(*vale:activity-event) + :+ %activity-feed & -:!>(*vale:activity-feed) + :+ %activity-feed-5 & -:!>(*vale:activity-feed-5) + :+ %activity-feed-init & -:!>(*vale:activity-feed-init) + :+ %activity-feed-init-5 & -:!>(*vale:activity-feed-init-5) + :+ %activity-full & -:!>(*vale:activity-full) + :+ %activity-full-1 & -:!>(*vale:activity-full-1) + :+ %activity-full-4 & -:!>(*vale:activity-full-4) + :+ %activity-settings & -:!>(*vale:activity-settings) + :+ %activity-stream & -:!>(*vale:activity-stream) + :+ %activity-summary & -:!>(*vale:activity-summary) + :+ %activity-summary-1 & -:!>(*vale:activity-summary-1) + :+ %activity-summary-4 & -:!>(*vale:activity-summary-4) + :+ %activity-summary-pairs-4 & -:!>(*vale:activity-summary-pairs-4) + :+ %activity-update & -:!>(*vale:activity-update) + :+ %activity-update-1 & -:!>(*vale:activity-update-1) + :+ %activity-update-4 & -:!>(*vale:activity-update-4) + :+ %aqua-effect & -:!>(*vale:aqua-effect) + :+ %atom & -:!>(*vale:atom) + :+ %bait-acknowledge & -:!>(*vale:bait-acknowledge) + :+ %bait-describe & -:!>(*vale:bait-describe) + :+ %bait-undescribe & -:!>(*vale:bait-undescribe) + :+ %bait-update & -:!>(*vale:bait-update) + :+ %bait-update-group & -:!>(*vale:bait-update-group) + :+ %bark-add-recipient & -:!>(*vale:bark-add-recipient) + :+ %bark-receive-summary & -:!>(*vale:bark-receive-summary) + :+ %bark-remove-recipient & -:!>(*vale:bark-remove-recipient) + :+ %belt & -:!>(*vale:belt) + :+ %bill & -:!>(*vale:bill) + :+ %blit & -:!>(*vale:blit) + :+ %broadcaster-action & -:!>(*vale:broadcaster-action) + :+ %channel-action & -:!>(*vale:channel-action) + :+ %channel-action-1 & -:!>(*vale:channel-action-1) + :+ %channel-action-2 & -:!>(*vale:channel-action-2) + :+ %channel-changed-posts & -:!>(*vale:channel-changed-posts) + :+ %channel-changed-posts-1 & -:!>(*vale:channel-changed-posts-1) + :+ %channel-checkpoint & -:!>(*vale:channel-checkpoint) + :+ %channel-command & -:!>(*vale:channel-command) + :+ %channel-denied & -:!>(*vale:channel-denied) + :+ %channel-heads & -:!>(*vale:channel-heads) + :+ %channel-heads-2 & -:!>(*vale:channel-heads-2) + :+ %channel-heads-3 & -:!>(*vale:channel-heads-3) + :+ %channel-heads-4 & -:!>(*vale:channel-heads-4) + :+ %channel-leave & -:!>(*vale:channel-leave) + :+ %channel-logs & -:!>(*vale:channel-logs) + :+ %channel-perm & -:!>(*vale:channel-perm) + :+ %channel-post & -:!>(*vale:channel-post) + :+ %channel-post-2 & -:!>(*vale:channel-post-2) + :+ %channel-post-3 & -:!>(*vale:channel-post-3) + :+ %channel-post-4 & -:!>(*vale:channel-post-4) + :+ %channel-post-5 & -:!>(*vale:channel-post-5) + :+ %channel-posts & -:!>(*vale:channel-posts) + :+ %channel-posts-2 & -:!>(*vale:channel-posts-2) + :+ %channel-posts-3 & -:!>(*vale:channel-posts-3) + :+ %channel-posts-4 & -:!>(*vale:channel-posts-4) + :+ %channel-posts-5 & -:!>(*vale:channel-posts-5) + :+ %channel-preview & -:!>(*vale:channel-preview) + :+ %channel-preview-1 & -:!>(*vale:channel-preview-1) + :+ %channel-replies & -:!>(*vale:channel-replies) + :+ %channel-replies-2 & -:!>(*vale:channel-replies-2) + :+ %channel-replies-3 & -:!>(*vale:channel-replies-3) + :+ %channel-replies-4 & -:!>(*vale:channel-replies-4) + :+ %channel-replies-5 & -:!>(*vale:channel-replies-5) + :+ %channel-reply & -:!>(*vale:channel-reply) + :+ %channel-reply-2 & -:!>(*vale:channel-reply-2) + :+ %channel-request-join & -:!>(*vale:channel-request-join) + :+ %channel-response & -:!>(*vale:channel-response) + :+ %channel-response-1 & -:!>(*vale:channel-response-1) + :+ %channel-response-2 & -:!>(*vale:channel-response-2) + :+ %channel-response-3 & -:!>(*vale:channel-response-3) + :+ %channel-response-4 & -:!>(*vale:channel-response-4) + :+ %channel-response-5 & -:!>(*vale:channel-response-5) + :+ %channel-said & -:!>(*vale:channel-said) + :+ %channel-said-1 & -:!>(*vale:channel-said-1) + :+ %channel-said-2 & -:!>(*vale:channel-said-2) + :+ %channel-said-3 & -:!>(*vale:channel-said-3) + :+ %channel-scam & -:!>(*vale:channel-scam) + :+ %channel-scam-2 & -:!>(*vale:channel-scam-2) + :+ %channel-scam-3 & -:!>(*vale:channel-scam-3) + :+ %channel-scam-4 & -:!>(*vale:channel-scam-4) + :+ %channel-scan & -:!>(*vale:channel-scan) + :+ %channel-scan-2 & -:!>(*vale:channel-scan-2) + :+ %channel-scan-3 & -:!>(*vale:channel-scan-3) + :+ %channel-scan-4 & -:!>(*vale:channel-scan-4) + :+ %channel-simple-post & -:!>(*vale:channel-simple-post) + :+ %channel-simple-posts & -:!>(*vale:channel-simple-posts) + :+ %channel-simple-replies & -:!>(*vale:channel-simple-replies) + :+ %channel-simple-reply & -:!>(*vale:channel-simple-reply) + :+ %channel-simple-response & -:!>(*vale:channel-simple-response) + :+ %channel-unread-update & -:!>(*vale:channel-unread-update) + :+ %channel-unreads & -:!>(*vale:channel-unreads) + :+ %channel-update & -:!>(*vale:channel-update) + :+ %channels & -:!>(*vale:channels) + :+ %channels-2 & -:!>(*vale:channels-2) + :+ %channels-3 & -:!>(*vale:channels-3) + :+ %channels-4 & -:!>(*vale:channels-4) + :+ %channels-5 & -:!>(*vale:channels-5) + :+ %chat-block-ship & -:!>(*vale:chat-block-ship) + :+ %chat-blocked & -:!>(*vale:chat-blocked) + :+ %chat-blocked-by & -:!>(*vale:chat-blocked-by) + :+ %chat-changed-writs & -:!>(*vale:chat-changed-writs) + :+ %chat-changed-writs-1 | -:!>(*vale:chat-changed-writs-1) + :+ %chat-club-action | -:!>(*vale:chat-club-action) + :+ %chat-club-action-0 & -:!>(*vale:chat-club-action-0) + :+ %chat-club-action-1 & -:!>(*vale:chat-club-action-1) + :+ %chat-club-action-2 | -:!>(*vale:chat-club-action-2) + :+ %chat-club-create & -:!>(*vale:chat-club-create) + :+ %chat-dm-action & -:!>(*vale:chat-dm-action) + :+ %chat-dm-action-1 & -:!>(*vale:chat-dm-action-1) + :+ %chat-dm-action-2 | -:!>(*vale:chat-dm-action-2) + :+ %chat-dm-archive & -:!>(*vale:chat-dm-archive) + :+ %chat-dm-diff & -:!>(*vale:chat-dm-diff) + :+ %chat-dm-diff-1 & -:!>(*vale:chat-dm-diff-1) + :+ %chat-dm-diff-2 | -:!>(*vale:chat-dm-diff-2) + :+ %chat-dm-rsvp & -:!>(*vale:chat-dm-rsvp) + :+ %chat-heads & -:!>(*vale:chat-heads) + :+ %chat-heads-1 & -:!>(*vale:chat-heads-1) + :+ %chat-heads-2 & -:!>(*vale:chat-heads-2) + :+ %chat-heads-3 & -:!>(*vale:chat-heads-3) + :+ %chat-heads-4 | -:!>(*vale:chat-heads-4) + :+ %chat-negotiate & -:!>(*vale:chat-negotiate) + :+ %chat-paged-writs & -:!>(*vale:chat-paged-writs) + :+ %chat-paged-writs-1 & -:!>(*vale:chat-paged-writs-1) + :+ %chat-paged-writs-2 & -:!>(*vale:chat-paged-writs-2) + :+ %chat-paged-writs-3 & -:!>(*vale:chat-paged-writs-3) + :+ %chat-paged-writs-4 | -:!>(*vale:chat-paged-writs-4) + :+ %chat-remark-action & -:!>(*vale:chat-remark-action) + :+ %chat-scam & -:!>(*vale:chat-scam) + :+ %chat-scam-1 & -:!>(*vale:chat-scam-1) + :+ %chat-scam-2 & -:!>(*vale:chat-scam-2) + :+ %chat-scam-3 & -:!>(*vale:chat-scam-3) + :+ %chat-scam-4 | -:!>(*vale:chat-scam-4) + :+ %chat-scan & -:!>(*vale:chat-scan) + :+ %chat-scan-1 & -:!>(*vale:chat-scan-1) + :+ %chat-scan-2 & -:!>(*vale:chat-scan-2) + :+ %chat-scan-3 & -:!>(*vale:chat-scan-3) + :+ %chat-scan-4 | -:!>(*vale:chat-scan-4) + :+ %chat-toggle-message & -:!>(*vale:chat-toggle-message) + :+ %chat-unblock-ship & -:!>(*vale:chat-unblock-ship) + :+ %chat-unblocked & -:!>(*vale:chat-unblocked) + :+ %chat-unblocked-by & -:!>(*vale:chat-unblocked-by) + :+ %chat-unread-update & -:!>(*vale:chat-unread-update) + :+ %chat-unreads & -:!>(*vale:chat-unreads) + :+ %chat-writ-1 & -:!>(*vale:chat-writ-1) + :+ %chat-writ-2 & -:!>(*vale:chat-writ-2) + :+ %chat-writ-3 & -:!>(*vale:chat-writ-3) + :+ %chat-writ-4 | -:!>(*vale:chat-writ-4) + :+ %chat-writs & -:!>(*vale:chat-writs) + :+ %club-action & -:!>(*vale:club-action) + :+ %clubs & -:!>(*vale:clubs) + :+ %contact & -:!>(*vale:contact) + :+ %contact-0 & -:!>(*vale:contact-0) + :+ %contact-1 & -:!>(*vale:contact-1) + :+ %contact-action & -:!>(*vale:contact-action) + :+ %contact-action-0 & -:!>(*vale:contact-action-0) + :+ %contact-action-1 & -:!>(*vale:contact-action-1) + :+ %contact-book & -:!>(*vale:contact-book) + :+ %contact-book-0 & -:!>(*vale:contact-book-0) + :+ %contact-changed-contacts & -:!>(*vale:contact-changed-contacts) + :+ %contact-changed-pages & -:!>(*vale:contact-changed-pages) + :+ %contact-directory & -:!>(*vale:contact-directory) + :+ %contact-directory-0 & -:!>(*vale:contact-directory-0) + :+ %contact-news & -:!>(*vale:contact-news) + :+ %contact-page & -:!>(*vale:contact-page) + :+ %contact-page-0 & -:!>(*vale:contact-page-0) + :+ %contact-page-1 & -:!>(*vale:contact-page-1) + :+ %contact-response-0 & -:!>(*vale:contact-response-0) + :+ %contact-rolodex & -:!>(*vale:contact-rolodex) + :+ %contact-update & -:!>(*vale:contact-update) + :+ %contact-update-0 & -:!>(*vale:contact-update-0) + :+ %contact-update-1 & -:!>(*vale:contact-update-1) + :+ %css & -:!>(*vale:css) + :+ %dm-action & -:!>(*vale:dm-action) + :+ %dm-archive & -:!>(*vale:dm-archive) + :+ %dm-diff & -:!>(*vale:dm-diff) + :+ %dm-rsvp & -:!>(*vale:dm-rsvp) + :+ %dm-unarchive & -:!>(*vale:dm-unarchive) + :+ %docket-0 & -:!>(*vale:docket-0) + :+ %dude & -:!>(*vale:dude) + :+ %dummy & -:!>(*vale:dummy) + :+ %egg-any & -:!>(*vale:egg-any) + :+ %emojimart & -:!>(*vale:emojimart) + :+ %epic & -:!>(*vale:epic) + :+ %flag & -:!>(*vale:flag) + :+ %flags & -:!>(*vale:flags) + :+ %foreign-1 & -:!>(*vale:foreign-1) + :+ %foreign-2 & -:!>(*vale:foreign-2) + :+ %foreigns-1 & -:!>(*vale:foreigns-1) + :+ %gangs & -:!>(*vale:gangs) + :+ %group & -:!>(*vale:group) + :+ %group-1 & -:!>(*vale:group-1) + :+ %group-2 & -:!>(*vale:group-2) + :+ %group-action & -:!>(*vale:group-action) + :+ %group-action-0 & -:!>(*vale:group-action-0) + :+ %group-action-1 & -:!>(*vale:group-action-1) + :+ %group-action-2 & -:!>(*vale:group-action-2) + :+ %group-action-3 & -:!>(*vale:group-action-3) + :+ %group-action-4 & -:!>(*vale:group-action-4) + :+ %group-cancel & -:!>(*vale:group-cancel) + :+ %group-changed-groups-1 & -:!>(*vale:group-changed-groups-1) + :+ %group-changed-groups-2 & -:!>(*vale:group-changed-groups-2) + :+ %group-command & -:!>(*vale:group-command) + :+ %group-create & -:!>(*vale:group-create) + :+ %group-create-thread & -:!>(*vale:group-create-thread) + :+ %group-foreign-1 & -:!>(*vale:group-foreign-1) + :+ %group-foreign-2 & -:!>(*vale:group-foreign-2) + :+ %group-init & -:!>(*vale:group-init) + :+ %group-init-0 & -:!>(*vale:group-init-0) + :+ %group-init-1 & -:!>(*vale:group-init-1) + :+ %group-init-2 & -:!>(*vale:group-init-2) + :+ %group-init-3 & -:!>(*vale:group-init-3) + :+ %group-init-4 & -:!>(*vale:group-init-4) + :+ %group-invite & -:!>(*vale:group-invite) + :+ %group-invite-1 & -:!>(*vale:group-invite-1) + :+ %group-invites & -:!>(*vale:group-invites) + :+ %group-invites-1 & -:!>(*vale:group-invites-1) + :+ %group-join & -:!>(*vale:group-join) + :+ %group-knock & -:!>(*vale:group-knock) + :+ %group-leave & -:!>(*vale:group-leave) + :+ %group-log & -:!>(*vale:group-log) + :+ %group-preview & -:!>(*vale:group-preview) + :+ %group-preview-1 & -:!>(*vale:group-preview-1) + :+ %group-preview-2 & -:!>(*vale:group-preview-2) + :+ %group-preview-3 & -:!>(*vale:group-preview-3) + :+ %group-preview-update & -:!>(*vale:group-preview-update) + :+ %group-previews & -:!>(*vale:group-previews) + :+ %group-previews-1 & -:!>(*vale:group-previews-1) + :+ %group-rescind & -:!>(*vale:group-rescind) + :+ %group-response-1 & -:!>(*vale:group-response-1) + :+ %group-token & -:!>(*vale:group-token) + :+ %group-ui & -:!>(*vale:group-ui) + :+ %group-ui-1 & -:!>(*vale:group-ui-1) + :+ %group-ui-2 & -:!>(*vale:group-ui-2) + :+ %group-update & -:!>(*vale:group-update) + :+ %grouper-answer-enabled & -:!>(*vale:grouper-answer-enabled) + :+ %grouper-ask-enabled & -:!>(*vale:grouper-ask-enabled) + :+ %grouper-disable & -:!>(*vale:grouper-disable) + :+ %grouper-enable & -:!>(*vale:grouper-enable) + :+ %groups & -:!>(*vale:groups) + :+ %groups-1 & -:!>(*vale:groups-1) + :+ %groups-2 & -:!>(*vale:groups-2) + :+ %groups-ui & -:!>(*vale:groups-ui) + :+ %groups-ui-1 & -:!>(*vale:groups-ui-1) + :+ %groups-ui-2 & -:!>(*vale:groups-ui-2) + :+ %growl-summarize & -:!>(*vale:growl-summarize) + :+ %hi-ship & -:!>(*vale:hi-ship) + :+ %hidden-messages & -:!>(*vale:hidden-messages) + :+ %hidden-posts & -:!>(*vale:hidden-posts) + :+ %holt & -:!>(*vale:holt) + :+ %hook-action-0 & -:!>(*vale:hook-action-0) + :+ %hook-channel-preview & -:!>(*vale:hook-channel-preview) + :+ %hook-full & -:!>(*vale:hook-full) + :+ %hook-response-0 & -:!>(*vale:hook-response-0) + :+ %hook-setup-template & -:!>(*vale:hook-setup-template) + :+ %hook-setup-template-args & -:!>(*vale:hook-setup-template-args) + :+ %hook-template & -:!>(*vale:hook-template) + :+ %hoon & -:!>(*vale:hoon) + :+ %htm & -:!>(*vale:htm) + :+ %html & -:!>(*vale:html) + :+ %httr & -:!>(*vale:httr) + :+ %hymn & -:!>(*vale:hymn) + :+ %invite-decline & -:!>(*vale:invite-decline) + :+ %jam & -:!>(*vale:jam) + :+ %jpg & -:!>(*vale:jpg) + :+ %js & -:!>(*vale:js) + :+ %json & -:!>(*vale:json) + :+ %json-rpc-response & -:!>(*vale:json-rpc-response) + :+ %kelvin & -:!>(*vale:kelvin) + :+ %kiln-approve-merge & -:!>(*vale:kiln-approve-merge) + :+ %kiln-jump & -:!>(*vale:kiln-jump) + :+ %kiln-jump-ask & -:!>(*vale:kiln-jump-ask) + :+ %kiln-jump-opt & -:!>(*vale:kiln-jump-opt) + :+ %kiln-sync-update & -:!>(*vale:kiln-sync-update) + :+ %language-server-rpc-notification & -:!>(*vale:language-server-rpc-notification) + :+ %language-server-rpc-request & -:!>(*vale:language-server-rpc-request) + :+ %language-server-rpc-response & -:!>(*vale:language-server-rpc-response) + :+ %lanyard-command-1 & -:!>(*vale:lanyard-command-1) + :+ %lanyard-query-1 & -:!>(*vale:lanyard-query-1) + :+ %lanyard-update-1 & -:!>(*vale:lanyard-update-1) + :+ %loob & -:!>(*vale:loob) + :+ %mass & -:!>(*vale:mass) + :+ %mime & -:!>(*vale:mime) + :+ %nest & -:!>(*vale:nest) + :+ %notify-client-action & -:!>(*vale:notify-client-action) + :+ %notify-provider-action & -:!>(*vale:notify-provider-action) + :+ %notify-update & -:!>(*vale:notify-update) + :+ %notify-update-1 & -:!>(*vale:notify-update-1) + :+ %noun & -:!>(*vale:noun) + :+ %noun-autodiff & -:!>(*vale:noun-autodiff) + :+ %path & -:!>(*vale:path) + :+ %png & -:!>(*vale:png) + :+ %purl & -:!>(*vale:purl) + :+ %reel-bait & -:!>(*vale:reel-bait) + :+ %reel-bite & -:!>(*vale:reel-bite) + :+ %reel-command & -:!>(*vale:reel-command) + :+ %reel-confirmation & -:!>(*vale:reel-confirmation) + :+ %reel-describe & -:!>(*vale:reel-describe) + :+ %reel-description & -:!>(*vale:reel-description) + :+ %reel-give-token-link & -:!>(*vale:reel-give-token-link) + :+ %reel-metadata & -:!>(*vale:reel-metadata) + :+ %reel-undescribe & -:!>(*vale:reel-undescribe) + :+ %reel-want-token-link & -:!>(*vale:reel-want-token-link) + :+ %release & -:!>(*vale:release) + :+ %reset-group-perms & -:!>(*vale:reset-group-perms) + :+ %ship & -:!>(*vale:ship) + :+ %ships & -:!>(*vale:ships) + :+ %sigil & -:!>(*vale:sigil) + :+ %sole-action & -:!>(*vale:sole-action) + :+ %sole-effect & -:!>(*vale:sole-effect) + :+ %svg & -:!>(*vale:svg) + :+ %tang & -:!>(*vale:tang) + :+ %tape & -:!>(*vale:tape) + :+ %thread-done & -:!>(*vale:thread-done) + :+ %thread-fail & -:!>(*vale:thread-fail) + :+ %toc & -:!>(*vale:toc) + :+ %toggle-post & -:!>(*vale:toggle-post) + :+ %txt & -:!>(*vale:txt) + :+ %txt-diff & -:!>(*vale:txt-diff) + :+ %udon & -:!>(*vale:udon) + :+ %ui-action & -:!>(*vale:ui-action) + :+ %ui-add-contact-suggestions & -:!>(*vale:ui-add-contact-suggestions) + :+ %ui-heads & -:!>(*vale:ui-heads) + :+ %ui-heads-2 & -:!>(*vale:ui-heads-2) + :+ %ui-heads-3 & -:!>(*vale:ui-heads-3) + :+ %ui-heads-4 & -:!>(*vale:ui-heads-4) + :+ %ui-hide-contact & -:!>(*vale:ui-hide-contact) + :+ %ui-import-pals & -:!>(*vale:ui-import-pals) + :+ %ui-init & -:!>(*vale:ui-init) + :+ %ui-init-1 & -:!>(*vale:ui-init-1) + :+ %ui-init-2 & -:!>(*vale:ui-init-2) + :+ %ui-init-3 & -:!>(*vale:ui-init-3) + :+ %ui-init-4 & -:!>(*vale:ui-init-4) + :+ %ui-init-5 & -:!>(*vale:ui-init-5) + :+ %ui-init-6 & -:!>(*vale:ui-init-6) + :+ %ui-init-7 & -:!>(*vale:ui-init-7) + :+ %ui-pins & -:!>(*vale:ui-pins) + :+ %ui-show-contact & -:!>(*vale:ui-show-contact) + :+ %ui-vita & -:!>(*vale:ui-vita) + :+ %ui-vita-toggle & -:!>(*vale:ui-vita-toggle) + :+ %umd & -:!>(*vale:umd) + :+ %urb & -:!>(*vale:urb) + :+ %urbit & -:!>(*vale:urbit) + :+ %verb-event & -:!>(*vale:verb-event) + :+ %verb-event-plus & -:!>(*vale:verb-event-plus) + :+ %vere & -:!>(*vale:vere) + :+ %verifier-result & -:!>(*vale:verifier-result) + :+ %verifier-update & -:!>(*vale:verifier-update) + :+ %verifier-user-command & -:!>(*vale:verifier-user-command) + :+ %verifier-user-query & -:!>(*vale:verifier-user-query) + :+ %volume-set & -:!>(*vale:volume-set) + :+ %volume-value & -:!>(*vale:volume-value) + :+ %wasm & -:!>(*vale:wasm) + :+ %webmanifest & -:!>(*vale:webmanifest) + :+ %woff2 & -:!>(*vale:woff2) + :+ %writ & -:!>(*vale:writ) + :+ %writ-diff & -:!>(*vale:writ-diff) + :+ %writ-response & -:!>(*vale:writ-response) + :+ %writ-response-1 & -:!>(*vale:writ-response-1) + :+ %writ-response-2 & -:!>(*vale:writ-response-2) + :+ %writ-response-3 & -:!>(*vale:writ-response-3) + :+ %writ-response-4 | -:!>(*vale:writ-response-4) + :+ %xhtml & -:!>(*vale:xhtml) + :+ %xml & -:!>(*vale:xml) + == -- From e13864519f378bb067471471f90769a4a619fd82 Mon Sep 17 00:00:00 2001 From: fang Date: Wed, 29 Apr 2026 09:53:21 +0200 Subject: [PATCH 06/20] guardian: add +on-poke, +on-agent wrappers This makes the argument contain rails instead of cages, for better compile-time type safety. Using this you cannot unpack a vase from a cage into a type different from that of its mark. Applies both to /app/chat, athough +on-agent doesn't do much there: chat doesn't do subscriptions, so we don't handle fact cages anyway. --- desk/app/chat.hoon | 121 ++++++++++++++++++----------------------- desk/lib/guardian.hoon | 15 +++++ 2 files changed, 68 insertions(+), 68 deletions(-) diff --git a/desk/app/chat.hoon b/desk/app/chat.hoon index 0c33cae59e..ff81c9a59d 100644 --- a/desk/app/chat.hoon +++ b/desk/app/chat.hoon @@ -228,11 +228,12 @@ [cards this] :: ++ on-poke - |= [=mark =vase] + %- on-poke:guardian + |= =rail %- step:unguard:guardian ^- (quip card _this) =^ cards state - abet:(poke:cor mark vase) + abet:(poke:cor rail) [cards this] ++ on-watch |= =path @@ -252,7 +253,8 @@ [(fail:log term tang ~)]~ :: ++ on-agent - |= [=wire =sign:agent:gall] + %- on-agent:guardian + |= [=wire =sign:guardian] %- step:unguard:guardian ^- (quip card _this) =^ cards state @@ -780,16 +782,30 @@ -- :: ++ poke - |= [=mark =vase] + |= =rail ~> %spin.['poke'] |^ ^+ cor - ?+ mark ~|(bad-poke/mark !!) + ?: ?=(%unsafe -.rail) + ?+ p.cage.rail ~|(bad-poke/-.rail !!) + %chat-migrate-server ?>(from-self server:migrate) + %chat-migrate ?>(from-self client:migrate) + :: + %chat-migrate-refs + ?> from-self + =+ !<(flag=[ship term] q.cage.rail) + (refs:migrate flag) + :: + %chat-trim + ?> from-self + trim:migrate + == + ?+ -.rail ~|(bad-poke/-.rail !!) %chat-negotiate ::TODO arguably should just be a /mar/negotiate - (emit (exit:guardian (initiate:neg !<(@p vase) dap.bowl))) + (emit (exit:guardian (initiate:neg p.rail dap.bowl))) :: %chat-dm-rsvp - =+ !<(=rsvp:dm:c vase) + =* rsvp=rsvp:dm:c p.rail ::NOTE even though we "soft" here, nacks result in deletions of :: newly inserted dms. =/ di-core (di-abed-soft:di-core ship.rsvp) @@ -807,48 +823,29 @@ (has-unblocked src.bowl) :: %chat-block-ship - =+ !<(=ship vase) + =* ship=@p p.rail ?> from-self (block ship) :: %chat-unblock-ship - =+ !<(=ship vase) + =* ship=@p p.rail ?> from-self (unblock ship) :: %chat-toggle-message - =+ !<(toggle=message-toggle:c vase) - ?> from-self - (toggle-message toggle) - :: - %chat-unblocked - ?< from-self - (has-unblocked src.bowl) - :: - %chat-block-ship - =+ !<(=ship vase) - ?> from-self - (block ship) - :: - %chat-unblock-ship - =+ !<(=ship vase) - ?> from-self - (unblock ship) - :: - %chat-toggle-message - =+ !<(toggle=message-toggle:c vase) + =* toggle=message-toggle:c p.rail ?> from-self (toggle-message toggle) :: %chat-remark-action - =+ !<(act=remark-action:c vase) + =/ act=remark-action:c p.rail ::NOTE =* brings shenanigans ?- -.p.act %ship di-abet:(di-remark-diff:(di-abed:di-core p.p.act) q.act) %club cu-abet:(cu-remark-diff:(cu-abed:cu-core p.p.act) q.act) == :: %chat-dm-action-2 - =+ !<(=action:dm:v7:cv vase) + =* action=action:dm:v7:cv p.rail =. cor (emit (tell-log %dbug ~['received dm action' >action<] ~)) :: don't allow anyone else to proxy through us ?. =(src.bowl our.bowl) @@ -859,46 +856,35 @@ di-abet:(di-proxy:(di-abed-soft:di-core p.action) q.action) :: %chat-dm-diff-2 - =+ !<(=diff:dm:v7:cv vase) + =* diff=diff:dm:v7:cv p.rail =. cor (emit (tell-log %dbug ~['received dm diff' >diff<] ~)) di-abet:(di-take-counter:(di-abed-soft:di-core src.bowl) diff) :: %chat-dm-action-1 - =+ !<(old-action=action:dm:v6:cv vase) - ^$(+< chat-dm-action-2+!>((v7:action:dm:v6:cc old-action))) + =* old-action=action:dm:v6:cv p.rail + ^$(+< chat-dm-action-2+(v7:action:dm:v6:cc old-action)) :: %chat-dm-diff-1 - =+ !<(old-diff=diff:dm:v6:cv vase) - ^$(+< chat-dm-diff-2+!>((v7:diff:dm:v6:cc old-diff))) + =* old-diff=diff:dm:v6:cv p.rail + ^$(+< chat-dm-diff-2+(v7:diff:dm:v6:cc old-diff)) :: =. cor (emit (tell:log %dbug ~['received dm diff' >diff<] ~)) :: di-abet:(di-take-counter:(di-abed-soft:di-core src.bowl) diff) :: %chat-club-create - cu-abet:(cu-create:cu-core !<(=create:club:c vase)) + cu-abet:(cu-create:cu-core `create:club:c`p.rail) :: %chat-club-action-2 - =+ !<(=action:club:v7:cv vase) + =* action=action:club:v7:cv p.rail =/ cu (cu-abed p.action) cu-abet:(cu-diff:cu q.action) :: %chat-club-action-1 - =+ !<(old-action=action:club:v6:cv vase) - ^$(+< chat-club-action-2+!>((v7:action-club:v6:cc old-action))) + =* old-action=action:club:v6:cv p.rail + ^$(+< chat-club-action-2+(v7:action-club:v6:cc old-action)) :: %chat-dm-archive ?> from-self - di-abet:di-archive:(di-abed:di-core !<(ship vase)) - :: - %chat-migrate-server ?>(from-self server:migrate) - %chat-migrate ?>(from-self client:migrate) - :: - %chat-migrate-refs - ?> from-self - =+ !<(flag=[ship term] vase) - (refs:migrate flag) - %chat-trim - ?> from-self - trim:migrate + di-abet:di-archive:(di-abed:di-core `ship`p.rail) :: backwards compatibility :: :: v3 types @@ -906,19 +892,19 @@ :: %chat-dm-action =; new=action:dm:v4:cv - $(mark %chat-dm-action-1, vase !>(new)) - =+ !<(=action:dm:v3:cv vase) + $(rail [%chat-dm-action-1 new]) + =/ =action:dm:v3:cv p.rail action(q (v4:diff-writs:v3:cc q.action)) :: %chat-dm-diff =; new=diff:dm:v4:cv - $(mark %chat-dm-diff-1, vase !>(new)) - (v4:diff-writs:v3:cc !<(=diff:dm:v3:cv vase)) + $(rail [%chat-dm-diff-1 new]) + (v4:diff-writs:v3:cc `diff:dm:v3:cv`p.rail) :: ?(%chat-club-action %chat-club-action-0) =; new=action:club:v4:cv - $(mark %chat-club-action-1, vase !>(new)) - =+ !<(=action:club:v3:cv vase) + $(rail [%chat-club-action-1 new]) + =/ =action:club:v3:cv p.rail ?. ?=(%writ -.q.q.action) action action(diff.q.q (v4:diff-writs:v3:cc diff.q.q.action)) :: v2 types @@ -926,23 +912,22 @@ :: :: %dm-rsvp - =+ `rsvp:dm:c`!<(rsvp:dm:v2:cv vase) ::NOTE safety check - $(mark %chat-dm-rsvp) + $(-.rail %chat-dm-rsvp) :: %dm-diff =; new=diff:dm:v3:cv - $(mark %chat-dm-diff, vase !>(new)) - (v3:diff-writs:v2:cc !<(=diff:dm:v2:cv vase)) + $(rail [%chat-dm-diff new]) + (v3:diff-writs:v2:cc `diff:dm:v2:cv`p.rail) :: %club-action =; new=action:club:v3:cv - $(mark %chat-club-action, vase !>(new)) - =+ !<(=action:club:v2:cv vase) + $(rail [%chat-club-action new]) + =/ action=action:club:v2:cv p.rail ?. ?=(%writ -.q.q.action) action action(diff.q.q (v3:diff-writs:v2:cc diff.q.q.action)) :: %egg-any - =+ !<(=egg-any:gall vase) + =/ egg-any=egg-any:gall p.rail ?- -.egg-any ?(%15 %16) ?. ?=(%live +<.egg-any) @@ -1098,7 +1083,7 @@ == :: ++ agent - |= [=(pole knot) =sign:agent:gall] + |= [=(pole knot) =sign:guardian] ~> %spin.['agent'] ^+ cor ?+ pole ~|(bad-agent-wire/pole !!) @@ -2341,7 +2326,7 @@ == :: ++ cu-agent - |= [=wire =sign:agent:gall] + |= [=wire =sign:guardian] ~> %spin.['cu-agent'] ^+ cu-core ?+ wire ~|(bad-club-take/wire !!) @@ -2769,7 +2754,7 @@ == :: ++ di-agent - |= [=wire =sign:agent:gall] + |= [=wire =sign:guardian] ~> %spin.['di-agent'] ^+ di-core ?+ wire ~|(bad-dm-take/wire !!) diff --git a/desk/lib/guardian.hoon b/desk/lib/guardian.hoon index 3c4806ea13..5adf3472e0 100644 --- a/desk/lib/guardian.hoon +++ b/desk/lib/guardian.hoon @@ -19,6 +19,21 @@ $% $<(%fact gift:agent:gall) [%fact paths=(list path) =rail] == ++$ sign + $% $<(%fact sign:agent:gall) + [%fact =rail] + == +:: +++ on-poke + |* f=$-(rail *) + |= =cage + (f (en-rail cage)) +:: +++ on-agent + |* f=$-([wire sign] *) + |= [=wire =sign:agent:gall] + ?. ?=(%fact -.sign) (f wire sign) + (f wire sign(cage (en-rail cage.sign))) :: ++ exit |= cad=card:agent:gall From 678f1611b1e834b4073bf058f2502174c492924e Mon Sep 17 00:00:00 2001 From: fang Date: Wed, 29 Apr 2026 09:55:35 +0200 Subject: [PATCH 07/20] rail: propagate mark removals/additions --- desk/lib/rail.hoon | 110 ++------------------------------------------- 1 file changed, 4 insertions(+), 106 deletions(-) diff --git a/desk/lib/rail.hoon b/desk/lib/rail.hoon index 64d1aa1ca1..5fa1e99558 100644 --- a/desk/lib/rail.hoon +++ b/desk/lib/rail.hoon @@ -184,36 +184,6 @@ /% contact-update-0 %contact-update-0 /% contact-update-1 %contact-update-1 /% css %css -/% curio %curio -/% curios-diff %curios-diff -/% diary-action %diary-action -/% diary-action-0 %diary-action-0 -/% diary-action-1 %diary-action-1 -/% diary-action-2 %diary-action-2 -/% diary-action-3 %diary-action-3 -/% diary-brief-update %diary-brief-update -/% diary-briefs %diary-briefs -/% diary-create %diary-create -/% diary-denied %diary-denied -/% diary-leave %diary-leave -/% diary-logs %diary-logs -/% diary-logs-0 %diary-logs-0 -/% diary-logs-1 %diary-logs-1 -/% diary-logs-2 %diary-logs-2 -/% diary-logs-3 %diary-logs-3 -/% diary-note %diary-note -/% diary-notes %diary-notes -/% diary-outline %diary-outline -/% diary-outlines %diary-outlines -/% diary-perm %diary-perm -/% diary-quips %diary-quips -/% diary-remark-action %diary-remark-action -/% diary-said %diary-said -/% diary-update %diary-update -/% diary-update-0 %diary-update-0 -/% diary-update-1 %diary-update-1 -/% diary-update-2 %diary-update-2 -/% diary-update-3 %diary-update-3 /% dm-action %dm-action /% dm-archive %dm-archive /% dm-diff %dm-diff @@ -222,6 +192,7 @@ /% docket-0 %docket-0 /% dude %dude /% dummy %dummy +/% egg-any %egg-any /% emojimart %emojimart /% epic %epic /% flag %flag @@ -286,25 +257,6 @@ /% groups-ui-1 %groups-ui-1 /% groups-ui-2 %groups-ui-2 /% growl-summarize %growl-summarize -/% hark-yarn %hark-yarn -/% heap-action %heap-action -/% heap-action-0 %heap-action-0 -/% heap-action-1 %heap-action-1 -/% heap-brief-update %heap-brief-update -/% heap-briefs %heap-briefs -/% heap-create %heap-create -/% heap-curios %heap-curios -/% heap-denied %heap-denied -/% heap-leave %heap-leave -/% heap-logs %heap-logs -/% heap-logs-0 %heap-logs-0 -/% heap-logs-1 %heap-logs-1 -/% heap-perm %heap-perm -/% heap-remark-action %heap-remark-action -/% heap-said %heap-said -/% heap-update %heap-update -/% heap-update-0 %heap-update-0 -/% heap-update-1 %heap-update-1 /% hi-ship %hi-ship /% hidden-messages %hidden-messages /% hidden-posts %hidden-posts @@ -340,10 +292,9 @@ /% lanyard-query-1 %lanyard-query-1 /% lanyard-update-1 %lanyard-update-1 /% loob %loob -/% migrate-map %migrate-map +/% mass %mass /% mime %mime /% nest %nest -/% notes-diff %notes-diff /% notify-client-action %notify-client-action /% notify-provider-action %notify-provider-action /% notify-update %notify-update @@ -352,7 +303,6 @@ /% noun-autodiff %noun-autodiff /% path %path /% png %png -/% post-toggle %post-toggle /% purl %purl /% reel-bait %reel-bait /% reel-bite %reel-bite @@ -371,7 +321,6 @@ /% sigil %sigil /% sole-action %sole-action /% sole-effect %sole-effect -/% stash %stash /% svg %svg /% tang %tang /% tape %tape @@ -979,36 +928,6 @@ %contact-update-0 [-.rail !>(+.rail)] %contact-update-1 [-.rail !>(+.rail)] %css [-.rail !>(+.rail)] - %curio [-.rail !>(+.rail)] - %curios-diff [-.rail !>(+.rail)] - %diary-action [-.rail !>(+.rail)] - %diary-action-0 [-.rail !>(+.rail)] - %diary-action-1 [-.rail !>(+.rail)] - %diary-action-2 [-.rail !>(+.rail)] - %diary-action-3 [-.rail !>(+.rail)] - %diary-brief-update [-.rail !>(+.rail)] - %diary-briefs [-.rail !>(+.rail)] - %diary-create [-.rail !>(+.rail)] - %diary-denied [-.rail !>(+.rail)] - %diary-leave [-.rail !>(+.rail)] - %diary-logs [-.rail !>(+.rail)] - %diary-logs-0 [-.rail !>(+.rail)] - %diary-logs-1 [-.rail !>(+.rail)] - %diary-logs-2 [-.rail !>(+.rail)] - %diary-logs-3 [-.rail !>(+.rail)] - %diary-note [-.rail !>(+.rail)] - %diary-notes [-.rail !>(+.rail)] - %diary-outline [-.rail !>(+.rail)] - %diary-outlines [-.rail !>(+.rail)] - %diary-perm [-.rail !>(+.rail)] - %diary-quips [-.rail !>(+.rail)] - %diary-remark-action [-.rail !>(+.rail)] - %diary-said [-.rail !>(+.rail)] - %diary-update [-.rail !>(+.rail)] - %diary-update-0 [-.rail !>(+.rail)] - %diary-update-1 [-.rail !>(+.rail)] - %diary-update-2 [-.rail !>(+.rail)] - %diary-update-3 [-.rail !>(+.rail)] %dm-action [-.rail !>(+.rail)] %dm-archive [-.rail !>(+.rail)] %dm-diff [-.rail !>(+.rail)] @@ -1017,6 +936,7 @@ %docket-0 [-.rail !>(+.rail)] %dude [-.rail !>(+.rail)] %dummy [-.rail !>(+.rail)] + %egg-any [-.rail !>(+.rail)] %emojimart [-.rail !>(+.rail)] %epic [-.rail !>(+.rail)] %flag [-.rail !>(+.rail)] @@ -1081,25 +1001,6 @@ %groups-ui-1 [-.rail !>(+.rail)] %groups-ui-2 [-.rail !>(+.rail)] %growl-summarize [-.rail !>(+.rail)] - %hark-yarn [-.rail !>(+.rail)] - %heap-action [-.rail !>(+.rail)] - %heap-action-0 [-.rail !>(+.rail)] - %heap-action-1 [-.rail !>(+.rail)] - %heap-brief-update [-.rail !>(+.rail)] - %heap-briefs [-.rail !>(+.rail)] - %heap-create [-.rail !>(+.rail)] - %heap-curios [-.rail !>(+.rail)] - %heap-denied [-.rail !>(+.rail)] - %heap-leave [-.rail !>(+.rail)] - %heap-logs [-.rail !>(+.rail)] - %heap-logs-0 [-.rail !>(+.rail)] - %heap-logs-1 [-.rail !>(+.rail)] - %heap-perm [-.rail !>(+.rail)] - %heap-remark-action [-.rail !>(+.rail)] - %heap-said [-.rail !>(+.rail)] - %heap-update [-.rail !>(+.rail)] - %heap-update-0 [-.rail !>(+.rail)] - %heap-update-1 [-.rail !>(+.rail)] %hi-ship [-.rail !>(+.rail)] %hidden-messages [-.rail !>(+.rail)] %hidden-posts [-.rail !>(+.rail)] @@ -1135,10 +1036,9 @@ %lanyard-query-1 [-.rail !>(+.rail)] %lanyard-update-1 [-.rail !>(+.rail)] %loob [-.rail !>(+.rail)] - %migrate-map [-.rail !>(+.rail)] + %mass [-.rail !>(+.rail)] %mime [-.rail !>(+.rail)] %nest [-.rail !>(+.rail)] - %notes-diff [-.rail !>(+.rail)] %notify-client-action [-.rail !>(+.rail)] %notify-provider-action [-.rail !>(+.rail)] %notify-update [-.rail !>(+.rail)] @@ -1147,7 +1047,6 @@ %noun-autodiff [-.rail !>(+.rail)] %path [-.rail !>(+.rail)] %png [-.rail !>(+.rail)] - %post-toggle [-.rail !>(+.rail)] %purl [-.rail !>(+.rail)] %reel-bait [-.rail !>(+.rail)] %reel-bite [-.rail !>(+.rail)] @@ -1166,7 +1065,6 @@ %sigil [-.rail !>(+.rail)] %sole-action [-.rail !>(+.rail)] %sole-effect [-.rail !>(+.rail)] - %stash [-.rail !>(+.rail)] %svg [-.rail !>(+.rail)] %tang [-.rail !>(+.rail)] %tape [-.rail !>(+.rail)] From ff7c76e0ba01606491a99f003d9548d86d1c7de1 Mon Sep 17 00:00:00 2001 From: fang Date: Fri, 1 May 2026 23:09:24 +0200 Subject: [PATCH 08/20] channels: put on guardrails --- desk/app/channels.hoon | 621 +++++++++++++++++------------------------ 1 file changed, 257 insertions(+), 364 deletions(-) diff --git a/desk/app/channels.hoon b/desk/app/channels.hoon index f8ba733225..088ab1e6b2 100644 --- a/desk/app/channels.hoon +++ b/desk/app/channels.hoon @@ -11,6 +11,7 @@ /- c=channels, cv=channels-ver, g=groups, gv=groups-ver, activity, story /- meta /+ default-agent, verb, dbug, + guardian, neg=negotiate, discipline, logs, sparse, kol, imp=import-aid /+ utils=channel-utils, volume, s=subscriber, @@ -18,133 +19,10 @@ :: performance, keep warm /+ channel-json :: -/% m-channel-changed-posts %channel-changed-posts -/% m-channel-changed-posts-1 %channel-changed-posts-1 -/% m-channel-heads %channel-heads -/% m-channel-heads-2 %channel-heads-2 -/% m-channel-heads-3 %channel-heads-3 -/% m-channel-heads-4 %channel-heads-4 -/% m-channel-perm %channel-perm -/% m-channel-post %channel-post -/% m-channel-post-2 %channel-post-2 -/% m-channel-post-3 %channel-post-3 -/% m-channel-post-4 %channel-post-4 -/% m-channel-post-5 %channel-post-5 -/% m-channel-posts %channel-posts -/% m-channel-posts-2 %channel-posts-2 -/% m-channel-posts-3 %channel-posts-3 -/% m-channel-posts-4 %channel-posts-4 -/% m-channel-posts-5 %channel-posts-5 -/% m-channel-replies %channel-replies -/% m-channel-replies-2 %channel-replies-2 -/% m-channel-replies-3 %channel-replies-3 -/% m-channel-replies-4 %channel-replies-4 -/% m-channel-replies-5 %channel-replies-5 -/% m-channel-reply %channel-reply -/% m-channel-reply-2 %channel-reply-2 -/% m-channel-response %channel-response -/% m-channel-response-2 %channel-response-2 -/% m-channel-response-3 %channel-response-3 -/% m-channel-response-4 %channel-response-4 -/% m-channel-said %channel-said -/% m-channel-said-1 %channel-said-1 -/% m-channel-said-2 %channel-said-2 -/% m-channel-said-3 %channel-said-3 -/% m-channel-scan %channel-scan -/% m-channel-scan-2 %channel-scan-2 -/% m-channel-scan-3 %channel-scan-3 -/% m-channel-scan-4 %channel-scan-4 -/% m-channel-scam %channel-scam -/% m-channel-scam-2 %channel-scam-2 -/% m-channel-scam-3 %channel-scam-3 -/% m-channel-scam-4 %channel-scam-4 -/% m-channel-simple-post %channel-simple-post -/% m-channel-simple-posts %channel-simple-posts -::NOTE these fail to build with /%, but can be built from dojo just fine. -:: presuming a mark filepath resolution bug in clay... -:: /% m-channel-simple-replies %channel-simple-replies -:: /% m-channel-simple-reply %channel-simple-reply -/% m-channel-unread-update %channel-unread-update -/% m-channel-unreads %channel-unreads -/% m-channels %channels -/% m-channels-2 %channels-2 -/% m-channels-3 %channels-3 -/% m-channels-4 %channels-4 -/% m-channels-5 %channels-5 -/% m-hidden-posts %hidden-posts -/% m-hook-channel-preview %hook-channel-preview -/% m-toggle-post %toggle-post -:: %- %- discipline :+ :: marks :: - ::TODO make strict one day (affected by versioning mistake) - :~ :+ %channel-changed-posts | -:!>(*vale:m-channel-changed-posts) - :+ %channel-changed-posts-1 | -:!>(*vale:m-channel-changed-posts-1) - :+ %channel-heads & -:!>(*vale:m-channel-heads) - :+ %channel-heads-2 & -:!>(*vale:m-channel-heads-2) - :+ %channel-heads-3 & -:!>(*vale:m-channel-heads-3) - ::TODO make strict on next upgrade - :+ %channel-heads-4 & -:!>(*vale:m-channel-heads-4) - :+ %channel-perm & -:!>(*vale:m-channel-perm) - ::TODO make strict one day (affected by versioning mistake) - :+ %channel-post | -:!>(*vale:m-channel-post) - :+ %channel-post-2 & -:!>(*vale:m-channel-post-2) - :+ %channel-post-3 & -:!>(*vale:m-channel-post-3) - :+ %channel-post-4 & -:!>(*vale:m-channel-post-4) - ::TODO make strict on next upgrade - :+ %channel-post-5 | -:!>(*vale:m-channel-post-5) - ::TODO make strict one day (affected by versioning mistake) - :+ %channel-posts | -:!>(*vale:m-channel-posts) - :+ %channel-posts-2 & -:!>(*vale:m-channel-posts-2) - :+ %channel-posts-3 & -:!>(*vale:m-channel-posts-3) - ::TODO make strict one day (affected by versioning mistake) - :+ %channel-posts-4 | -:!>(*vale:m-channel-posts-4) - :+ %channel-posts-5 | -:!>(*vale:m-channel-posts-5) - :+ %channel-replies & -:!>(*vale:m-channel-replies) - :+ %channel-replies-2 & -:!>(*vale:m-channel-replies-2) - :+ %channel-replies-3 & -:!>(*vale:m-channel-replies-3) - :+ %channel-replies-4 & -:!>(*vale:m-channel-replies-4) - ::TODO make strict on next upgrade - :+ %channel-replies-5 | -:!>(*vale:m-channel-replies-5) - :+ %channel-reply & -:!>(*vale:m-channel-reply) - :+ %channel-reply-2 & -:!>(*vale:m-channel-reply-2) - :+ %channel-response & -:!>(*vale:m-channel-response) - :+ %channel-response-2 & -:!>(*vale:m-channel-response-2) - :+ %channel-response-3 & -:!>(*vale:m-channel-response-3) - :+ %channel-response-4 & -:!>(*vale:m-channel-response-4) - :+ %channel-said & -:!>(*vale:m-channel-said) - :+ %channel-said-1 & -:!>(*vale:m-channel-said-1) - :+ %channel-said-2 & -:!>(*vale:m-channel-said-2) - ::TODO make strict on next upgrade - :+ %channel-said-3 | -:!>(*vale:m-channel-said-3) - :+ %channel-scan & -:!>(*vale:m-channel-scan) - :+ %channel-scan-2 & -:!>(*vale:m-channel-scan-2) - :+ %channel-scan-3 & -:!>(*vale:m-channel-scan-3) - ::TODO make strict on next upgrade - :+ %channel-scan-4 | -:!>(*vale:m-channel-scan-4) - :+ %channel-scam & -:!>(*vale:m-channel-scam) - :+ %channel-scam-2 & -:!>(*vale:m-channel-scam-2) - :+ %channel-scam-3 & -:!>(*vale:m-channel-scam-3) - ::TODO make strict on next upgrade - :+ %channel-scam-4 | -:!>(*vale:m-channel-scam-4) - :+ %channel-simple-post & -:!>(*vale:m-channel-simple-post) - :+ %channel-simple-posts & -:!>(*vale:m-channel-simple-posts) - :: :+ %channel-simple-replies & -:!>(*vale:m-channel-simple-replies) - :: :+ %channel-simple-reply & -:!>(*vale:m-channel-simple-reply) - :+ %channel-unread-update & -:!>(*vale:m-channel-unread-update) - :+ %channel-unreads & -:!>(*vale:m-channel-unreads) - :+ %channels & -:!>(*vale:m-channels) - ::TODO make strict one day (affected by versioning mistake) - :+ %channels-2 | -:!>(*vale:m-channels-2) - :+ %channels-3 & -:!>(*vale:m-channels-3) - :+ %channels-4 & -:!>(*vale:m-channels-4) - ::TODO make strict on next upgrade - :+ %channels-5 | -:!>(*vale:m-channels-5) - :+ %hidden-posts & -:!>(*vale:m-hidden-posts) - :+ %hook-channel-preview & -:!>(*vale:m-hook-channel-preview) - :+ %toggle-post & -:!>(*vale:m-toggle-post) - == + discipline:guardian :: facts :: :~ [/ %channel-response %toggle-post ~] @@ -250,7 +128,8 @@ ^- agent:gall => |% - +$ card card:agent:gall + +$ card card:guardian + +$ rail rail:guardian +$ current-state $: %17 =v-channels:v10:cv @@ -276,6 +155,7 @@ log ~(. logs [our.bowl /logs]) cor ~(. +> [bowl ~]) ++ on-init + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:init:cor @@ -284,20 +164,24 @@ ++ on-save !>([state]) ++ on-load |= =vase + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(load:cor vase) [cards this] :: ++ on-poke - |= [=mark =vase] + %- on-poke:guardian + |= =rail + %- step:unguard:guardian ^- (quip card _this) =^ cards state - abet:(poke:cor mark vase) + abet:(poke:cor rail) [cards this] :: ++ on-watch |= =path + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(watch:cor path) @@ -307,12 +191,15 @@ ++ on-leave on-leave:def ++ on-fail |= [=term =tang] + %- step:unguard:guardian ^- (quip card _this) :_ this - [(fail:log term tang ~)]~ + [(exit:guardian (fail:log term tang ~))]~ :: ++ on-agent - |= [=wire =sign:agent:gall] + %- on-agent:guardian + |= [=wire =sign:guardian] + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(agent:cor wire sign) @@ -320,6 +207,7 @@ :: ++ on-arvo |= [=wire sign=sign-arvo] + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) @@ -330,9 +218,10 @@ ++ abet [(flop cards) state] ++ cor . ++ plog ~(. logs [our.bowl /logs]) +++ tell-plog (cork tell:plog exit:guardian) ++ emit |=(=card cor(cards [card cards])) ++ emil |=(caz=(list card) cor(cards (welp (flop caz) cards))) -++ give |=(=gift:agent:gall (emit %give gift)) +++ give |=(=gift:guardian (emit %give gift)) ++ server (cat 3 dap.bowl '-server') ++ log |= msg=(trap tape) @@ -349,9 +238,9 @@ |= delay=? ^+ cor ?: (~(has by wex.bowl) wire dock) cor - =^ caz=(list card) subs + =^ caz=(list card:agent:gall) subs (~(subscribe s [subs bowl]) wire dock path delay) - (emil caz) + (emil (turn caz exit:guardian)) :: ++ load |^ |= =vase @@ -395,7 +284,7 @@ :: harmless. :~ [%pass [%numbers wire] %arvo note] [%pass [%tombstones wire] %arvo note] - (tell:plog %dbug ~[>[wire `@dr`duration %fires-at `@da`(add now.bowl duration)]<] ~) + (tell-plog %dbug ~[>[wire `@dr`duration %fires-at `@da`(add now.bowl duration)]<] ~) == =. cor (emil caz-12) =? old ?=(%13 -.old) (state-13-to-14 old) @@ -843,9 +732,9 @@ |= [=wire =dock] ~> %spin.['unsubscribe'] ^+ cor - =^ caz=(list card) subs + =^ caz=(list card:agent:gall) subs (~(unsubscribe s [subs bowl]) wire dock) - (emil caz) + (emil (turn caz exit:guardian)) ++ inflate-io :: leave all subscriptions we don't recognize :: @@ -903,14 +792,14 @@ cor :: ++ poke - |= [=mark =vase] + |= =rail ~> %spin.['poke'] ^+ cor - ?+ mark ~|(bad-poke+mark !!) + ?+ -.rail ~|(bad-poke+mark !!) %noun - ?+ q.vase !! + ?+ p.rail !! [%channel-wake @ @] - =+ ;;([=kind:c name=term] +.q.vase) + =+ ;;([=kind:c name=term] +.p.rail) =/ =nest:c [kind src.bowl name] ?. (~(has by v-channels) nest) cor ca-abet:(ca-safe-sub:(ca-abed:ca-core nest) |) @@ -933,18 +822,18 @@ :: presence of the relevant timers for this agent first! patience. ::NOTE we set the timer instead of sending the poke right away. timer :: handling will check lib negotiate before poking. - =+ ;;(=nest:c +.q.vase) + =+ ;;(=nest:c +.p.rail) %- emit =/ =wire /[kind.nest]/(scot %p ship.nest)/[name.nest] :+ %pass :_ wire - [?-(-.q.vase %request-seqs %numbers, %request-tombs %tombstones)] + [?-(-.p.rail %request-seqs %numbers, %request-tombs %tombstones)] [%arvo %b %wait now.bowl] :: [%sequence-numbers * @ *] - =+ ;;([%sequence-numbers =nest:c count=@ud seqs=(list [id=id-post:c seq=(unit @ud)])] q.vase) + =+ ;;([%sequence-numbers =nest:c count=@ud seqs=(list [id=id-post:c seq=(unit @ud)])] p.rail) ?> =(src.bowl ship.nest) - =. cor (emit (tell:plog %info ~['receiving sequence nrs' >nest< >count<] ~)) + =. cor (emit (tell-plog %info ~['receiving sequence nrs' >nest< >count<] ~)) ?. (~(has by v-channels) nest) cor =. v-channels %+ ~(jab by v-channels) nest @@ -968,9 +857,9 @@ cor :: [%tombstones * *] - =+ ;;([%tombstones =nest:c tombs=(list [id=id-post:v9:cv tomb=tombstone:v9:cv])] q.vase) + =+ ;;([%tombstones =nest:c tombs=(list [id=id-post:v9:cv tomb=tombstone:v9:cv])] p.rail) ?> =(src.bowl ship.nest) - =. cor (emit (tell:plog %info ~['receiving tombstones' >nest< >(lent tombs)<] ~)) + =. cor (emit (tell-plog %info ~['receiving tombstones' >nest< >(lent tombs)<] ~)) ?. (~(has by v-channels) nest) cor =. v-channels %+ ~(jab by v-channels) nest @@ -989,16 +878,16 @@ :: %channel-action =/ a-channels - (v9:a-channels:v7:ccv !<(a-channels:v7:cv vase)) - $(+< channel-action-1+!>(a-channels)) + (v9:a-channels:v7:ccv p.rail) + $(+< channel-action-1+a-channels) :: %channel-action-1 =/ a-channels - (v10:a-channels:v9:ccv !<(a-channels:v9:cv vase)) - $(+< channel-action-2+!>(a-channels)) + (v10:a-channels:v9:ccv p.rail) + $(+< channel-action-2+a-channels) :: %channel-action-2 - =+ !<(=a-channels:v10:cv vase) + =/ =a-channels:v10:cv p.rail ?: ?=(%create -.a-channels) ca-abet:(ca-create:ca-core create-channel.a-channels) ?: ?=(%pin -.a-channels) @@ -1013,80 +902,82 @@ ca-abet:(ca-a-channel:(ca-abed:ca-core nest.a-channels) a-channel.a-channels) :: %channel-request-join - =+ !<([=nest:c =flag:g] vase) - ca-abet:(ca-join:ca-core nest flag) - :: - %channel-migration - ?> =(our src):bowl - =+ !<(new-channels=v-channels:c vase) - =. v-channels - %+ roll ~(tap by new-channels) - |= [[n=nest:c c=v-channel:c] =_v-channels] - ?~ hav=(~(get by v-channels) n) - (~(put by v-channels) n c) - :: if we already have the channel, only replace it with the import if - :: the one we have right now is empty. otherwise, keep what we already - :: have, lest we lose newer data. - :: - ?. =(~ posts.u.hav) v-channels - (~(put by v-channels) n c) - :: after migration, references to chat msgs have changed. we want to - :: notify the host about these edits, but not right now: we aren't sure - :: they have migrated yet. store affected channels in state, we will send - :: edits on a per-host basis when handling %negotiate-notification below. - :: - =. pending-ref-edits - %- ~(gas ju pending-ref-edits) - ^- (list [ship kind:c term]) - %+ turn ~(tap in ~(key by new-channels)) - |=(nest:c [ship kind name]) - inflate-io - :: - %channel-migration-pins - ?> =(our src):bowl - =+ !<(new-pins=(list nest:c) vase) - cor - :: - %negotiate-notification - :: during migration, references to chat msgs were changed. we want to - :: notify channel hosts about these edits, but not before they themselves - :: have migrated (lest we risk front-running their internal migration - :: pokes, causing our edits to fail). - :: a version negotiation notification guarantees that they have migrated, - :: so based off that we trigger the editing of our messages that changed. - :: (see also %*-migrate-refs poke handling in the old agents.) - :: - ?> =(our src):bowl - =+ !<([match=? =gill:gall] vase) - ?. match - cor - ?. =(%channels-server q.gill) - cor - =* host p.gill - ?~ pend=(~(get by pending-ref-edits) host) - cor - =. pending-ref-edits - (~(del by pending-ref-edits) host) - %- emil - %+ murn ~(tap by u.pend) - |= [=kind:c name=term] - ^- (unit card) - ::NOTE to migrate other olds agents (heap, diary), use 828f5ed or earlier - ?. ?=(%chat kind) ~ - %- some - :+ %pass /migrate - :+ %agent [our.bowl %chat] - :+ %poke %chat-migrate-refs - !>([host name]) + ca-abet:(ca-join:ca-core p.rail) :: %egg-any - =+ !<(=egg-any:gall vase) + =* egg-any=egg-any:gall p.rail ?- pimp ~ cor(pimp `|+egg-any) [~ %& *] (run-import egg-any) [~ %| *] ~& [dap.bowl %overwriting-pending-import] cor(pimp `|+egg-any) == + :: + %unsafe + ?+ p.cage.rail ~|(bad-poke+mark !!) + %channel-migration + ?> =(our src):bowl + =+ !<(new-channels=v-channels:c q.cage.rail) + =. v-channels + %+ roll ~(tap by new-channels) + |= [[n=nest:c c=v-channel:c] =_v-channels] + ?~ hav=(~(get by v-channels) n) + (~(put by v-channels) n c) + :: if we already have the channel, only replace it with the import if + :: the one we have right now is empty. otherwise, keep what we already + :: have, lest we lose newer data. + :: + ?. =(~ posts.u.hav) v-channels + (~(put by v-channels) n c) + :: after migration, references to chat msgs have changed. we want to + :: notify the host about these edits, but not right now: we aren't sure + :: they have migrated yet. store affected channels in state, we will send + :: edits on a per-host basis when handling %negotiate-notification below. + :: + =. pending-ref-edits + %- ~(gas ju pending-ref-edits) + ^- (list [ship kind:c term]) + %+ turn ~(tap in ~(key by new-channels)) + |=(nest:c [ship kind name]) + inflate-io + :: + %channel-migration-pins + ?> =(our src):bowl + =+ !<(new-pins=(list nest:c) q.cage.rail) + cor + :: + %negotiate-notification + :: during migration, references to chat msgs were changed. we want to + :: notify channel hosts about these edits, but not before they themselves + :: have migrated (lest we risk front-running their internal migration + :: pokes, causing our edits to fail). + :: a version negotiation notification guarantees that they have migrated, + :: so based off that we trigger the editing of our messages that changed. + :: (see also %*-migrate-refs poke handling in the old agents.) + :: + ?> =(our src):bowl + =+ !<([match=? =gill:gall] q.cage.rail) + ?. match + cor + ?. =(%channels-server q.gill) + cor + =* host p.gill + ?~ pend=(~(get by pending-ref-edits) host) + cor + =. pending-ref-edits + (~(del by pending-ref-edits) host) + %- emil + %+ murn ~(tap by u.pend) + |= [=kind:c name=term] + ^- (unit card) + ::NOTE to migrate other olds agents (heap, diary), use 828f5ed or earlier + ?. ?=(%chat kind) ~ + %- some + :+ %pass /migrate + :+ %agent [our.bowl %chat] + :+ %poke %unsafe + [%chat-migrate-refs !>([host name])] + == == ++ toggle-post |= toggle=post-toggle:c @@ -1097,7 +988,7 @@ %hide (~(put in hidden-posts) id-post.toggle) %show (~(del in hidden-posts) id-post.toggle) == - (give %fact ~[/ /v0 /v1] toggle-post+!>(toggle)) + (give %fact ~[/ /v0 /v1] toggle-post+toggle) :: :: ++ run-import @@ -1118,7 +1009,7 @@ =. v-channels (~(uni by v-channels:bak) v-channels) =. voc (~(uni by voc:bak) voc) =. hidden-posts (~(uni in hidden-posts:bak) hidden-posts) - (emil (prod-next:imp [our dap]:bowl)) + (emil (turn (prod-next:imp [our dap]:bowl) exit:guardian)) == ++ watch |= =(pole knot) @@ -1194,7 +1085,7 @@ ?~(q.plan / /(scot %ud u.q.plan)) :: ++ take-said - |= [=nest:c =plan:c =sign:agent:gall] + |= [=nest:c =plan:c =sign:guardian] ~> %spin.['take-said'] =/ =path (said-path nest plan) ^+ cor @@ -1204,7 +1095,7 @@ %- (slog leaf+"Preview failed" u.p.sign) :: treat subscription failures as if we received a %channel-denied :: - $(sign [%fact %channel-denied !>(~)]) + $(sign [%fact %channel-denied ~]) :: %kick ?: (~(has by voc) nest plan) @@ -1217,20 +1108,20 @@ =/ had=(unit said:c) (~(gut by voc) [nest plan] ~) =/ got=(unit said:c) - ?+ p.cage.sign ~|(funny-mark+p.cage.sign !!) + ?+ -.rail.sign ~|(funny-mark+-.rail.sign !!) %channel-denied ~ :: %channel-said %- some %- v10:said:v9:ccv %- v9:said:v8:ccv - (v8:said:v7:ccv !<(said:v7:cv q.cage.sign)) + (v8:said:v7:ccv p.rail.sign) :: %channel-said-1 - `(v10:said:v9:ccv (v9:said:v8:ccv !<(said:v8:cv q.cage.sign))) + `(v10:said:v9:ccv (v9:said:v8:ccv p.rail.sign)) :: - %channel-said-2 `(v10:said:v9:ccv !<(said:v9:cv q.cage.sign)) - %channel-said-3 ``said:v10:cv`!<(said:v10:v9:cv q.cage.sign) + %channel-said-2 `(v10:said:v9:ccv p.rail.sign) + %channel-said-3 ``said:v10:cv`p.rail.sign == =. voc %+ ~(put by voc) [nest plan] @@ -1241,25 +1132,25 @@ =. cor %^ give %fact ~[path v0+path v1+path] - ?~ got cage.sign - channel-said+!>((v7:said:v9:ccv (v9:said:v10:ccv u.got))) + ?~ got rail.sign + channel-said+(v7:said:v9:ccv (v9:said:v10:ccv u.got)) =/ suffix=^path [%said (scot %p src.bowl) (tail path)] =. cor %^ give %fact ~[v2+path v3+suffix] - ?~ got cage.sign - channel-said-1+!>((v8:said:v9:ccv (v9:said:v10:ccv u.got))) + ?~ got rail.sign + channel-said-1+(v8:said:v9:ccv (v9:said:v10:ccv u.got)) =. cor %^ give %fact ~[v4+suffix] - ?~ got cage.sign - channel-said-2+!>((v9:said:v10:ccv u.got)) + ?~ got rail.sign + channel-said-2+(v9:said:v10:ccv u.got) =. cor %^ give %fact ~[v5+suffix] - ?~ got cage.sign - channel-said-3+!>(`said:v10:cv`u.got) + ?~ got rail.sign + channel-said-3+`said:v10:cv`u.got :: they all got their responses, so kick their subscriptions, :: and make sure we leave ours so we can do another fetch later. :: (we don't know what agent we subscribed to, but it's fine, we can @@ -1275,12 +1166,12 @@ == :: ++ agent - |= [=(pole knot) =sign:agent:gall] + |= [=(pole knot) =sign:guardian] ~> %spin.['agent'] ^+ cor ~| `wire`pole =? cor !=(/logs pole) - (emit (tell:plog %dbug ~[>[src.bowl (spat pole) -.sign]<] ~)) + (emit (tell-plog %dbug ~[>[src.bowl (spat pole) -.sign]<] ~)) ?+ pole ~|(bad-agent-wire+pole !!) ~ cor [%pimp ~] cor @@ -1331,7 +1222,8 @@ ((slog tank u.p.sign) cor) :: %fact - (take-groups !<(=r-groups:v9:gv q.cage.sign)) + ?> ?=(%group-response-1 -.rail.sign) ::REVIEW + (take-groups p.rail.sign) == :: [%migrate ~] @@ -1346,7 +1238,7 @@ ?+ -.sign !! %kick cor %fact - =. cor (give %fact ~[pole] cage.sign) + =. cor (give %fact ~[pole] rail.sign) (emit %pass pole %agent [host.pole %channels] %leave ~) :: %watch-ack @@ -1391,7 +1283,8 @@ ++ peek |= =(pole knot) ~> %spin.['peek'] - ^- (unit (unit cage)) + %- peek:unguard:guardian + ^- (unit (unit rail)) ?> ?=(^ pole) =? +.pole !?=([?(%v0 %v1 %v2 %v3 %v4 %v5 %v6) *] +.pole) [%v0 +.pole] @@ -1400,53 +1293,53 @@ :: /x/v/channels: get unversioned channels :: [%x ?(%v0 %v1) %channels ~] - ``channels+!>(`channels-0:v7:cv`(uv-channels-1:utils v-channels)) + ``channels+`channels-0:v7:cv`(uv-channels-1:utils v-channels) :: [%x %v2 %channels full=?(~ [%full ~])] - ``channels-2+!>(`channels:v1:cv`(uv-channels:utils v-channels ?=(^ full.pole))) + ``channels-2+`channels:v1:cv`(uv-channels:utils v-channels ?=(^ full.pole)) :: [%x %v3 %v-channels ~] =+ v-channels-9=(v9:v-channels:v10:ccv v-channels) - ``noun+!>(`v-channels:v8:cv`(v8:v-channels:v9:ccv v-channels-9)) + ``noun+`v-channels:v8:cv`(v8:v-channels:v9:ccv v-channels-9) :: [%x %v4 %v-channels ~] - ``noun+!>((v9:v-channels:v10:ccv v-channels)) + ``noun+(v9:v-channels:v10:ccv v-channels) :: [%x %v5 %v-channels ~] - ``noun+!>(`v-channels:v10:cv`v-channels) + ``noun+`v-channels:v10:cv`v-channels :: [%x %v3 %channels full=?(~ [%full ~])] - ``channels-3+!>(`channels:v8:cv`(uv-channels-2:utils v-channels ?=(^ full.pole))) + ``channels-3+`channels:v8:cv`(uv-channels-2:utils v-channels ?=(^ full.pole)) :: [%x %v4 %channels full=?(~ [%full ~])] - ``channels-4+!>(`channels:v9:cv`(uv-channels-3:utils v-channels ?=(^ full.pole))) + ``channels-4+`channels:v9:cv`(uv-channels-3:utils v-channels ?=(^ full.pole)) :: [%x %v5 %channels full=?(~ [%full ~])] - ``channels-5+!>(`channels:v10:cv`(uv-channels-4:utils v-channels ?=(^ full.pole))) + ``channels-5+`channels:v10:cv`(uv-channels-4:utils v-channels ?=(^ full.pole)) :: :: /x/v/init: get unreads and unversioned channels :: [%x ?(%v0 %v1) %init ~] - ``noun+!>([unreads (uv-channels:utils v-channels |)]) + ``noun+[unreads (uv-channels:utils v-channels |)] :: [%x %v2 %init ~] - ``noun+!>([unreads (uv-channels:utils v-channels |)]) + ``noun+[unreads (uv-channels:utils v-channels |)] :: [%x %v3 %init ~] =/ init [(uv-channels:utils v-channels |) hidden-posts] - ``noun+!>(`[channels:v1:cv (set id-post:c)]`init) + ``noun+`[channels:v1:cv (set id-post:c)]`init :: [%x %v4 %init ~] =/ init [(uv-channels-2:utils v-channels |) hidden-posts] - ``noun+!>(`[channels:v8:cv (set id-post:c)]`init) + ``noun+`[channels:v8:cv (set id-post:c)]`init :: [%x %v5 %init ~] =/ init [(uv-channels-3:utils v-channels |) hidden-posts] - ``noun+!>(`[channels:v9:cv (set id-post:c)]`init) + ``noun+`[channels:v9:cv (set id-post:c)]`init :: [%x %v6 %init ~] =/ init [(uv-channels-4:utils v-channels |) hidden-posts] - ``noun+!>(`[channels:v10:cv (set id-post:c)]`init) + ``noun+`[channels:v10:cv (set id-post:c)]`init :: [%x ver=?(%v5 %v6) %changes since=@ rest=*] =+ since=(slav %da since.pole) @@ -1461,17 +1354,17 @@ |= posts=(unit posts:c) ?~ posts ~ `(~(run by u.posts) (curr mind:c v9:post:v10:ccv)) - ``channel-changed-posts+!>(changes-9) + ``channel-changed-posts+changes-9 :: %v6 =/ changes-10=(map nest:c (unit posts:v10:cv)) changes - ``channel-changed-posts-1+!>(changes-10) + ``channel-changed-posts-1+changes-10 == :: [%count ~] ::REVIEW really necessary? :^ ~ ~ %json - !> ^- json + ^- json %- numb:enjs:format %- ~(rep by changes) |= [[* p=(unit posts:c)] sum=@ud] @@ -1495,30 +1388,30 @@ |= posts=(unit posts:c) ?~ posts ~ `(~(run by u.posts) (curr mind:c v9:post:v10:ccv)) - ``channel-changed-posts+!>(changes-9) + ``channel-changed-posts+changes-9 :: %v6 =/ changes-10=(map nest:c (unit posts:v10:cv)) changes - ``channel-changed-posts-1+!>(changes-10) + ``channel-changed-posts-1+changes-10 == :: :: - [%x ?(%v0 %v1) %hidden-posts ~] ``hidden-posts+!>(hidden-posts) - [%x ?(%v0 %v1) %unreads ~] ``channel-unreads+!>(unreads) + [%x ?(%v0 %v1) %hidden-posts ~] ``hidden-posts+hidden-posts + [%x ?(%v0 %v1) %unreads ~] ``channel-unreads+unreads [%x v=?(%v0 %v1 %v2 %v3 %v4 %v5) =kind:c ship=@ name=@ rest=*] =/ =ship (slav %p ship.pole) (ca-peek:(ca-abed:ca-core kind.pole ship name.pole) rest.pole v.pole) :: [%u ?(%v0 %v1 %v2 %v3 %v4 %v5) =kind:c ship=@ name=@ ~] =/ =ship (slav %p ship.pole) - ``loob+!>((~(has by v-channels) kind.pole ship name.pole)) + ``loob+(~(has by v-channels) kind.pole ship name.pole) :: [%x %v3 %said =kind:c host=@ name=@ %post time=@ reply=?(~ [@ ~])] =/ host=ship (slav %p host.pole) =/ =nest:c [kind.pole host name.pole] =/ =plan:c =,(pole [(slav %ud time) ?~(reply ~ `(slav %ud -.reply))]) =; output=(unit (unit said:v8:cv)) - ``noun+!>(output) + ``noun+output =/ said=(unit (unit said:c)) (~(get by voc) nest plan) ?~ said ~ ?~ u.said [~ ~] @@ -1529,7 +1422,7 @@ =/ =nest:c [kind.pole host name.pole] =/ =plan:c =,(pole [(slav %ud time) ?~(reply ~ `(slav %ud -.reply))]) =; output=(unit (unit said:v9:cv)) - ``noun+!>(output) + ``noun+output =/ said=(unit (unit said:c)) (~(get by voc) nest plan) ?~ said ~ ?~ u.said [~ ~] @@ -1540,7 +1433,7 @@ =/ =nest:c [kind.pole host name.pole] =/ =plan:c =,(pole [(slav %ud time) ?~(reply ~ `(slav %ud -.reply))]) =; output=(unit (unit said:v10:cv)) - ``noun+!>(output) + ``noun+output =/ said=(unit (unit said:c)) (~(get by voc) nest plan) ?~ said ~ ?~ u.said [~ ~] @@ -1635,28 +1528,28 @@ ?- ver %v2 :- %channel-heads - !> ^- channel-heads:v7:cv + ^- channel-heads:v7:cv %+ turn heads |= head=[=nest:c recency=time latest=(may:c post:c)] head(latest ((may-bind:utils v7:post:v10:ccv) latest.head)) :: %v3 :- %channel-heads-2 - !> ^- channel-heads:v8:cv + ^- channel-heads:v8:cv %+ turn heads |= head=[=nest:c recency=time latest=(may:c post:c)] head(latest ((may-bind:utils v8:post:v10:ccv) latest.head)) :: %v4 :- %channel-heads-3 - !> ^- channel-heads:v9:cv + ^- channel-heads:v9:cv %+ turn heads |= head=[=nest:c recency=time latest=(may:c post:c)] head(latest (mind:v9:cv latest.head v9:post:v10:ccv)) :: %v5 :- %channel-heads-4 - !> ^- channel-heads:v10:cv + ^- channel-heads:v10:cv heads == :: @@ -1668,14 +1561,14 @@ [%~.~ %cancel-retry rest=*] cor :: [%~.~ %retry rest=*] - =^ caz=(list card) subs + =^ caz=(list card:agent:gall) subs (~(handle-wakeup s [subs bowl]) pole) - (emil caz) + (emil (turn caz exit:guardian)) :: [?(%numbers %tombstones) kind=?(%chat %diary %heap) ship=@ name=@ ~] =/ host=ship (slav %p ship.pole) =. cor - (emit (tell:plog %dbug ~[>[(spat pole) %waking-up]<] ~)) + (emit (tell-plog %dbug ~[>[(spat pole) %waking-up]<] ~)) =/ =nest:c [kind.pole host name.pole] ?. (~(has by v-channels) nest) cor ?. (can-poke:neg bowl host %channels-server) @@ -1684,20 +1577,20 @@ [%pass pole %arvo %b %wait (add now.bowl duration)] =/ =tang ~[>[%cant-poke (spat pole) %fires-in `@dr`duration]<] - (emil wait (tell:plog %dbug tang ~) ~) + (emil wait (tell-plog %dbug tang ~) ~) ?- -.pole %numbers - =/ =cage [%noun !>([%send-sequence-numbers nest])] + =/ =rail [%noun [%send-sequence-numbers nest]] %- emil - :~ (tell:plog %dbug ~[>[%asking-numbers host nest]<] ~) - [%pass pole %agent [host %channels-server] %poke cage] + :~ (tell-plog %dbug ~[>[%asking-numbers host nest]<] ~) + [%pass pole %agent [host %channels-server] %poke rail] == :: %tombstones - =/ =cage [%noun !>([%send-tombstones nest])] + =/ =rail [%noun [%send-tombstones nest]] %- emil - :~ (tell:plog %dbug ~[>[%asking-tombstones host nest]<] ~) - [%pass pole %agent [host %channels-server] %poke cage] + :~ (tell-plog %dbug ~[>[%asking-tombstones host nest]<] ~) + [%pass pole %agent [host %channels-server] %poke rail] == == == @@ -1740,7 +1633,7 @@ ++ ca-core . ++ emit |=(=card ca-core(cor (^emit card))) ++ emil |=(caz=(list card) ca-core(cor (^emil caz))) - ++ give |=(=gift:agent:gall ca-core(cor (^give gift))) + ++ give |=(=gift:guardian ca-core(cor (^give gift))) ++ ca-perms ~(. perms:utils our.bowl now.bowl nest group.perm.channel) ++ safe-watch |= [=wire =dock =path] @@ -1766,7 +1659,7 @@ ++ ca-area `path`/[kind.nest]/(scot %p ship.nest)/[name.nest] ++ ca-sub-wire (weld ca-area /updates) ++ ca-give-unread - (give %fact ~[/unreads /v0/unreads /v1/unreads] channel-unread-update+!>([nest ca-unread])) + (give %fact ~[/unreads /v0/unreads /v1/unreads] channel-unread-update+[nest ca-unread]) :: ++ ca-activity =, activity @@ -1890,8 +1783,8 @@ %- emil %+ turn actions |= =action - =/ =cage activity-action+!>(action) - [%pass /activity/submit %agent [our.bowl %activity] %poke cage] + =/ =rail activity-action+action + [%pass /activity/submit %agent [our.bowl %activity] %poke rail] -- :: :: handle creating a channel @@ -1907,8 +1800,8 @@ =. meta.channel [0 meta.create] =. last-read.remark.channel now.bowl =. ca-core (send:ca-activity [%add %chan-init nest group.create] ~) - =/ =cage [%channel-command !>([%create create])] - (emit %pass (weld ca-area /create) %agent [our.bowl server] %poke cage) + =/ =rail [%channel-command [%create create]] + (emit %pass (weld ca-area /create) %agent [our.bowl server] %poke rail) :: :: handle joining a channel :: @@ -2065,13 +1958,13 @@ == == =. pending.channel new-pending - =/ =cage [%channel-command !>(command)] + =/ =rail [%channel-command command] :: NB: we must have already subscribed to something from this ship, :: so that we have negotiated a matching version. If we want to do :: anything in particular on a mismatched version, we can call :: +can-poke:neg. :: - (emit %pass ca-area %agent [ship.nest.command server] %poke cage) + (emit %pass ca-area %agent [ship.nest.command server] %poke rail) :: ++ ca-know-said |= =plan:c @@ -2088,8 +1981,8 @@ =. ca-core %^ give %fact ~ ?. (can-read:ca-perms src.bowl) - channel-denied+!>(~) - (said-1:utils nest plan posts.channel) + channel-denied+~ + unsafe+(said-1:utils nest plan posts.channel) ::TODO rail the lib? (give %kick ~ ~) :: ++ ca-said @@ -2103,11 +1996,11 @@ :: =; share=? ?. share - channel-denied+!>(~) + channel-denied+~ ?- version - %v5 (said-4:utils nest plan posts.channel) - %v4 (said-3:utils nest plan posts.channel) - ?(%v2 %v3) (said-2:utils nest plan posts.channel) + %v5 unsafe+(said-4:utils nest plan posts.channel) + %v4 unsafe+(said-3:utils nest plan posts.channel) + ?(%v2 %v3) unsafe+(said-2:utils nest plan posts.channel) == ?: (can-read:ca-perms src.bowl) & ?^ q.plan | ::NOTE expose/+grab-post doesn't support replies @@ -2151,7 +2044,7 @@ /[kind.nest]/[name.nest]/updates/(scot %da (fall tim *@da)) :: ++ ca-agent - |= [=wire =sign:agent:gall] + |= [=wire =sign:guardian] ~> %spin.['ca-agent'] ^+ ca-core =? last-updated ?=(%fact -.sign) @@ -2169,7 +2062,7 @@ == :: ++ ca-take-create - |= =sign:agent:gall + |= =sign:guardian ~> %spin.['ca-take-create'] ^+ ca-core ?- -.sign @@ -2188,10 +2081,10 @@ ca-core :: %fact - =* cage cage.sign - ?. =(%channel-update p.cage) - ~|(diary-strange-fact+p.cage !!) - =+ !<(=update:c q.cage) + =* rail rail.sign + ?. ?=(%channel-update -.rail) + ~|(diary-strange-fact+-.rail !!) + =/ =update:c p.rail =? meta.channel ?=(%create -.u-channel.update) [0 meta.u-channel.update] =. ca-core (ca-u-channels update) @@ -2201,7 +2094,7 @@ == :: ++ ca-take-update - |= =sign:agent:gall + |= =sign:guardian ~> %spin.['ca-take-update'] ^+ ca-core ?+ -.sign ca-core @@ -2212,15 +2105,15 @@ ca-core :: %fact - =* cage cage.sign - ?+ p.cage ~|(channel-strange-fact+p.cage !!) - %channel-logs (ca-apply-logs !<(log:c q.cage)) - %channel-update (ca-u-channels !<(update:c q.cage)) + =* rail rail.sign + ?+ -.rail ~|(channel-strange-fact+-.rail !!) + %channel-logs (ca-apply-logs p.rail) + %channel-update (ca-u-channels p.rail) == == :: ++ ca-take-checkpoint - |= =sign:agent:gall + |= =sign:guardian ~> %spin.['ca-take-checkpoint'] ^+ ca-core ?+ -.sign ca-core @@ -2232,15 +2125,15 @@ ca-core :: %fact - =* cage cage.sign - ?+ p.cage ~|(diary-strange-fact+p.cage !!) + =* rail rail.sign + ?+ -.rail ~|(diary-strange-fact+-.rail !!) %channel-checkpoint - (ca-ingest-checkpoint !<(u-checkpoint:c q.cage)) + (ca-ingest-checkpoint p.rail) == == :: ++ ca-take-backlog - |= =sign:agent:gall + |= =sign:guardian ~> %spin.['ca-take-backlog'] ^+ ca-core ?+ -.sign ca-core @@ -2252,10 +2145,10 @@ ca-core :: %fact - =* cage cage.sign - ?+ p.cage ~|(diary-strange-fact+p.cage !!) + =* rail rail.sign + ?+ -.rail ~|(diary-strange-fact+-.rail !!) %channel-checkpoint - (ca-ingest-backlog !<(u-checkpoint:c q.cage)) + (ca-ingest-backlog p.rail) == == :: @@ -2488,7 +2381,7 @@ %poke :: only meet authors who are persons :: - contact-action-0+!>([%heed (murn authors get-person-ship:utils)]) + contact-action-0+[%heed (murn authors get-person-ship:utils)] == ++ ca-u-reply |= [=id-post:c post=v-post:c =id-reply:c =u-reply:c] @@ -2610,31 +2503,31 @@ =. ca-core %^ give %fact ~[/v4 v4+ca-area] - channel-response-5+!>(r-channels-10) + channel-response-5+r-channels-10 =+ r-channel-9=(v9:r-channel:v10:ccv r-channel) =/ r-channels-9 [nest r-channel-9] =. ca-core %^ give %fact ~[/v3 v3+ca-area] - channel-response-4+!>(r-channels-9) + channel-response-4+r-channels-9 =. ca-core %^ give %fact ~[/v2 v2+ca-area] =/ rc=r-channels:v8:cv (v8:r-channels:v9:ccv r-channels-9) - channel-response-3+!>(rc) + channel-response-3+rc :: :: omit %meta response in previous versions ?: ?=(%meta -.r-channel-9) ca-core =. ca-core %^ give %fact ~[/v1 v1+ca-area] - channel-response-2+!>((v7:r-channels:v9:ccv r-channels-9)) + channel-response-2+(v7:r-channels:v9:ccv r-channels-9) =; r-simple=r-channels-simple-post:v7:cv %^ give %fact ~[/ ca-area /v0 v0+ca-area] - channel-response+!>(r-simple) + channel-response+r-simple =* r-channel r-channel-9 :- nest ?+ r-channel r-channel @@ -2739,23 +2632,23 @@ ++ ca-peek |= [=(pole knot) ver=?(%v0 %v1 %v2 %v3 %v4 %v5)] ~> %spin.['ca-peek'] - ^- (unit (unit cage)) + ^- (unit (unit rail)) ?+ pole [~ ~] :: [%posts rest=*] ?: ?=(%v0 ver) (ca-peek-posts-0 rest.pole) (ca-peek-posts rest.pole ver) :: - [%perm ~] ``channel-perm+!>(+.perm.channel) + [%perm ~] ``channel-perm++.perm.channel :: [%search %bounded kind=?(%text %mention) from=@ tries=@ nedl=@ ~] :+ ~ ~ =; =scam:v10:cv ?- ver - ?(%v0 %v1 %v2) channel-scam+!>(`scam:v7:cv`(v7:scam:v10:ccv scam)) - %v3 channel-scam-2+!>(`scam:v8:cv`(v8:scam:v10:ccv scam)) - %v4 channel-scam-3+!>(`scam:v9:cv`(v9:scam:v10:ccv scam)) - %v5 channel-scam-4+!>(`scam:v10:cv`scam) + ?(%v0 %v1 %v2) channel-scam+`scam:v7:cv`(v7:scam:v10:ccv scam) + %v3 channel-scam-2+`scam:v8:cv`(v8:scam:v10:ccv scam) + %v4 channel-scam-3+`scam:v9:cv`(v9:scam:v10:ccv scam) + %v5 channel-scam-4+`scam:v10:cv`scam == %^ ?- kind.pole %text text:tries-bound:ca-search @@ -2773,10 +2666,10 @@ :+ ~ ~ =; =scan:v10:cv ?- ver - ?(%v0 %v1 %v2) channel-scan+!>(`scan:v7:cv`(v7:scan:v10:ccv scan)) - %v3 channel-scan-2+!>(`scan:v8:cv`(v8:scan:v10:ccv scan)) - %v4 channel-scan-3+!>(`scan:v9:cv`(v9:scan:v10:ccv scan)) - %v5 channel-scan-4+!>(`scan:v10:cv`scan) + ?(%v0 %v1 %v2) channel-scan+`scan:v7:cv`(v7:scan:v10:ccv scan) + %v3 channel-scan-2+`scan:v8:cv`(v8:scan:v10:ccv scan) + %v4 channel-scan-3+`scan:v9:cv`(v9:scan:v10:ccv scan) + %v5 channel-scan-4+`scan:v10:cv`scan == %^ text:hits-bound:ca-search (slav %ud skip.pole) @@ -2787,10 +2680,10 @@ :+ ~ ~ =; =scan:v10:cv ?- ver - ?(%v0 %v1 %v2) channel-scan+!>(`scan:v7:cv`(v7:scan:v10:ccv scan)) - %v3 channel-scan-2+!>(`scan:v8:cv`(v8:scan:v10:ccv scan)) - %v4 channel-scan-3+!>(`scan:v9:cv`(v9:scan:v10:ccv scan)) - %v5 channel-scan-4+!>(`scan:v9:cv`(v9:scan:v10:ccv scan)) + ?(%v0 %v1 %v2) channel-scan+`scan:v7:cv`(v7:scan:v10:ccv scan) + %v3 channel-scan-2+`scan:v8:cv`(v8:scan:v10:ccv scan) + %v4 channel-scan-3+`scan:v9:cv`(v9:scan:v10:ccv scan) + %v5 channel-scan-4+`scan:v10:cv`scan ::REVIEW == %^ mention:hits-bound:ca-search (slav %ud skip.pole) @@ -2801,10 +2694,10 @@ ++ give-posts-0 |= [mode=?(%outline %post) ls=(list [time (may:c v-post:c)])] ~> %spin.['give-posts-0'] - ^- (unit (unit cage)) + ^- (unit (unit rail)) =/ posts=v-posts:c (gas:on-v-posts:c *v-posts:c ls) =; paged-posts=paged-simple-posts:v7:cv - ``channel-simple-posts+!>(paged-posts) + ``channel-simple-posts+paged-posts ?: =(0 (lent ls)) [*simple-posts:v7:cv ~ ~ 0] =/ posts=simple-posts:v7:cv ?: =(%post mode) (suv-posts-1:utils posts) @@ -2840,28 +2733,28 @@ ?- version %v1 =; =paged-posts:v1:cv - ``channel-posts+!>(paged-posts) + ``channel-posts+paged-posts :_ [newer older count] ?: =(%post mode) (uv-posts:utils posts) (uv-posts-without-replies:utils posts) :: %v2 =; =paged-posts:v7:cv - ``channel-posts-2+!>(paged-posts) + ``channel-posts-2+paged-posts :_ [newer older count] ?: =(%post mode) (uv-posts-1:utils posts) (uv-posts-without-replies-1:utils posts) :: %v3 =; =paged-posts:v8:cv - ``channel-posts-3+!>(paged-posts) + ``channel-posts-3+paged-posts :_ [newer older (wyt:on-v-posts:c posts.channel)] ?: =(%post mode) (uv-posts-2:utils posts) (uv-posts-without-replies-2:utils posts) :: %v4 =; =paged-posts:v9:cv - ``channel-posts-4+!>(paged-posts) + ``channel-posts-4+paged-posts =/ latest=@ud ?~ latest=(ram:on-v-posts:c posts.channel) 0 ?- -.val.u.latest @@ -2874,7 +2767,7 @@ :: %v5 =; =paged-posts:v10:cv - ``channel-posts-5+!>(paged-posts) + ``channel-posts-5+paged-posts =/ latest=@ud ?~ latest=(ram:on-v-posts:c posts.channel) 0 ?- -.val.u.latest @@ -2888,7 +2781,7 @@ ++ ca-peek-posts-0 |= =(pole knot) ~> %spin.['ca-peek-posts-0'] - ^- (unit (unit cage)) + ^- (unit (unit rail)) =* on on-v-posts:c ?+ pole [~ ~] [%newest count=@ mode=?(%outline %post) ~] @@ -2924,7 +2817,7 @@ =/ post (get:on posts.channel time) ?~ post ~ ?: ?=(%| -.u.post) `~ - ``channel-simple-post+!>((suv-post:utils +.u.post)) + ``channel-simple-post+(suv-post:utils +.u.post) :: [%post %id time=@ %replies rest=*] =/ time (slav %ud time.pole) @@ -2937,7 +2830,7 @@ ++ ca-peek-posts |= [=(pole knot) version=?(%v1 %v2 %v3 %v4 %v5)] ~> %spin.['ca-peek-posts'] - ^- (unit (unit cage)) + ^- (unit (unit rail)) =* on on-v-posts:c =* mo mo-v-posts:c ?+ pole [~ ~] @@ -2998,27 +2891,27 @@ %v1 =/ =paged-posts:v1:cv [(uv-posts:utils posts) newer older count] - ``channel-posts+!>(paged-posts) + ``channel-posts+paged-posts :: %v2 =/ =paged-posts:v7:cv [(uv-posts-1:utils posts) newer older count] - ``channel-posts-2+!>(paged-posts) + ``channel-posts-2+paged-posts :: %v3 =/ =paged-posts:v8:cv [(uv-posts-2:utils posts) newer older count] - ``channel-posts-3+!>(paged-posts) + ``channel-posts-3+paged-posts :: %v4 =/ =paged-posts:v9:cv [(uv-posts-3:utils posts) newer older latest count] - ``channel-posts-4+!>(paged-posts) + ``channel-posts-4+paged-posts :: %v5 =/ =paged-posts:v10:cv [(uv-posts-4:utils posts) newer older latest count] - ``channel-posts-5+!>(paged-posts) + ``channel-posts-5+paged-posts == :: walk both posts and logs, in chronological order, newest-first, :: until we accumulate the desired amount of results @@ -3091,11 +2984,11 @@ ?~ post ~ ?: ?=(%| -.u.post) `~ ?- version - %v1 ``channel-post+!>(`post:v1:cv`(uv-post:utils +.u.post)) - %v2 ``channel-post-2+!>(`post:v7:cv`(uv-post-1:utils +.u.post)) - %v3 ``channel-post-3+!>(`post:v8:cv`(uv-post-2:utils +.u.post)) - %v4 ``channel-post-4+!>(`post:v9:cv`(uv-post-3:utils +.u.post)) - %v5 ``channel-post-5+!>(`post:v10:cv`(uv-post-4:utils +.u.post)) + %v1 ``channel-post+`post:v1:cv`(uv-post:utils +.u.post) + %v2 ``channel-post-2+`post:v7:cv`(uv-post-1:utils +.u.post) + %v3 ``channel-post-3+`post:v8:cv`(uv-post-2:utils +.u.post) + %v4 ``channel-post-4+`post:v9:cv`(uv-post-3:utils +.u.post) + %v5 ``channel-post-5+`post:v10:cv`(uv-post-4:utils +.u.post) == :: [%post %id time=@ %replies rest=*] @@ -3109,40 +3002,40 @@ ++ ca-peek-replies-0 |= [parent-id=id-post:c replies=v-replies:c =(pole knot)] ~> %spin.['ca-peek-replies-0'] - ^- (unit (unit cage)) + ^- (unit (unit rail)) =* on on-v-replies:c ?+ pole [~ ~] [%all ~] - ``channel-simple-replies+!>((suv-replies-1:utils parent-id replies)) + ``channel-simple-replies+(suv-replies-1:utils parent-id replies) [%newest count=@ ~] =/ count (slav %ud count.pole) =/ reply-map (gas:on *v-replies:c (top:mo-v-replies:c replies count)) - ``channel-simple-replies+!>((suv-replies-1:utils parent-id reply-map)) + ``channel-simple-replies+(suv-replies-1:utils parent-id reply-map) :: [%older start=@ count=@ ~] =/ count (slav %ud count.pole) =/ start (slav %ud start.pole) =/ reply-map (gas:on *v-replies:c (bat:mo-v-replies:c replies `start count)) - ``channel-simple-replies+!>((suv-replies-1:utils parent-id reply-map)) + ``channel-simple-replies+(suv-replies-1:utils parent-id reply-map) :: [%newer start=@ count=@ ~] =/ count (slav %ud count.pole) =/ start (slav %ud start.pole) =/ reply-map (gas:on *v-replies:c (tab:on replies `start count)) - ``channel-simple-replies+!>((suv-replies-1:utils parent-id reply-map)) + ``channel-simple-replies+(suv-replies-1:utils parent-id reply-map) :: [%reply %id time=@ ~] =/ time (slav %ud time.pole) =/ reply (get:on-v-replies:c replies `@da`time) ?~ reply ~ ?: ?=(%| -.u.reply) `~ - ``channel-simple-reply+!>(`simple-reply:v7:cv`(suv-reply-1:utils parent-id +.u.reply)) + ``channel-simple-reply+`simple-reply:v7:cv`(suv-reply-1:utils parent-id +.u.reply) == :: ++ ca-peek-replies |= [parent-id=id-post:c replies=v-replies:c =(pole knot) version=?(%v1 %v2 %v3 %v4 %v5)] ~> %spin.['ca-peek-replies'] - ^- (unit (unit cage)) + ^- (unit (unit rail)) =* on on-v-replies:c ?: ?=([%reply %id time=@ ~] pole) =/ time (slav %ud time.pole) @@ -3150,22 +3043,22 @@ ?~ reply ~ ?: ?=(%| -.u.reply) `~ ?: ?=(%v1 version) - ``channel-reply+!>(`reply:v7:cv`(uv-reply-1:utils parent-id +.u.reply)) - ``channel-reply-2+!>(`reply:v8:cv`(uv-reply-2:utils parent-id +.u.reply)) + ``channel-reply+`reply:v7:cv`(uv-reply-1:utils parent-id +.u.reply) + ``channel-reply-2+`reply:v8:cv`(uv-reply-2:utils parent-id +.u.reply) =; vr=(unit v-replies:c) ?~ vr [~ ~] =* id parent-id ?- version %v1 - ``channel-replies+!>(`replies:v1:cv`(uv-replies:utils id u.vr)) + ``channel-replies+`replies:v1:cv`(uv-replies:utils id u.vr) %v2 - ``channel-replies-2+!>(`replies:v7:cv`(uv-replies-1:utils id u.vr)) + ``channel-replies-2+`replies:v7:cv`(uv-replies-1:utils id u.vr) %v3 - ``channel-replies-3+!>(`replies:v8:cv`(uv-replies-2:utils id u.vr)) + ``channel-replies-3+`replies:v8:cv`(uv-replies-2:utils id u.vr) %v4 - ``channel-replies-4+!>(`replies:v9:cv`(uv-replies-3:utils id u.vr)) + ``channel-replies-4+`replies:v9:cv`(uv-replies-3:utils id u.vr) %v5 - ``channel-replies-5+!>(`replies:v10:cv`(uv-replies-4:utils id u.vr)) + ``channel-replies-5+`replies:v10:cv`(uv-replies-4:utils id u.vr) == ?+ pole ~ [%all ~] `replies From d4b02013e0ffad32be973b239b1ed48098c3f0dc Mon Sep 17 00:00:00 2001 From: fang Date: Tue, 5 May 2026 16:51:33 +0200 Subject: [PATCH 09/20] channels-server: put on guardrails Stubs out some of the hooks stuff, whose types have been drifting. --- desk/app/channels-server.hoon | 165 ++++++++++++++++------------------ 1 file changed, 78 insertions(+), 87 deletions(-) diff --git a/desk/app/channels-server.hoon b/desk/app/channels-server.hoon index ddcf633b11..f82c68cb06 100644 --- a/desk/app/channels-server.hoon +++ b/desk/app/channels-server.hoon @@ -5,34 +5,14 @@ /- c=channels, cv=channels-ver, g=groups, gv=groups-ver, h=hooks, m=meta /+ ccv=channel-conv, utils=channel-utils, imp=import-aid, em=emojimart /+ default-agent, verb, dbug, + guardian, neg=negotiate, discipline, logs /+ hj=hooks-json :: -/% m-channel-checkpoint %channel-checkpoint -/% m-channel-denied %channel-denied -/% m-channel-logs %channel-logs -/% m-channel-said-1 %channel-said-1 -/% m-channel-said-2 %channel-said-2 -/% m-channel-update %channel-update -/% m-hook-channel-preview %hook-channel-preview -/% m-hook-full %hook-full -/% m-hook-response-0 %hook-response-0 -/% m-hook-template %hook-template -:: %- %- discipline :+ :: marks :: - :~ :+ %channel-checkpoint | -:!>(*vale:m-channel-checkpoint) - :+ %channel-denied | -:!>(*vale:m-channel-denied) - :+ %channel-logs | -:!>(*vale:m-channel-logs) - :+ %channel-said-1 | -:!>(*vale:m-channel-said-1) - :+ %channel-said-2 | -:!>(*vale:m-channel-said-2) - :+ %channel-update | -:!>(*vale:m-channel-update) - :+ %hook-channel-preview | -:!>(*vale:m-hook-channel-preview) - :+ %hook-full | -:!>(*vale:m-hook-full) - :+ %hook-response-0 | -:!>(*vale:m-hook-response-0) - :+ %hook-template | -:!>(*vale:m-hook-template) - == + discipline:guardian :: facts :: :~ [/$/$/checkpoint %channel-checkpoint ~] @@ -60,7 +40,8 @@ ^- agent:gall => |% - +$ card card:agent:gall + +$ card card:guardian + +$ rail rail:guardian +$ current-state $: %14 =v-channels:v10:cv @@ -77,6 +58,7 @@ log ~(. logs [our.bowl /logs]) cor ~(. +> [bowl ~ ~]) ++ on-init + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:init:cor @@ -85,6 +67,7 @@ ++ on-save !>(state) ++ on-load |= =vase + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(load:cor vase) @@ -92,6 +75,7 @@ :: ++ on-poke |= [=mark =vase] + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(poke:cor mark vase) @@ -99,6 +83,7 @@ :: ++ on-watch |= =path + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(watch:cor path) @@ -108,13 +93,16 @@ ++ on-leave on-leave:def ++ on-fail |= [=term =tang] + %- step:unguard:guardian ^- (quip card _this) %- (slog term tang) :_ this - [(fail:log term tang ~)]~ + [(exit:guardian (fail:log term tang ~))]~ :: ++ on-agent - |= [=wire =sign:agent:gall] + %- on-agent:guardian + |= [=wire =sign:guardian] + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(agent:cor wire sign) @@ -122,6 +110,7 @@ :: ++ on-arvo |= [=wire sign=sign-arvo] + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) @@ -135,7 +124,7 @@ ++ emil |=(caz=(list card) cor(cards (welp (flop caz) cards))) ++ emit-late |=(=card cor(cards-late [card cards-late])) ++ emil-late |=(caz=(list card) cor(cards-late (welp (flop caz) cards-late))) -++ give |=(=gift:agent:gall (emit %give gift)) +++ give |=(=gift:guardian (emit %give gift)) ++ log ~(. logs [our.bowl /logs]) ++ safe-watch |= [=wire =dock =path] @@ -150,7 +139,7 @@ =+ !<(old=versioned-state vase) =? old ?=(%0 -.old) (state-0-to-1 old) =? old ?=(%1 -.old) (state-1-to-2 old) - =? cor ?=(%2 -.old) (emit %pass /trim %agent [our.bowl %chat] %poke %chat-trim !>(~)) + =? cor ?=(%2 -.old) (emit %pass /trim %agent [our.bowl %chat] %poke %unsafe %chat-trim !>(~)) =? old ?=(%2 -.old) (state-2-to-3 old) =? old ?=(%3 -.old) (state-3-to-4 old) =? old ?=(%4 -.old) (state-4-to-5 old) @@ -464,11 +453,11 @@ ^+ cor =. cor %- emil - :~ [%pass /migrate %agent [our.bowl %chat] %poke %chat-migrate-server !>(~)] + :~ [%pass /migrate %agent [our.bowl %chat] %poke %unsafe %chat-migrate-server !>(~)] ::NOTE we do these here and not in /app/channels, because it's :: important that the server migration happens first, so that :: the client migration may successfully establish subscriptions. - [%pass /migrate/final %agent [our.bowl %chat] %poke %chat-migrate !>(~)] + [%pass /migrate/final %agent [our.bowl %chat] %poke %unsafe %chat-migrate !>(~)] == inflate-io :: @@ -493,15 +482,15 @@ [%send-sequence-numbers *] =+ ;;([%send-sequence-numbers =nest:c] q.vase) =. cor - (emit (tell:log %dbug ~[>[%got-poke %send-sequence-numbers nest]<] ~)) + (emit (exit:guardian (tell:log %dbug ~[>[%got-poke %send-sequence-numbers nest]<] ~))) ?~ can=(~(get by v-channels) nest) cor - =; =cage + =; =rail %- emil - :~ (tell:log %dbug ~[>[%sending-sequence-numbers src.bowl]<] ~) - [%pass /numbers %agent [src.bowl %channels] %poke cage] + :~ (exit:guardian (tell:log %dbug ~[>[%sending-sequence-numbers src.bowl]<] ~)) + [%pass /numbers %agent [src.bowl %channels] %poke rail] == :- %noun - !> :^ %sequence-numbers nest + :^ %sequence-numbers nest count.u.can ^- (list [id-post:c (unit @ud)]) %+ turn (tap:on-v-posts:c posts.u.can) @@ -510,15 +499,15 @@ :: [%send-tombstones *] =+ ;;([%send-tombstones =nest:c] q.vase) - =. cor (emit (tell:log %dbug ~[>[%got-poke %send-tombstones nest]<] ~)) + =. cor (emit (exit:guardian (tell:log %dbug ~[>[%got-poke %send-tombstones nest]<] ~))) ?~ can=(~(get by v-channels) nest) cor - =; =cage + =; =rail %- emil - :~ (tell:log %dbug ~[>[%sending-tombstones src.bowl]<] ~) - [%pass /tombstones %agent [src.bowl %channels] %poke cage] + :~ (exit:guardian (tell:log %dbug ~[>[%sending-tombstones src.bowl]<] ~)) + [%pass /tombstones %agent [src.bowl %channels] %poke rail] == :- %noun - !> :+ %tombstones nest + :+ %tombstones nest ^- (list [id-post:v9:cv tombstone:v9:cv]) %+ murn (tap:on-v-posts:c posts.u.can) |= [i=id-post:c p=(may:c v-post:c)] @@ -581,7 +570,7 @@ ~(has by hooks.hooks) =. order.hooks (~(put by order.hooks) nest.action seq) =/ =response:h [%order nest.action seq] - (give %fact ~[/v0/hooks] hook-response-0+!>(response)) + (give %fact ~[/v0/hooks] hook-response-0+response) :: %config ho-abet:(ho-configure:(ho-abed:ho-core id.action) +>.action) @@ -618,11 +607,11 @@ =/ =nest:c [i.path.i.ded our.bowl i.t.path.i.ded] ?. &((~(has by v-channels:bak) nest) !(~(has by v-channels) nest)) $(ded t.ded) - =/ =cage noun+!>([%channel-wake [i i.t]:path.i.ded]) + =/ =rail noun+[%channel-wake [i i.t]:path.i.ded] ::NOTE this assumes it was their %channels agent subscribing to us, :: which we actually cannot know. but a false positive here should :: be harmless. - =. cor (emit %pass /wake %agent [ship.i.ded %channels] %poke cage) + =. cor (emit %pass /wake %agent [ship.i.ded %channels] %poke rail) $(ded t.ded) :: if both the backup and our latest have a channel, keep only our :: version. we could do a "deep merge" but presently unclear how that @@ -630,7 +619,7 @@ :: wrt them. :: =. v-channels (~(uni by v-channels:bak) v-channels) - (emil (prod-next:imp [our dap]:bowl)) + (emil (turn (prod-next:imp [our dap]:bowl) exit:guardian)) == :: ++ watch @@ -642,19 +631,19 @@ [%v0 %hooks ~] cor :: [%v0 %hooks %full ~] - =. cor (give %fact ~ hook-full+!>(hooks)) + =. cor (give %fact ~ hook-full+hooks) (give %kick ~ ~) :: [%v0 %hooks %preview =kind:c name=@ ~] =/ cp=channel-preview:h (get-channel-hooks-preview kind.pole our.bowl name.pole) - =. cor (give %fact ~ hook-channel-preview+!>(cp)) + =. cor (give %fact ~ hook-channel-preview+cp) (give %kick ~ ~) :: [%v0 %hooks %template =kind:c name=@ ~] =/ =template:h (get-hook-template kind.pole our.bowl name.pole) - =. cor (give %fact ~ hook-template+!>(template)) + =. cor (give %fact ~ hook-template+template) (give %kick ~ ~) :: [=kind:c name=@ %create ~] @@ -700,7 +689,7 @@ == :: ++ agent - |= [=(pole knot) =sign:agent:gall] + |= [=(pole knot) =sign:guardian] ~> %spin.['agent'] ^+ cor ?+ pole ~|(bad-agent-wire+pole !!) @@ -737,7 +726,8 @@ ((slog tank u.p.sign) cor) :: %fact - (take-groups !<(r-groups:v9:gv q.cage.sign)) + ?> ?=(%group-response-1 -.rail.sign) + (take-groups p.rail.sign) == :: [%migrate ~] @@ -751,7 +741,7 @@ ?+ -.sign !! %poke-ack ?~ p.sign - (emit %pass /trim %agent [our.bowl %chat] %poke %chat-trim !>(~)) + (emit %pass /trim %agent [our.bowl %chat] %poke %unsafe %chat-trim !>(~)) %- (slog 'channels-server: migration poke failure' >wire< u.p.sign) cor == @@ -765,14 +755,15 @@ ++ peek |= =(pole knot) ~> %spin.['peek'] - ^- (unit (unit cage)) + %- peek:unguard:guardian + ^- (unit (unit rail)) =? +.pole !?=([%v0 *] +.pole) [%v0 +.pole] ?+ pole [~ ~] [%x %v0 %v-channels ~] - ``noun+!>(v-channels) + ``noun+v-channels [%x %v0 %hooks ~] - ``hook-full+!>(hooks) + ``hook-full+hooks == :: ++ arvo @@ -852,8 +843,8 @@ %+ turn ~(tap in ships) |= =ship =/ request=[nest:c flag:g] [nest flag] - =/ =cage [%channel-request-join !>(request)] - [%pass /request-join %agent [ship %channels] %poke cage] + =/ =rail [%channel-request-join request] + [%pass /request-join %agent [ship %channels] %poke rail] :: ++ size-limit 256.000 :: 256KB ++ ca-core @@ -862,7 +853,7 @@ ++ ca-core . ++ emit |=(=card ca-core(cor (^emit card))) ++ emil |=(caz=(list card) ca-core(cor (^emil caz))) - ++ give |=(=gift:agent:gall ca-core(cor (^give gift))) + ++ give |=(=gift:guardian ca-core(cor (^give gift))) ++ ca-perms ~(. perms:utils our.bowl now.bowl nest group.perm.channel) ++ ca-abet %_ cor @@ -881,8 +872,8 @@ ++ ca-watch-create =/ =update:c [now.bowl %create +.perm.channel +.meta.channel] =/ =path /[kind.nest]/[name.nest]/create - =/ =cage [%channel-update !>(update)] - (give %fact ~[path] cage) + =/ =rail [%channel-update update] + (give %fact ~[path] rail) :: ++ ca-watch-updates |= =@da @@ -891,7 +882,7 @@ ?. (can-read:ca-perms src.bowl) ~|(%permission-denied !!) =/ =log:c (lot:log-on:c log.channel `da ~) - =. ca-core (give %fact ~ %channel-logs !>(log)) + =. ca-core (give %fact ~ %channel-logs log) ca-core :: ++ ca-watch-checkpoint @@ -902,7 +893,7 @@ ~|(%permission-denied !!) =/ posts=v-posts:c (lot:on-v-posts:c posts.channel `from to) =/ chk=u-checkpoint:c -.channel(posts posts) - =. ca-core (give %fact ~ %channel-checkpoint !>(chk)) + =. ca-core (give %fact ~ %channel-checkpoint chk) (give %kick ~ ~) :: ++ ca-watch-checkpoint-page @@ -913,7 +904,7 @@ ~|(%permission-denied !!) =/ posts=v-posts:c (gas:on-v-posts:c *v-posts:c (bat:mo-v-posts:c posts.channel ~ n)) =/ chk=u-checkpoint:c -.channel(posts posts) - =. ca-core (give %fact ~ %channel-checkpoint !>(chk)) + =. ca-core (give %fact ~ %channel-checkpoint chk) (give %kick ~ ~) :: ++ ca-create @@ -935,9 +926,9 @@ == =. ca-core =/ =update:c [now.bowl %create +.perm.channel +.meta.channel] - =/ =cage [%channel-update !>(update)] + =/ =rail [%channel-update update] =/ =path /[kind.nest]/[name.nest]/create - =. ca-core (give %fact ~[path] cage) + =. ca-core (give %fact ~[path] rail) (give %kick ~[path] ~) =/ =channel:v2:gv :- [title description '' '']:new @@ -946,7 +937,7 @@ [group.new now.bowl %channel nest %add channel] =/ =dock [our.bowl %groups] =/ =wire (snoc ca-area %create) - (emit %pass wire %agent dock %poke group-action-3+!>(action)) + (emit %pass wire %agent dock %poke group-action-3+action) :: :: +can-nest: does the group exist, are we an admin :: @@ -1117,7 +1108,7 @@ 'post_id'^s+post-id 'react'^s+react-text == - (emit (tell:log %crit message metadata)) + (emit (exit:guardian (tell:log %crit message metadata))) ca-core =/ [update=? reacts=v-reacts:c] (ca-c-react reacts.u.post new) @@ -1150,7 +1141,7 @@ 'post_id'^s+post-id 'react'^s+react-text == - (emit (tell:log %crit message metadata)) + (emit (exit:guardian (tell:log %crit message metadata))) ca-core =^ update=(unit u-post:c) replies.u.post (ca-c-reply +.u.post c-reply.c-post) @@ -1298,7 +1289,7 @@ =/ paths ca-subscription-paths ?: =(~ paths) ca-core - (give %fact paths %channel-update !>(update)) + (give %fact paths %channel-update update) :: ++ ca-subscriptions ~> %spin.['ca-subscriptions'] @@ -1320,7 +1311,7 @@ =/ after (slaw %da i.t.t.t.path) ?~ after log.channel (lot:log-on:c log.channel after ~) - [%give %fact ~[path] %channel-logs !>(log)] + [%give %fact ~[path] %channel-logs log] :: ++ ca-revoke |= her=ship @@ -1337,8 +1328,8 @@ :: if we have sects, we need to delete them from writers =? ca-core !=(sects ~) =/ =c-channels:c [%channel nest %del-writers sects] - =/ =cage [%channel-command !>(c-channels)] - (emit %pass ca-area %agent [our.bowl dap.bowl] %poke cage) + =/ =rail [%channel-command c-channels] + (emit %pass ca-area %agent [our.bowl dap.bowl] %poke rail) :: if subs read permissions removed, kick %+ roll ~(tap in ca-subscriptions) |= [[=ship =path] ca=_ca-core] @@ -1366,8 +1357,8 @@ (~(dif in writers.perm.channel) sects) =? ca-core !=(missing ~) =/ =c-channels:c [%channel nest %del-writers missing] - =/ =cage [%channel-command !>(c-channels)] - (emit %pass ca-area %agent [our.bowl dap.bowl] %poke cage) + =/ =rail [%channel-command c-channels] + (emit %pass ca-area %agent [our.bowl dap.bowl] %poke rail) :: if subs read permissions removed, kick %+ roll ~(tap in ca-subscriptions) |= [[=ship =path] ca=_ca-core] @@ -1381,8 +1372,8 @@ =. ca-core %^ give %fact ~ ?. (can-read:ca-perms src.bowl) - channel-denied+!>(~) - (said-3:utils nest plan posts.channel) + channel-denied+~ + unsafe+(said-3:utils nest plan posts.channel) (give %kick ~ ~) -- ++ scry-path @@ -1416,7 +1407,7 @@ ++ ho-core . ++ emit |=(=card ho-core(cor (^emit card))) ++ emil |=(caz=(list card) ho-core(cor (^emil caz))) - ++ give |=(=gift:agent:gall ho-core(cor (^give gift))) + ++ give |=(=gift:guardian ho-core(cor (^give gift))) ++ ho-abet %_ cor hooks.hooks @@ -1531,7 +1522,7 @@ ++ ho-give-response |= =response:h ~> %spin.['ho-give-response'] - (give %fact ~[/v0/hooks] hook-response-0+!>(response)) + (give %fact ~[/v0/hooks] hook-response-0+response) -- ++ run-hooks |= [=event:h =nest:c default=cord] @@ -1644,28 +1635,28 @@ %channels :: Run channel effects after normal cards in the same event so the :: originating post update has time to commit/propagate first. - =/ =cage channel-action-2+!>(`a-channels:v10:cv`a-channels.effect) - (emit-late [%pass /hooks/effect %agent [our.bowl %channels] %poke cage]) + =/ =rail channel-action-2+`a-channels:v10:cv`a-channels.effect + (emit-late [%pass /hooks/effect %agent [our.bowl %channels] %poke rail]) :: %groups - =/ =cage group-action-4+!>(`a-groups:v7:gv`a-groups.effect) - (emit [%pass /hooks/effect %agent [our.bowl %groups] %poke cage]) + =/ =rail !! ::group-action-4+`a-groups:v7:gv`a-groups.effect ::REVIEW + (emit [%pass /hooks/effect %agent [our.bowl %groups] %poke rail]) :: %activity - =/ =cage activity-action+!>(action.effect) - (emit [%pass /hooks/effect %agent [our.bowl %activity] %poke cage]) + =/ =rail activity-action+action.effect + (emit [%pass /hooks/effect %agent [our.bowl %activity] %poke rail]) :: %dm - =/ =cage chat-dm-action+!>(action.effect) - (emit [%pass /hooks/effect %agent [our.bowl %chat] %poke cage]) + =/ =rail !! ::chat-dm-action+action.effect ::REVIEW + (emit [%pass /hooks/effect %agent [our.bowl %chat] %poke rail]) :: %club - =/ =cage chat-club-action+!>(action.effect) - (emit [%pass /hooks/effect %agent [our.bowl %chat] %poke cage]) + =/ =rail !! ::chat-club-action+action.effect ::REVIEW + (emit [%pass /hooks/effect %agent [our.bowl %chat] %poke rail]) :: %contacts - =/ =cage contacts-action-1+!>(action.effect) - (emit [%pass /hooks/effect %agent [our.bowl %contacts] %poke cage]) + =/ =rail !! ::contacts-action-1+action.effect ::REVIEW + (emit [%pass /hooks/effect %agent [our.bowl %contacts] %poke rail]) :: %wait =/ =wire /hooks/waiting/(scot %uv id.effect) From 5b1c41d4dcc9b64747879e4c51df55bf1c05d34f Mon Sep 17 00:00:00 2001 From: fang Date: Thu, 7 May 2026 23:42:14 +0200 Subject: [PATCH 10/20] groups: put on guardrails --- desk/app/groups.hoon | 317 ++++++++++++++++----------------------- desk/gen/rail.hoon | 29 ++++ desk/lib/rail.hoon | 5 + desk/mar/foreigns-2.hoon | 14 ++ 4 files changed, 178 insertions(+), 187 deletions(-) create mode 100644 desk/mar/foreigns-2.hoon diff --git a/desk/app/groups.hoon b/desk/app/groups.hoon index b10847690d..9fb1f9c52a 100644 --- a/desk/app/groups.hoon +++ b/desk/app/groups.hoon @@ -9,7 +9,8 @@ /- g=groups, gv=groups-ver, c=chat, d=channels, dv=channels-ver, s=story, activity /- meta -/+ default-agent, verb, dbug +/+ default-agent, verb, dbug, + guardian /+ gc=groups-conv, cu=channel-utils, v=volume, s=subscriber, imp=import-aid, logs, t=contacts /+ of @@ -17,81 +18,13 @@ :: performance, keep warm /+ groups-json /= create-thread /ted/group/create -/% m-group-create-thread %group-create-thread -/% m-group-ui-1 %group-ui-1 -:: -:: -/% m-noun %noun -/% m-group %group -/% m-group-1 %group-1 -/% m-group-2 %group-2 -/% m-groups %groups -/% m-groups-1 %groups-1 -/% m-groups-2 %groups-2 -/% m-groups-ui %groups-ui -/% m-groups-ui-1 %groups-ui-1 -/% m-groups-ui-2 %groups-ui-2 -/% m-group-changed-groups-1 %group-changed-groups-1 -/% m-group-changed-groups-2 %group-changed-groups-2 -/% m-group-preview %group-preview -/% m-group-preview-3 %group-preview-3 -/% m-group-previews %group-previews -/% m-group-previews-1 %group-previews-1 -/% m-group-update %group-update -/% m-group-log %group-log -/% m-group-token %group-token -/% m-channel-preview %channel-preview -/% m-channel-preview-1 %channel-preview-1 -/% m-group-response-1 %group-response-1 -/% m-group-action-3 %group-action-3 -/% m-gangs %gangs -/% m-foreign-1 %foreign-1 -/% m-foreigns-1 %foreigns-1 :: /* commit %txt /commit/txt :: %- %- discipline :+ :: marks :: - :~ :+ %noun & -:!>(*vale:m-noun) - :+ %group & -:!>(*vale:m-group) - :+ %group-1 & -:!>(*vale:m-group-1) - :+ %group-2 & -:!>(*vale:m-group-2) - :: - :+ %groups & -:!>(*vale:m-groups) - :+ %groups-1 & -:!>(*vale:m-groups-1) - :+ %groups-2 & -:!>(*vale:m-groups-2) - :: - :+ %groups-ui & -:!>(*vale:m-groups-ui) - :+ %groups-ui-1 & -:!>(*vale:m-groups-ui-1) - :+ %groups-ui-2 & -:!>(*vale:m-groups-ui-2) - :: - :+ %group-changed-groups-1 & -:!>(*vale:m-group-changed-groups-1) - :+ %group-changed-groups-2 & -:!>(*vale:m-group-changed-groups-2) - :: - :+ %group-preview & -:!>(*vale:m-group-preview) - :+ %group-preview & -:!>(*vale:m-group-preview) - :+ %group-preview-3 & -:!>(*vale:m-group-preview-3) - :: - :+ %group-previews & -:!>(*vale:m-group-previews) - :+ %group-previews-1 & -:!>(*vale:m-group-previews-1) - :: - :+ %group-update | -:!>(*vale:m-group-update) - :+ %group-log | -:!>(*vale:m-group-log) - :: - :+ %group-token & -:!>(*vale:m-group-token) - :: - :+ %channel-preview & -:!>(*vale:m-channel-preview) - :+ %channel-preview-1 & -:!>(*vale:m-channel-preview-1) - :: - :+ %group-response-1 & -:!>(*vale:m-group-response-1) - :+ %group-action-3 & -:!>(*vale:m-group-action-3) - :: - :+ %gangs & -:!>(*vale:m-gangs) - :: - :+ %foreign-1 & -:!>(*vale:m-foreign-1) - :+ %foreigns-1 & -:!>(*vale:m-foreigns-1) - == + discipline:guardian :: facts :: :~ [/server/groups/$/$/updates/$/$ %group-update %group-log ~] @@ -173,7 +106,8 @@ ^- agent:gall => |% - +$ card card:agent:gall + +$ card card:guardian + +$ rail rail:guardian +$ current-state $: %11 groups=net-groups:v9:gv @@ -197,6 +131,7 @@ log ~(. logs [our.bowl /logs]) cor ~(. +> [bowl ~]) ++ on-init + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:init:cor @@ -205,6 +140,7 @@ ++ on-save !>([state ~]) ++ on-load |= =vase + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(load:cor vase) @@ -212,12 +148,14 @@ :: ++ on-poke |= [=mark =vase] + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(poke:cor mark vase) [cards this] ++ on-watch |= =path + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(watch:cor path) @@ -228,19 +166,22 @@ ++ on-leave on-leave:def ++ on-fail |= [=term =tang] + %- step:unguard:guardian ^- (quip card _this) %- (slog term tang) :_ this - [(fail:log term tang ~)]~ + [(exit:guardian (fail:log term tang ~))]~ :: ++ on-agent |= [=wire =sign:agent:gall] + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(agent:cor wire sign) [cards this] ++ on-arvo |= [=wire sign=sign-arvo] + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) @@ -251,7 +192,7 @@ ++ cor . ++ emit |=(=card cor(cards [card cards])) ++ emil |=(caz=(list card) cor(cards (welp (flop caz) cards))) -++ give |=(=gift:agent:gall (emit %give gift)) +++ give |=(=gift:guardian (emit %give gift)) ++ server dap.bowl :: ++ submit-activity @@ -261,8 +202,8 @@ ?. .^(? %gu /(scot %p our.bowl)/activity/(scot %da now.bowl)/$) cor %- emit - =/ =cage activity-action+!>(`action:activity`action) - [%pass /activity/submit %agent [our.bowl %activity] %poke cage] + =/ =rail activity-action+`action:activity`action + [%pass /activity/submit %agent [our.bowl %activity] %poke rail] :: |l: logging core :: ++ l @@ -271,6 +212,7 @@ |= [desc=term =tang] ~> %spin.['fail'] =/ =card + %- exit:guardian (~(fail logs our.bowl /logs) desc tang deez) (emit card) :: @@ -278,6 +220,7 @@ |= [vol=volume:logs =echo:logs] ~> %spin.['tell'] =/ =card + %- exit:guardian (~(tell logs our.bowl /logs) vol echo deez) (emit card) :: +deez: log message details @@ -583,8 +526,8 @@ =/ pax=path /http-response/[id] =/ pay=simple-payload:http [[307 ['location' '/apps/groups/']~] ~] %- emil - :~ [%give %fact ~[pax] %http-response-header !>(response-header.pay)] - [%give %fact ~[pax] %http-response-data !>(data.pay)] + :~ [%give %fact ~[pax] [%unsafe %http-response-header !>(response-header.pay)]] + [%give %fact ~[pax] [%unsafe %http-response-data !>(data.pay)]] [%give %kick ~[pax] ~] == == @@ -671,16 +614,16 @@ =/ wire /groups =/ dock [our.bowl dap.bowl] =/ =c-groups:g [%group flag [%channel nest %del-readers readers.channel]] - =/ cage group-command+!>(c-groups) - [%pass wire %agent dock %poke cage] + =/ =rail group-command+c-groups + [%pass wire %agent dock %poke rail] ^- card =/ =path (welp (channels-scry nest) /perm/noun) =/ perms .^(perm:d %gx path) =/ =c-channels:d [%channel nest %del-writers writers.perms] =/ =wire /channels/command =/ =dock [our.bowl %channels-server] - =/ =cage channel-command+!>(c-channels) - [%pass wire %agent dock %poke cage] + =/ =rail channel-command+c-channels + [%pass wire %agent dock %poke rail] core :: +init: initialize agent ++ init @@ -702,9 +645,9 @@ %+ roll ~(tap by wex.bowl) |= [[[=wire =dock] *] =_cor] ?. ?=([%epic ~] wire) cor - =^ caz=(list card) subs.cor + =^ caz=(list card:agent:gall) subs.cor (~(unsubscribe s [subs bowl]) wire dock) - (emil:cor caz) + (emil:cor (turn caz exit:guardian)) =? old ?=(%4 -.old) (state-4-to-5 old) =? old ?=(%5 -.old) (state-5-to-6 old) =^ caz-6-to-7=(list card) old @@ -716,9 +659,9 @@ :: =? cor ?=(%8 -.old) =/ =dock [our.bowl %contacts] - =^ caz=(list card) subs.cor + =^ caz=(list card:agent:gall) subs.cor (~(unsubscribe s [subs bowl]) /contact dock) - (emil:cor caz) + (emil:cor (turn caz exit:guardian)) =? old ?=(%8 -.old) (state-8-to-9 old) =^ caz-9-to-10=(list card) old ?. ?=(%9 -.old) [~ old] @@ -1085,12 +1028,12 @@ ?: (se-is-banned:se-core src.bowl) =/ =preview-update:v7:gv ~ =. cor - (emit %give %fact ~ group-preview-3+!>(preview-update)) + (emit %give %fact ~ group-preview-3+preview-update) (emit %give %kick ~ ~) se-abet:(se-watch:(se-abed:se-core [our.bowl name.pole]) /preview) =/ =preview-update:v7:gv ~ =. cor - (emit %give %fact ~ group-preview-3+!>(preview-update)) + (emit %give %fact ~ group-preview-3+preview-update) (emit %give %kick ~ ~) :: [%server %groups ship=@ name=@ rest=*] @@ -1141,17 +1084,17 @@ [%gangs %updates ~] ?>(from-self cor) :: :: deprecated - [%epic ~] (give %fact ~ epic+!>(okay:g)) + [%epic ~] (give %fact ~ epic+okay:g) == :: +server-watch-index: handle groups index watch request :: ++ server-watch-index ^+ cor - =; =cage - =. se-core (emit %give %fact ~ cage) + =; =rail + =. se-core (emit %give %fact ~ rail) (emit %give %kick ~ ~) :- %group-previews-1 - !> ^- previews:v7:gv + ^- previews:v7:gv %- ~(gas by *previews:v7:gv) %+ murn ~(tap by groups) |= [=flag:g =net:g =group:g] @@ -1186,8 +1129,8 @@ ++ peek |= =(pole knot) ~> %spin.['peek'] - ^- (unit (unit cage)) - |^ + %- peek:unguard:guardian + |^ ^- (unit (unit rail)) ?+ pole [~ ~] :: :: @@ -1219,7 +1162,7 @@ :- flag %- gang:v2:foreign:v7:gc (v7:foreign:v10:gc foreign) - ``noun+!>([groups-light-ui-2 gangs-2]) + ``noun+[groups-light-ui-2 gangs-2] :: [%x %v2 %init ~] =/ groups-light-ui-7=(map flag:v7:gv group-ui:v7:gv) @@ -1232,7 +1175,7 @@ -(member-count ~(wyt by seats.group)) =/ foreigns-8=foreigns:v8:gv (~(run by foreigns) v8:foreign:v10:gc) - ``noun+!>([groups-light-ui-7 foreigns-8]) + ``noun+[groups-light-ui-7 foreigns-8] :: [%x %v3 %init ~] =/ groups-light-ui-9=(map flag:v9:gv group-ui:v9:gv) @@ -1245,14 +1188,14 @@ -(member-count ~(wyt by seats.group)) =/ foreigns-8=foreigns:v8:gv (~(run by foreigns) v8:foreign:v10:gc) - ``noun+!>([groups-light-ui-9 foreigns-8]) + ``noun+[groups-light-ui-9 foreigns-8] :: [%x ver=?(%v0 %v1 %v2) %groups ~] =/ groups-9=groups:v9:gv (~(run by groups) tail) ?- ver.pole - %v0 ``groups+!>((~(run by groups-9) v2:group:v9:gc)) - %v1 ``groups-1+!>((~(run by groups-9) v5:group:v9:gc)) - %v2 ``groups-2+!>(groups-9) + %v0 ``groups+(~(run by groups-9) v2:group:v9:gc) + %v1 ``groups-1+(~(run by groups-9) v5:group:v9:gc) + %v2 ``groups-2+groups-9 == :: [%x ver=?(%v0 %v1 %v2) %light %groups ~] @@ -1261,24 +1204,24 @@ |= [=net:v9:gv =group:v9:gv] (drop-seats:group:v9:gc group our.bowl) ?- ver.pole - %v0 ``groups+!>((~(run by groups-9) v2:group:v9:gc)) - %v1 ``groups-1+!>((~(run by groups-9) v5:group:v9:gc)) - %v2 ``groups-2+!>(groups-9) + %v0 ``groups+(~(run by groups-9) v2:group:v9:gc) + %v1 ``groups-1+(~(run by groups-9) v5:group:v9:gc) + %v2 ``groups-2+groups-9 == :: [%x ver=?(%v0 %v1 %v2) %ui %groups ~] =/ net-groups-9=net-groups:v9:gv groups ?- ver.pole %v0 - =- ``groups-ui+!>(-) + =- ``groups-ui+- %- ~(urn by net-groups-9) |= [=flag:g =net:v9:gv =group:v9:gv] =/ =status:neg (read-status:neg bowl [p.flag %groups]) (group-ui:v2:group:v9:gc status net group) :: - %v1 ``groups-ui-1+!>((~(run by net-groups-9) group-ui:v5:group:v9:gc)) - %v2 ``groups-ui-2+!>((~(run by net-groups-9) group-ui:group:v9:gc)) + %v1 ``groups-ui-1+(~(run by net-groups-9) group-ui:v5:group:v9:gc) + %v2 ``groups-ui-2+(~(run by net-groups-9) group-ui:group:v9:gc) == :: :: deprecated @@ -1290,13 +1233,13 @@ =+ since=(slav %da since.pole) :^ ~ ~ %group-changed-groups-1 - !>((~(run by (changes since)) group-ui:v5:group:v9:gc)) + (~(run by (changes since)) group-ui:v5:group:v9:gc) :: [%x %v2 %changes since=@ rest=*] =+ since=(slav %da since.pole) :^ ~ ~ %group-changed-groups-2 - !>((~(run by (changes since)) group-ui:group:v9:gc)) + (~(run by (changes since)) group-ui:group:v9:gc) :: [%x ver=?(%v0 %v1 %v2) %groups ship=@ name=@ rest=*] =+ ship=(slav %p ship.pole) @@ -1307,13 +1250,13 @@ (go-peek:(go-abed:go-core ship name.pole) ver.pole rest.pole) ?- ver.pole %v0 - ``group+!>((v2:group:v9:gc +.u.net-group)) + ``group+(v2:group:v9:gc +.u.net-group) :: %v1 - ``group-1+!>((v5:group:v9:gc +.u.net-group)) + ``group-1+(v5:group:v9:gc +.u.net-group) :: %v2 - ``group-2+!>(`group:v9:gv`+.u.net-group) + ``group-2+`group:v9:gv`+.u.net-group == :: [%x ver=?(%v0 %v1 %v2) %ui %groups ship=@ name=@ rest=*] @@ -1330,13 +1273,13 @@ %v0 =/ =status:neg (read-status:neg bowl [p.flag %groups]) - ``group-ui+!>((group-ui:v2:group:v9:gc status u.net-group)) + ``group-ui+(group-ui:v2:group:v9:gc status u.net-group) :: %v1 - ``group-ui-1+!>((group-ui:v5:group:v9:gc u.net-group)) + ``group-ui-1+(group-ui:v5:group:v9:gc u.net-group) :: %v2 - ``group-ui-2+!>((group-ui:group:v9:gc u.net-group)) + ``group-ui-2+(group-ui:group:v9:gc u.net-group) == :: :: deprecated @@ -1345,18 +1288,18 @@ :: [%u %groups ship=@ name=@ ~] =+ ship=(slav %p ship.pole) - ``loob+!>((~(has by groups) [ship name.pole])) + ``loob+(~(has by groups) [ship name.pole]) :: [%x ver=?(%v1 %v2) %foreigns ~] ?- ver.pole %v1 =/ foreigns-8=foreigns:v8:gv (~(run by foreigns) v8:foreign:v10:gc) - ``foreigns-1+!>(foreigns-8) + ``foreigns-1+foreigns-8 :: %v2 =/ foreigns-10=foreigns:v10:gv foreigns - ``foreigns-2+!>(foreigns-10) + ``foreigns-2+foreigns-10 == :: [%x ver=?(%v1 %v2) %foreigns ship=@ name=@ ~] @@ -1365,10 +1308,10 @@ ?~ far=(~(get by foreigns) flag) [~ ~] ?- ver.pole %v1 - ``foreign-1+!>((v8:foreign:v10:gc u.far)) + ``foreign-1+(v8:foreign:v10:gc u.far) :: %v2 - ``foreign-2+!>(`foreign:v10:gv`u.far) + ``foreign-2+`foreign:v10:gv`u.far == == ++ changes @@ -1495,7 +1438,7 @@ %fact :: we use the same subscription path for client and agent subscriptions. :: here we only process the most recent mark coming from the - :: channel host. + :: channel host. :: ?. =(p.cage.sign %channel-preview-1) cor =+ !<(=channel-preview:v7:gv q.cage.sign) @@ -1512,7 +1455,7 @@ =/ preview-7=channel-preview:v7:gv channel-preview =/ path-1=path /v1/channels/[p.nest]/(scot %p p.q.nest)/[q.q.nest]/preview - =. cor (emit %give %fact ~[path-1] channel-preview-1+!>(preview-7)) + =. cor (emit %give %fact ~[path-1] channel-preview-1+preview-7) =. cor (emit %give %kick ~[path-1] ~) cor :: @@ -1524,9 +1467,9 @@ [%~.~ %cancel-retry rest=*] cor :: [%~.~ %retry rest=*] - =^ caz=(list card) subs + =^ caz=(list card:agent:gall) subs (~(handle-wakeup s [subs bowl]) pole) - (emil caz) + (emil (turn caz exit:guardian)) :: :: initialize .active-channels in $group :: @@ -1692,9 +1635,9 @@ |= delay=? ^+ cor ?: (~(has by wex.bowl) wire dock) cor - =^ caz=(list card) subs + =^ caz=(list card:agent:gall) subs (~(subscribe s [subs bowl]) wire dock path delay) - (emil caz) + (emil (turn caz exit:guardian)) :: +eager-leave: eagerly unsubscribe from a path :: :: deletes the subscription entry from wex.bowl @@ -1706,9 +1649,9 @@ ~> %spin.['eager-leave'] ^+ cor =. wex.bowl (~(del by wex.bowl) wire dock) - =^ caz=(list card) subs + =^ caz=(list card:agent:gall) subs (~(unsubscribe s [subs bowl]) wire dock) - (emil caz) + (emil (turn caz exit:guardian)) :: ++ watch-channels (safe-watch /channels [our.bowl %channels] /v1) @@ -1809,7 +1752,7 @@ :: ++ se-core . ++ emit |=(=card se-core(cor cor(cards [card cards]))) - ++ give |=(=gift:agent:gall (emit %give gift)) + ++ give |=(=gift:guardian (emit %give gift)) :: +se-abed: init :: ++ se-abed @@ -1905,26 +1848,26 @@ =/ =wire (weld se-area /invite/send/(scot %p ship)) =/ =a-foreigns:v9:gv [%invite invite] - [%pass wire %agent [ship dap.bowl] %poke group-foreign-2+!>(a-foreigns)] + [%pass wire %agent [ship dap.bowl] %poke group-foreign-2+a-foreigns] ++ send-old-invite |= [=ship =invite:v7:gv] ~> %spin.['send-old-invite'] =/ =wire (weld se-area /invite/send/(scot %p ship)/old) =/ =a-foreigns:v7:gv [%invite invite] - [%pass wire %agent [ship dap.bowl] %poke group-foreign-1+!>(a-foreigns)] + [%pass wire %agent [ship dap.bowl] %poke group-foreign-1+a-foreigns] ++ revoke-invite |= [=ship tok=(unit token:g)] ~> %spin.['revoke-invite'] =/ =wire (weld se-area /invite/revoke/(scot %p ship)) =/ =a-foreigns:v9:gv [%revoke flag tok] - [%pass wire %agent [ship dap.bowl] %poke group-foreign-2+!>(a-foreigns)] + [%pass wire %agent [ship dap.bowl] %poke group-foreign-2+a-foreigns] ++ reject-ask |= =ship ~> %spin.['reject-ask'] =/ =wire (weld se-area /ask/reject/(scot %p ship)) =/ =a-foreigns:v9:gv [%reject flag] - [%pass wire %agent [ship dap.bowl] %poke group-foreign-2+!>(a-foreigns)] + [%pass wire %agent [ship dap.bowl] %poke group-foreign-2+a-foreigns] -- :: +se-is-joined: check if the ship has already joined the group :: @@ -1991,7 +1934,7 @@ se-admin-subscription-paths se-subscription-paths ?: =(~ paths) se-core - (give %fact paths group-update+!>(update)) + (give %fact paths group-update+update) :: +se-c-create: create a group :: ++ se-c-create @@ -2568,10 +2511,10 @@ (~(del by requests.admissions.group.se-core) ship) =^ tok=(unit token:g) se-core (se-c-entry-token:se-core %add [personal+ship ~ ~ |]) - =/ =cage group-token+!>(tok) + =/ =rail group-token+tok =/ =path (weld se-area /ask/(scot %p ship)) =. se-core - (give:se-core %fact ~[path] cage) + (give:se-core %fact ~[path] rail) (give:se-core %kick ~[path] ~) (se-update [%entry %ask %del reqs]) :: @@ -2710,7 +2653,7 @@ ?~ update=(ram:log-on:g log) now.bowl -.u.update =/ =update:g [time %create group] - (give %fact paths group-update+!>(update)) + (give %fact paths group-update+update) :: %del-roles =. seats.group @@ -2801,7 +2744,7 @@ |= [=ship ivl=(list ship) =_se-core] ?. (can-poke:neg bowl ship %groups) =. se-core - (emit:se-core (initiate:neg [ship dap.bowl])) + (emit:se-core (exit:guardian (initiate:neg [ship dap.bowl]))) :: retry .retry times with doubling .delay :: =+ delay=~h1 @@ -2899,7 +2842,7 @@ ?~ update=(ram:log-on:g log) now.bowl -.u.update =/ =update:g [time %create group] - (give %fact paths group-update+!>(update)) + (give %fact paths group-update+update) :: %del-admin =. admins.group (~(dif in admins.group) roles) @@ -3158,14 +3101,14 @@ =. invited.admissions.group ~ :: clear .active-channels, as this is updated locally =. active-channels.group ~ - (give %fact ~ group-log+!>(`log:g`[now.bowl^[%create group] ~ ~])) + (give %fact ~ group-log+`log:g`[now.bowl^[%create group] ~ ~]) :: =/ =log:g (lot:log-on:g log `da ~) :: filter out admin updates :: =? log !(se-is-admin ship) (se-log-exclude log se-is-admin-update) - (give %fact ~ group-log+!>(log)) + (give %fact ~ group-log+log) :: +se-log-exclude: exclusively filter update log :: ++ se-log-exclude @@ -3206,7 +3149,7 @@ ?. allow ~ `se-preview =. se-core - (give %fact ~ group-preview-3+!>(`preview-update:v7:gv`preview-update)) + (give %fact ~ group-preview-3+`preview-update:v7:gv`preview-update) (give %kick ~ ~) :: +se-preview: the group preview :: @@ -3227,7 +3170,7 @@ :: prevent inviting banned =^ tok=(unit token:g) se-core (se-c-entry-token %add [personal+ship ~ ~ &]) - =. se-core (give %fact ~ group-token+!>(tok)) + =. se-core (give %fact ~ group-token+tok) (give %kick ~ ~) :: +se-watch-ask: handle a group ask request :: @@ -3240,7 +3183,7 @@ se-core :: for a public group we send back an null token :: - =. se-core (give %fact ~ group-token+!>(~)) + =. se-core (give %fact ~ group-token+~) (give %kick ~ ~) :: +se-agent: handle server signs :: @@ -3392,21 +3335,21 @@ =/ =wire (weld go-area /invite/send/(scot %p ship)) =/ =a-foreigns:v8:gv [%invite invite] - [%pass wire %agent [ship dap.bowl] %poke group-foreign-2+!>(a-foreigns)] + [%pass wire %agent [ship dap.bowl] %poke group-foreign-2+a-foreigns] ++ send-old-invite |= [=ship =invite:v7:gv] ~> %spin.['send-old-invite'] =/ =wire (weld go-area /invite/send/(scot %p ship)/old) =/ =a-foreigns:v7:gv [%invite invite] - [%pass wire %agent [ship dap.bowl] %poke group-foreign-1+!>(a-foreigns)] + [%pass wire %agent [ship dap.bowl] %poke group-foreign-1+a-foreigns] ++ revoke-invite |= [=ship tok=(unit token:g)] ~> %spin.['revoke-invite'] =/ =wire (weld go-area /invite/revoke/(scot %p ship)) =/ =a-foreigns:v8:gv [%revoke flag tok] - [%pass wire %agent [ship dap.bowl] %poke group-foreign-2+!>(a-foreigns)] + [%pass wire %agent [ship dap.bowl] %poke group-foreign-2+a-foreigns] ++ request-token |= =ship ~> %spin.['request-token'] @@ -3421,7 +3364,7 @@ ^- card =/ =wire (weld go-area /command/leave) =/ =dock [p.flag server] - [%pass wire %agent dock %poke group-command+!>(`c-groups:g`[%leave flag])] + [%pass wire %agent dock %poke group-command+`c-groups:g`[%leave flag]] :: ++ leave-channels |= nests=(list nest:g) @@ -3435,9 +3378,9 @@ ~ =/ =dock [our.bowl %channels] =/ action=a-channels:v9:dv [%channel nes %leave ~] - =/ =cage channel-action-1+!>(action) + =/ =rail channel-action-1+action =/ =wire (snoc go-area %leave-channels) - `[%pass wire %agent dock %poke cage] + `[%pass wire %agent dock %poke rail] :: ++ join-channels |= nests=(list nest:g) @@ -3451,9 +3394,9 @@ ~ =/ =dock [our.bowl %channels] =/ action=a-channels:v9:dv [%channel nes %join flag] - =/ =cage channel-action-1+!>(action) + =/ =rail channel-action-1+action =/ =wire (snoc go-area %join-channels) - `[%pass wire %agent dock %poke cage] + `[%pass wire %agent dock %poke rail] :: ++ go-wake-members ~> %spin.['go-wake-members'] @@ -3463,8 +3406,8 @@ |= who=ship ^- card =/ =wire (snoc go-area %wake) - =/ =cage noun+!>([%group-wake flag]) - [%pass wire %agent [who dap.bowl] %poke cage] + =/ =rail noun+[%group-wake flag] + [%pass wire %agent [who dap.bowl] %poke rail] -- :: +go-has-sub: check if we are subscribed to the group :: @@ -3663,8 +3606,8 @@ ~> %spin.['go-send-command'] ^+ go-core =/ =^wire (weld go-area wire) - =/ =cage group-command+!>(`c-groups:g`[%group flag c-group]) - (emit %pass wire %agent [p.flag server] %poke cage) + =/ =rail group-command+`c-groups:g`[%group flag c-group] + (emit %pass wire %agent [p.flag server] %poke rail) :: +go-a-navigation: process navigation action :: ++ go-a-navigation @@ -4584,7 +4527,7 @@ :: =/ r-groups-9=r-groups:v9:gv [flag r-group] =/ v1-paths ~[/v1/groups [%v1 go-area]] - =. cor (give %fact v1-paths group-response-1+!>(r-groups-9)) + =. cor (give %fact v1-paths group-response-1+r-groups-9) :: v0 backcompat :: =/ diffs-2=(list diff:v2:gv) @@ -4593,14 +4536,14 @@ %+ roll diffs-2 |= [=diff:v2:gv =_cor] =/ action-2=action:v2:gv [flag now.bowl diff] - (give:cor %fact ~[/groups/ui] group-action-3+!>(action-2)) + (give:cor %fact ~[/groups/ui] group-action-3+action-2) go-core :: +go-peek: handle group scry request :: ++ go-peek |= [ver=?(%v0 %v1 %v2) =(pole knot)] ~> %spin.['go-peek'] - ^- (unit (unit cage)) + ^- (unit (unit rail)) ::TODO some of these should be versioned, at least :: those used by the client. :: @@ -4608,25 +4551,25 @@ :: :: local preview [%preview ~] - ``noun+!>(go-preview) + ``noun+go-preview :: :: :: seats queries :: [%seats %ships ~] - ``ships+!>(~(key by seats.group)) + ``ships+~(key by seats.group) :: [%seats ship=@ ~] =+ ship=(slav %p ship.pole) - ``noun+!>((~(get by seats.group) ship)) + ``noun+(~(get by seats.group) ship) :: [%seats ship=@ %is-admin ~] =+ ship=(slav %p ship.pole) - ``loob+!>((go-is-admin ship)) + ``loob+(go-is-admin ship) :: [%seats ship=@ %is-banned ~] =+ ship=(slav %p ship.pole) - ``loob+!>((go-is-banned ship)) + ``loob+(go-is-banned ship) :: :: :: channels queries @@ -4636,16 +4579,16 @@ ?+ rest.pole [~ ~] [%can-read ship=@ ~] ?~ channel=(~(get by channels.group) nest) - ``loob+!>(|) + ``loob+| =+ ship=(slav %p ship.rest.pole) - ``loob+!>((go-can-read ship u.channel)) + ``loob+(go-can-read ship u.channel) :: [%can-write ship=@ ~] =+ ship=(slav %p ship.rest.pole) - ^- (unit (unit cage)) + ^- (unit (unit rail)) ?~ seat=(~(get by seats.group) ship) [~ ~] ?: (go-is-banned ship) [~ ~] - =- ``noun+!>(-) + =- ``noun+- %- some :- admin=(go-is-admin ship) roles=roles.u.seat @@ -4654,7 +4597,7 @@ ?~ channel=(~(get by channels.group) nest) [~ ~] =; ships=(set ship) - ``ships+!>(ships) + ``ships+ships %- silt ^- (list ship) %+ skim ~(tap in ~(key by seats.group)) @@ -4669,7 +4612,7 @@ /(scot %p our.bowl)/channels/(scot %da now.bowl)/[app.pole]/[ship.pole]/[name.pole] =+ .^(=perm:d %gx (weld channels-scry /perm/noun)) =; ships=(set ship) - ``ships+!>(ships) + ``ships+ships %- ~(rep by seats.group) |= [[=ship =seat:g] writers=(set ship)] :: if we can't read the channel, we will not receive @@ -4685,7 +4628,7 @@ == :: [%channels %can-read ~] - =- ``noun+!>(-) + =- ``noun+- ^- $-([ship nest:gv] ?) |= [=ship =nest:gv] ?~ chan=(~(get by channels.group) nest) | @@ -4695,7 +4638,7 @@ :: admissions queries :: [%entry %tokens ~] - ``noun+!>(tokens.ad) + ``noun+tokens.ad == ++ go-can-read |= [=ship =channel:g] @@ -4747,10 +4690,10 @@ :: cancel a possible preview :: =? cor done - =^ caz=(list card) subs + =^ caz=(list card:agent:gall) subs =/ =dock [p.flag dap.bowl] (~(unsubscribe s [subs bowl]) (weld fi-area /preview) dock) - (emil caz) + (emil (turn caz exit:guardian)) =? fi-core |(?=(~ old-foreign) !=(u.old-foreign foreign)) fi-give-update cor @@ -4761,8 +4704,8 @@ %- gang:v2:foreign:v7:gc (v7:foreign:v10:gc foreign) =/ foreign-8 (v8:foreign:v10:gc foreign) - =. cor (give %fact ~[/v1/foreigns] foreigns-1+!>(`foreigns:v8:gv`(my flag^foreign-8 ~))) - =. cor (give %fact ~[/gangs/updates] gangs+!>(`gangs:v2:gv`(my flag^gang-2 ~))) + =. cor (give %fact ~[/v1/foreigns] foreigns-1+`foreigns:v8:gv`(my flag^foreign-8 ~)) + =. cor (give %fact ~[/gangs/updates] gangs+`gangs:v2:gv`(my flag^gang-2 ~)) fi-core :: ++ fi-activity @@ -4789,16 +4732,16 @@ ^- card =/ =wire (weld fi-area /command/leave) =/ =dock [p.flag server] - [%pass wire %agent dock %poke group-command+!>(`c-groups:g`[%leave flag])] + [%pass wire %agent dock %poke group-command+`c-groups:g`[%leave flag]] :: ++ join |= tok=(unit token:g) ~> %spin.['join'] ^- card =/ =wire (weld fi-area /join/[?~(tok %public (scot %uv u.tok))]) - =/ =cage - group-command+!>(`c-groups:g`[%join flag tok]) - [%pass wire %agent [p.flag server] %poke cage] + =/ =rail + group-command+`c-groups:g`[%join flag tok] + [%pass wire %agent [p.flag server] %poke rail] :: ++ ask |= story=(unit story:s:g) ::XX something is broken with story import @@ -4806,9 +4749,9 @@ ^- (list card) =/ =wire (weld fi-area /ask) =/ =path (weld fi-server-path /ask/(scot %p our.bowl)) - =/ =cage - group-command+!>(`c-groups:g`[%ask flag story]) - :~ [%pass wire %agent [p.flag server] %poke cage] + =/ =rail + group-command+`c-groups:g`[%ask flag story] + :~ [%pass wire %agent [p.flag server] %poke rail] [%pass wire %agent [p.flag server] %watch path] == :: @@ -4851,7 +4794,7 @@ ~> %spin.['fi-join'] ^+ fi-core =* log ~(. l `%group-join) - =. cor (emit (initiate:neg [p.flag server])) + =. cor (emit (exit:guardian (initiate:neg [p.flag server]))) :: leave the ask subscription in case it has not yet closed :: =? cor ?=([~ %ask] progress) @@ -4882,7 +4825,7 @@ |= story=(unit story:s:g) ~> %spin.['fi-ask'] ^+ fi-core - =. cor (emit (initiate:neg [p.flag server])) + =. cor (emit (exit:guardian (initiate:neg [p.flag server]))) ?: (~(has by groups) flag) fi-core ?: ?& ?=(^ progress) ?=(?(%ask %join %watch %done) u.progress) @@ -5184,7 +5127,7 @@ %- emil :~ :: v0 :: - [%give %fact ~[path-0] group-preview+!>((v2:preview:v7:gc u.preview))] + [%give %fact ~[path-0] group-preview+(v2:preview:v7:gc u.preview)] [%give %kick ~[path-0] ~] == %- emil @@ -5192,7 +5135,7 @@ :: :^ %give %fact ~[path-1] - group-preview-3+!>(`preview-update:v7:gv`preview-update) + group-preview-3+`preview-update:v7:gv`preview-update [%give %kick ~[path-1] ~] == fi-core @@ -5234,7 +5177,7 @@ =. cor %- emil :~ :^ %give %fact ~[path-1] - group-previews-1+!>(`previews:v7:gv`previews) + group-previews-1+`previews:v7:gv`previews :: [%give %kick ~[path-1] ~] == @@ -5246,7 +5189,7 @@ =. cor %- emil :~ :^ %give %fact ~[path-0] - group-previews+!>(previews-2) + group-previews+previews-2 :: [%give %kick ~[path-0] ~] == diff --git a/desk/gen/rail.hoon b/desk/gen/rail.hoon index 2d8936f871..7047afd0b8 100644 --- a/desk/gen/rail.hoon +++ b/desk/gen/rail.hoon @@ -16,6 +16,35 @@ %chat-scan-4 %chat-writ-4 %writ-response-4 + :: + ::TODO make strict one day + %channel-changed-posts + %channel-changed-posts-1 + %channel-post + %channel-post-5 + %channel-posts + %channel-posts-4 + %channel-posts-5 + %channel-replies-5 + %channel-said-3 + %channel-scan-4 + %channel-scam-4 + %channels-2 + %channels-5 + :: + %channel-checkpoint + %channel-denied + %channel-logs + %channel-said-1 + %channel-said-2 + %channel-update + %hook-channel-preview + %hook-full + %hook-response-0 + %hook-template + :: + %group-update + %group-log == :: :- %say diff --git a/desk/lib/rail.hoon b/desk/lib/rail.hoon index 5fa1e99558..8c1df099c5 100644 --- a/desk/lib/rail.hoon +++ b/desk/lib/rail.hoon @@ -200,6 +200,7 @@ /% foreign-1 %foreign-1 /% foreign-2 %foreign-2 /% foreigns-1 %foreigns-1 +/% foreigns-2 %foreigns-2 /% gangs %gangs /% group %group /% group-1 %group-1 @@ -571,6 +572,7 @@ $: %foreign-1 $+ foreign-1 p=_*vale:foreign-1 == $: %foreign-2 $+ foreign-2 p=_*vale:foreign-2 == $: %foreigns-1 $+ foreigns-1 p=_*vale:foreigns-1 == + $: %foreigns-2 $+ foreigns-2 p=_*vale:foreigns-2 == $: %gangs $+ gangs p=_*vale:gangs == $: %group $+ group p=_*vale:group == $: %group-1 $+ group-1 p=_*vale:group-1 == @@ -944,6 +946,7 @@ %foreign-1 [-.rail !>(+.rail)] %foreign-2 [-.rail !>(+.rail)] %foreigns-1 [-.rail !>(+.rail)] + %foreigns-2 [-.rail !>(+.rail)] %gangs [-.rail !>(+.rail)] %group [-.rail !>(+.rail)] %group-1 [-.rail !>(+.rail)] @@ -1315,6 +1318,7 @@ %foreign-1 [p !<(_*vale:foreign-1 q)] %foreign-2 [p !<(_*vale:foreign-2 q)] %foreigns-1 [p !<(_*vale:foreigns-1 q)] + %foreigns-2 [p !<(_*vale:foreigns-2 q)] %gangs [p !<(_*vale:gangs q)] %group [p !<(_*vale:group q)] %group-1 [p !<(_*vale:group-1 q)] @@ -1684,6 +1688,7 @@ :+ %foreign-1 & -:!>(*vale:foreign-1) :+ %foreign-2 & -:!>(*vale:foreign-2) :+ %foreigns-1 & -:!>(*vale:foreigns-1) + :+ %foreigns-2 & -:!>(*vale:foreigns-2) :+ %gangs & -:!>(*vale:gangs) :+ %group & -:!>(*vale:group) :+ %group-1 & -:!>(*vale:group-1) diff --git a/desk/mar/foreigns-2.hoon b/desk/mar/foreigns-2.hoon new file mode 100644 index 0000000000..3c127967d8 --- /dev/null +++ b/desk/mar/foreigns-2.hoon @@ -0,0 +1,14 @@ +/- gv=groups-ver +/+ j=groups-json +|_ =foreigns:v10:gv +++ grad %noun +++ grow + |% + ++ noun foreigns + ++ json (foreigns:v10:enjs:j foreigns) + -- +++ grab + |% + ++ noun foreigns:v10:gv + -- +-- From 0ce28d52088a4e1beaed69328392e5fca406ef11 Mon Sep 17 00:00:00 2001 From: fang Date: Thu, 7 May 2026 23:42:49 +0200 Subject: [PATCH 11/20] rail: update --- desk/gen/rail.hoon | 5 +++-- desk/lib/rail.hoon | 52 +++++++++++++++++++++++----------------------- 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/desk/gen/rail.hoon b/desk/gen/rail.hoon index 7047afd0b8..49aeb81b26 100644 --- a/desk/gen/rail.hoon +++ b/desk/gen/rail.hoon @@ -1,4 +1,4 @@ -:: call as *%%%/groups/0/lib/rail/hoon +groups!rail +:: call as *=groups=/lib/rail/hoon +groups!rail :: ::TODO investigate adding a "meta-build" for rune that evaluates the file :: to obtain a hoon ast, which it then compiles into the result @@ -72,13 +72,14 @@ %- (slog (cat 3 'rail dropping "reserved" name: %' mar) ~) [maz max] [(snor mar maz aor) (^max (met 3 mar) max)] +~& maz=maz :: %+ rap 3 :~ ''' :: THIS FILE IS AUTO-GENERATED, DO NOT MODIFY IT DIRECTLY :: :: to update it, pulling in *all* marks in your current %groups desk, run: - :: *%%%/groups/0/lib/rail/hoon +groups!rail + :: *=groups=/lib/rail/hoon +groups!rail :: :: BE VERY CAREFUL, if there are mark files in your desk that are not in :: the "stock" distribution, the generated file will fail to built on diff --git a/desk/lib/rail.hoon b/desk/lib/rail.hoon index 8c1df099c5..7d011abb88 100644 --- a/desk/lib/rail.hoon +++ b/desk/lib/rail.hoon @@ -1,7 +1,7 @@ :: THIS FILE IS AUTO-GENERATED, DO NOT MODIFY IT DIRECTLY :: :: to update it, pulling in *all* marks in your current %groups desk, run: -:: *%%%/groups/0/lib/rail/hoon +groups!rail +:: *=groups=/lib/rail/hoon +groups!rail :: :: BE VERY CAREFUL, if there are mark files in your desk that are not in :: the "stock" distribution, the generated file will fail to built on @@ -1534,35 +1534,35 @@ :+ %channel-action & -:!>(*vale:channel-action) :+ %channel-action-1 & -:!>(*vale:channel-action-1) :+ %channel-action-2 & -:!>(*vale:channel-action-2) - :+ %channel-changed-posts & -:!>(*vale:channel-changed-posts) - :+ %channel-changed-posts-1 & -:!>(*vale:channel-changed-posts-1) - :+ %channel-checkpoint & -:!>(*vale:channel-checkpoint) + :+ %channel-changed-posts | -:!>(*vale:channel-changed-posts) + :+ %channel-changed-posts-1 | -:!>(*vale:channel-changed-posts-1) + :+ %channel-checkpoint | -:!>(*vale:channel-checkpoint) :+ %channel-command & -:!>(*vale:channel-command) - :+ %channel-denied & -:!>(*vale:channel-denied) + :+ %channel-denied | -:!>(*vale:channel-denied) :+ %channel-heads & -:!>(*vale:channel-heads) :+ %channel-heads-2 & -:!>(*vale:channel-heads-2) :+ %channel-heads-3 & -:!>(*vale:channel-heads-3) :+ %channel-heads-4 & -:!>(*vale:channel-heads-4) :+ %channel-leave & -:!>(*vale:channel-leave) - :+ %channel-logs & -:!>(*vale:channel-logs) + :+ %channel-logs | -:!>(*vale:channel-logs) :+ %channel-perm & -:!>(*vale:channel-perm) - :+ %channel-post & -:!>(*vale:channel-post) + :+ %channel-post | -:!>(*vale:channel-post) :+ %channel-post-2 & -:!>(*vale:channel-post-2) :+ %channel-post-3 & -:!>(*vale:channel-post-3) :+ %channel-post-4 & -:!>(*vale:channel-post-4) - :+ %channel-post-5 & -:!>(*vale:channel-post-5) - :+ %channel-posts & -:!>(*vale:channel-posts) + :+ %channel-post-5 | -:!>(*vale:channel-post-5) + :+ %channel-posts | -:!>(*vale:channel-posts) :+ %channel-posts-2 & -:!>(*vale:channel-posts-2) :+ %channel-posts-3 & -:!>(*vale:channel-posts-3) - :+ %channel-posts-4 & -:!>(*vale:channel-posts-4) - :+ %channel-posts-5 & -:!>(*vale:channel-posts-5) + :+ %channel-posts-4 | -:!>(*vale:channel-posts-4) + :+ %channel-posts-5 | -:!>(*vale:channel-posts-5) :+ %channel-preview & -:!>(*vale:channel-preview) :+ %channel-preview-1 & -:!>(*vale:channel-preview-1) :+ %channel-replies & -:!>(*vale:channel-replies) :+ %channel-replies-2 & -:!>(*vale:channel-replies-2) :+ %channel-replies-3 & -:!>(*vale:channel-replies-3) :+ %channel-replies-4 & -:!>(*vale:channel-replies-4) - :+ %channel-replies-5 & -:!>(*vale:channel-replies-5) + :+ %channel-replies-5 | -:!>(*vale:channel-replies-5) :+ %channel-reply & -:!>(*vale:channel-reply) :+ %channel-reply-2 & -:!>(*vale:channel-reply-2) :+ %channel-request-join & -:!>(*vale:channel-request-join) @@ -1573,17 +1573,17 @@ :+ %channel-response-4 & -:!>(*vale:channel-response-4) :+ %channel-response-5 & -:!>(*vale:channel-response-5) :+ %channel-said & -:!>(*vale:channel-said) - :+ %channel-said-1 & -:!>(*vale:channel-said-1) - :+ %channel-said-2 & -:!>(*vale:channel-said-2) - :+ %channel-said-3 & -:!>(*vale:channel-said-3) + :+ %channel-said-1 | -:!>(*vale:channel-said-1) + :+ %channel-said-2 | -:!>(*vale:channel-said-2) + :+ %channel-said-3 | -:!>(*vale:channel-said-3) :+ %channel-scam & -:!>(*vale:channel-scam) :+ %channel-scam-2 & -:!>(*vale:channel-scam-2) :+ %channel-scam-3 & -:!>(*vale:channel-scam-3) - :+ %channel-scam-4 & -:!>(*vale:channel-scam-4) + :+ %channel-scam-4 | -:!>(*vale:channel-scam-4) :+ %channel-scan & -:!>(*vale:channel-scan) :+ %channel-scan-2 & -:!>(*vale:channel-scan-2) :+ %channel-scan-3 & -:!>(*vale:channel-scan-3) - :+ %channel-scan-4 & -:!>(*vale:channel-scan-4) + :+ %channel-scan-4 | -:!>(*vale:channel-scan-4) :+ %channel-simple-post & -:!>(*vale:channel-simple-post) :+ %channel-simple-posts & -:!>(*vale:channel-simple-posts) :+ %channel-simple-replies & -:!>(*vale:channel-simple-replies) @@ -1591,12 +1591,12 @@ :+ %channel-simple-response & -:!>(*vale:channel-simple-response) :+ %channel-unread-update & -:!>(*vale:channel-unread-update) :+ %channel-unreads & -:!>(*vale:channel-unreads) - :+ %channel-update & -:!>(*vale:channel-update) + :+ %channel-update | -:!>(*vale:channel-update) :+ %channels & -:!>(*vale:channels) - :+ %channels-2 & -:!>(*vale:channels-2) + :+ %channels-2 | -:!>(*vale:channels-2) :+ %channels-3 & -:!>(*vale:channels-3) :+ %channels-4 & -:!>(*vale:channels-4) - :+ %channels-5 & -:!>(*vale:channels-5) + :+ %channels-5 | -:!>(*vale:channels-5) :+ %chat-block-ship & -:!>(*vale:chat-block-ship) :+ %chat-blocked & -:!>(*vale:chat-blocked) :+ %chat-blocked-by & -:!>(*vale:chat-blocked-by) @@ -1720,7 +1720,7 @@ :+ %group-join & -:!>(*vale:group-join) :+ %group-knock & -:!>(*vale:group-knock) :+ %group-leave & -:!>(*vale:group-leave) - :+ %group-log & -:!>(*vale:group-log) + :+ %group-log | -:!>(*vale:group-log) :+ %group-preview & -:!>(*vale:group-preview) :+ %group-preview-1 & -:!>(*vale:group-preview-1) :+ %group-preview-2 & -:!>(*vale:group-preview-2) @@ -1734,7 +1734,7 @@ :+ %group-ui & -:!>(*vale:group-ui) :+ %group-ui-1 & -:!>(*vale:group-ui-1) :+ %group-ui-2 & -:!>(*vale:group-ui-2) - :+ %group-update & -:!>(*vale:group-update) + :+ %group-update | -:!>(*vale:group-update) :+ %grouper-answer-enabled & -:!>(*vale:grouper-answer-enabled) :+ %grouper-ask-enabled & -:!>(*vale:grouper-ask-enabled) :+ %grouper-disable & -:!>(*vale:grouper-disable) @@ -1751,12 +1751,12 @@ :+ %hidden-posts & -:!>(*vale:hidden-posts) :+ %holt & -:!>(*vale:holt) :+ %hook-action-0 & -:!>(*vale:hook-action-0) - :+ %hook-channel-preview & -:!>(*vale:hook-channel-preview) - :+ %hook-full & -:!>(*vale:hook-full) - :+ %hook-response-0 & -:!>(*vale:hook-response-0) + :+ %hook-channel-preview | -:!>(*vale:hook-channel-preview) + :+ %hook-full | -:!>(*vale:hook-full) + :+ %hook-response-0 | -:!>(*vale:hook-response-0) :+ %hook-setup-template & -:!>(*vale:hook-setup-template) :+ %hook-setup-template-args & -:!>(*vale:hook-setup-template-args) - :+ %hook-template & -:!>(*vale:hook-template) + :+ %hook-template | -:!>(*vale:hook-template) :+ %hoon & -:!>(*vale:hoon) :+ %htm & -:!>(*vale:htm) :+ %html & -:!>(*vale:html) From cca623a0e2299da4468cd1043ee50d621e02c76e Mon Sep 17 00:00:00 2001 From: fang Date: Fri, 8 May 2026 21:04:10 +0200 Subject: [PATCH 12/20] contacts: put on guardrail REVIEW: this didn't used to have discipline on it, but now its marks are implicitly strictly disciplined. --- desk/app/contacts.hoon | 70 ++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/desk/app/contacts.hoon b/desk/app/contacts.hoon index 59d0a893cb..2793395462 100644 --- a/desk/app/contacts.hoon +++ b/desk/app/contacts.hoon @@ -1,5 +1,6 @@ /- activity -/+ default-agent, dbug, verb, neg=negotiate +/+ default-agent, dbug, verb, neg=negotiate, + guardian /+ *contacts, kol :: :: performance, keep warm @@ -16,7 +17,8 @@ :: .sag: foreign subscription state :: +| %types -+$ card card:agent:gall ++$ card card:guardian ++$ rail rail:guardian +$ state-4 $: %4 rof=profile @@ -41,6 +43,7 @@ cor ~(. raw bowl) :: ++ on-init + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:init:cor [cards this] @@ -49,18 +52,21 @@ :: ++ on-load |= old=vase + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(load:cor old) [cards this] :: ++ on-watch |= =path + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(peer:cor path) [cards this] :: ++ on-poke |= [=mark =vase] + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(poke:cor mark vase) [cards this] @@ -70,12 +76,15 @@ :: ++ on-agent |= [=wire =sign:agent:gall] + %- step:unguard:guardian ^- (quip card _this) =^ cards state abet:(agent:cor wire sign) [cards this] :: ++ on-arvo |= [=wire sign=sign-arvo] + %- step:unguard:guardian + ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) [cards this] :: @@ -99,8 +108,8 @@ ++ cor . ++ emit |=(c=card cor(out [c out])) ++ emil |=(c=(list card) cor(out (weld (flop c) out))) - ++ give |=(=gift:agent:gall (emit %give gift)) - ++ pass |=([=wire =note:agent:gall] (emit %pass wire note)) + ++ give |=(=gift:guardian (emit %give gift)) + ++ pass |=([=wire =note:guardian] (emit %pass wire note)) :: +| %operations :: @@ -108,8 +117,8 @@ |= [who=ship field=(pair @tas value)] ~> %spin.['pass-activity'] ^- card - =/ =cage activity-action+!>(`action:activity`[%add %contact who field]) - [%pass /activity %agent [our.bowl %activity] %poke cage] + =/ =rail activity-action+`action:activity`[%add %contact who field] + [%pass /activity %agent [our.bowl %activity] %poke rail] :: :: +pub: publication management :: @@ -152,8 +161,8 @@ ++ fact |= [pat=(set path) u=update] ~> %spin.['fact'] - ^- gift:agent:gall - [%fact ~(tap in pat) %contact-update-1 !>(u)] + ^- gift:guardian + [%fact ~(tap in pat) contact-update-1+u] -- :: |% @@ -273,13 +282,13 @@ ++ p-news-0 |= n=news-0:c0 ~> %spin.['p-news-0'] - (give %fact ~[/news] %contact-news !>(n)) + (give %fact ~[/news] contact-news+n) :: +p-response: publish response :: ++ p-response |= r=response ~> %spin.['p-response'] - (give %fact ~[/v1/news] %contact-response-0 !>(r)) + (give %fact ~[/v1/news] contact-response-0+r) -- :: :: +sub: subscription mgmt @@ -507,7 +516,7 @@ :: ++ init =. wen.rof now.bowl - (emit %pass /migrate %agent [our dap]:bowl %poke noun+!>(%migrate)) + (emit %pass /migrate %agent [our dap]:bowl %poke noun+%migrate) :: ++ load |= old-vase=vase @@ -744,7 +753,8 @@ ++ peek |= pat=(pole knot) ~> %spin.['peek'] - ^- (unit (unit cage)) + %- peek:unguard:guardian + ^- (unit (unit rail)) ?+ pat [~ ~] :: [%x %all ~] @@ -760,7 +770,7 @@ =/ lor-0=rolodex:c0 ?: ?=(~ con.rof) rol-0 (~(put by rol-0) our.bowl (profile:to-0 rof) ~) - ``contact-rolodex+!>(lor-0) + ``contact-rolodex+lor-0 :: [%x %contact her=@ ~] ?~ who=(slaw %p her.pat) @@ -772,37 +782,37 @@ ?: |(?=(~ far) ?=(~ for.u.far)) ~ (contact:to-0 con.for.u.far) ?~ tac [~ ~] - ``contact+!>(`contact-0:c0`tac) + ``contact+`contact-0:c0`tac :: [%x %v1 %self ~] - ``contact-1+!>(`contact`con.rof) + ``contact-1+`contact`con.rof :: [%x %v1 %book ~] - ``contact-book-0+!>(book) + ``contact-book-0+book :: [%u %v1 %book her=@p ~] ?~ who=(slaw %p her.pat) [~ ~] - ``loob+!>((~(has by book) u.who)) + ``loob+(~(has by book) u.who) :: [%x %v1 %book her=@p ~] ?~ who=(slaw %p her.pat) [~ ~] =/ page=(unit page) (~(get by book) u.who) - ``contact-page-0+!>(`^page`(fall page *^page)) + ``contact-page-0+`^page`(fall page *^page) :: [%u %v1 %book %id =cid ~] ?~ id=(slaw %uv cid.pat) [~ ~] - ``loob+!>((~(has by book) id+u.id)) + ``loob+(~(has by book) id+u.id) :: [%x %v1 %book %id =cid ~] ?~ id=(slaw %uv cid.pat) [~ ~] =/ page=(unit page) (~(get by book) id+u.id) - ``contact-page-0+!>(`^page`(fall page *^page)) + ``contact-page-0+`^page`(fall page *^page) :: [%x %v1 %all ~] =| dir=directory @@ -822,13 +832,13 @@ ?~ for.far dir ?: (~(has by dir) who) dir (~(put by dir) who con.for.far) - ``contact-directory-0+!>(dir) + ``contact-directory-0+dir :: [%x %v1 %changes since=@ ~] =+ since=(slav %da since.pat) :^ ~ ~ %contact-changed-contacts - !> ^- (map ship profile) + ^- (map ship profile) %- ~(rep by peers) |= [[who=ship foreign] out=(map ship profile)] ?~ for out @@ -839,7 +849,7 @@ =+ since=(slav %da since.pat) :^ ~ ~ %contact-changed-pages - !> %- ~(gas by *(map kip [(unit contact) (unit contact)])) + %- ~(gas by *(map kip [(unit contact) (unit contact)])) %+ turn (~(top ol last-updated) since) |= [=kip @da] ^- [_kip con=(unit contact) mod=(unit contact)] @@ -854,8 +864,8 @@ ?~ who=(slaw %p her.pat) [~ ~] ?: (~(has by book) u.who) - ``loob+!>(&) - =- ``loob+!>(-) + ``loob+& + =- ``loob+- ?~ far=(~(get by peers) u.who) | ?~ for.u.far @@ -866,24 +876,24 @@ ?~ who=(slaw %p her.pat) [~ ~] ?^ page=(~(get by book) u.who) - ``contact-1+!>((contact-uni u.page)) + ``contact-1+(contact-uni u.page) ?~ far=(~(get by peers) u.who) [~ ~] ?~ for.u.far [~ ~] - ``contact-1+!>(con.for.u.far) + ``contact-1+con.for.u.far :: [%u %v1 %peer her=@p ~] ?~ who=(slaw %p her.pat) [~ ~] - ``loob+!>((~(has by peers) u.who)) + ``loob+(~(has by peers) u.who) :: [%x %v1 %peer her=@p ~] ?~ who=(slaw %p her.pat) [~ ~] ?~ far=(~(get by peers) u.who) [~ ~] - ``contact-foreign-0+!>(`foreign`u.far) + ``[%unsafe %contact-foreign-0 !>(`foreign`u.far)] == :: ++ peer @@ -900,7 +910,7 @@ [%v1 %contact %at wen=@ ~] (p-init:pub `(slav %da wen.pat)) [%v1 %news ~] ~|(local-news+src.bowl ?>(=(our src):bowl cor)) :: - [%epic ~] (give %fact ~ epic+!>(okay)) + [%epic ~] (give %fact ~ epic+okay) == :: ++ agent From 5d35dc13aa40c4a97865a34017f48a57a633541d Mon Sep 17 00:00:00 2001 From: fang Date: Fri, 8 May 2026 21:53:39 +0200 Subject: [PATCH 13/20] rail: clean up printf --- desk/gen/rail.hoon | 1 - 1 file changed, 1 deletion(-) diff --git a/desk/gen/rail.hoon b/desk/gen/rail.hoon index 49aeb81b26..d5134dd045 100644 --- a/desk/gen/rail.hoon +++ b/desk/gen/rail.hoon @@ -72,7 +72,6 @@ %- (slog (cat 3 'rail dropping "reserved" name: %' mar) ~) [maz max] [(snor mar maz aor) (^max (met 3 mar) max)] -~& maz=maz :: %+ rap 3 :~ ''' From 6e42eceb7a04c08f8e0e89f51c9851b6a17d0c5c Mon Sep 17 00:00:00 2001 From: fang Date: Fri, 8 May 2026 23:13:41 +0200 Subject: [PATCH 14/20] guardian: comment --- desk/lib/guardian.hoon | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/desk/lib/guardian.hoon b/desk/lib/guardian.hoon index 5adf3472e0..8c9f58908a 100644 --- a/desk/lib/guardian.hoon +++ b/desk/lib/guardian.hoon @@ -1,6 +1,8 @@ :: guardian: custom card types for compile-time marked-data guard rails :: -:: xx +:: integrates /lib/rail's type-safe cages into the gall agent card type, +:: and provides helpers for translating between safe and unsafe cards, +:: agent function and output. :: /+ *rail :: From a88a503ac23d6ded76324fdaf3db395bf2680063 Mon Sep 17 00:00:00 2001 From: fang Date: Tue, 12 May 2026 16:40:17 +0200 Subject: [PATCH 15/20] guard: rename from guardian --- desk/app/channels-server.hoon | 48 ++++++++++----------- desk/app/channels.hoon | 60 +++++++++++++------------- desk/app/chat.hoon | 46 ++++++++++---------- desk/app/contacts.hoon | 26 +++++------ desk/app/groups.hoon | 52 +++++++++++----------- desk/lib/dm.hoon | 8 ++-- desk/lib/{guardian.hoon => guard.hoon} | 4 +- 7 files changed, 122 insertions(+), 122 deletions(-) rename desk/lib/{guardian.hoon => guard.hoon} (95%) diff --git a/desk/app/channels-server.hoon b/desk/app/channels-server.hoon index 189412d866..a6845ccd8c 100644 --- a/desk/app/channels-server.hoon +++ b/desk/app/channels-server.hoon @@ -6,14 +6,14 @@ h=hooks, m=meta /+ ccv=channel-conv, utils=channel-utils, imp=import-aid, em=emojimart /+ default-agent, verb, dbug, - guardian, + guard, neg=negotiate, discipline, logs /+ hj=hooks-json :: %- %- discipline :+ :: marks :: - discipline:guardian + discipline:guard :: facts :: :~ [/$/$/checkpoint %channel-checkpoint ~] @@ -41,8 +41,8 @@ ^- agent:gall => |% - +$ card card:guardian - +$ rail rail:guardian + +$ card card:guard + +$ rail rail:guard +$ current-state $: %15 =v-channels:v10:cv @@ -59,7 +59,7 @@ log ~(. logs [our.bowl /logs]) cor ~(. +> [bowl ~ ~]) ++ on-init - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:init:cor @@ -68,7 +68,7 @@ ++ on-save !>(state) ++ on-load |= =vase - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(load:cor vase) @@ -76,7 +76,7 @@ :: ++ on-poke |= [=mark =vase] - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(poke:cor mark vase) @@ -84,7 +84,7 @@ :: ++ on-watch |= =path - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(watch:cor path) @@ -94,16 +94,16 @@ ++ on-leave on-leave:def ++ on-fail |= [=term =tang] - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) %- (slog term tang) :_ this - [(exit:guardian (fail:log term tang ~))]~ + [(exit:guard (fail:log term tang ~))]~ :: ++ on-agent - %- on-agent:guardian - |= [=wire =sign:guardian] - %- step:unguard:guardian + %- on-agent:guard + |= [=wire =sign:guard] + %- step:un:guard ^- (quip card _this) =^ cards state abet:(agent:cor wire sign) @@ -111,7 +111,7 @@ :: ++ on-arvo |= [=wire sign=sign-arvo] - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) @@ -125,7 +125,7 @@ ++ emil |=(caz=(list card) cor(cards (welp (flop caz) cards))) ++ emit-late |=(=card cor(cards-late [card cards-late])) ++ emil-late |=(caz=(list card) cor(cards-late (welp (flop caz) cards-late))) -++ give |=(=gift:guardian (emit %give gift)) +++ give |=(=gift:guard (emit %give gift)) ++ log ~(. logs [our.bowl /logs]) ++ safe-watch |= [=wire =dock =path] @@ -494,11 +494,11 @@ [%send-sequence-numbers *] =+ ;;([%send-sequence-numbers =nest:c] q.vase) =. cor - (emit (exit:guardian (tell:log %dbug ~[>[%got-poke %send-sequence-numbers nest]<] ~))) + (emit (exit:guard (tell:log %dbug ~[>[%got-poke %send-sequence-numbers nest]<] ~))) ?~ can=(~(get by v-channels) nest) cor =; =rail %- emil - :~ (exit:guardian (tell:log %dbug ~[>[%sending-sequence-numbers src.bowl]<] ~)) + :~ (exit:guard (tell:log %dbug ~[>[%sending-sequence-numbers src.bowl]<] ~)) [%pass /numbers %agent [src.bowl %channels] %poke rail] == :- %noun @@ -511,11 +511,11 @@ :: [%send-tombstones *] =+ ;;([%send-tombstones =nest:c] q.vase) - =. cor (emit (exit:guardian (tell:log %dbug ~[>[%got-poke %send-tombstones nest]<] ~))) + =. cor (emit (exit:guard (tell:log %dbug ~[>[%got-poke %send-tombstones nest]<] ~))) ?~ can=(~(get by v-channels) nest) cor =; =rail %- emil - :~ (exit:guardian (tell:log %dbug ~[>[%sending-tombstones src.bowl]<] ~)) + :~ (exit:guard (tell:log %dbug ~[>[%sending-tombstones src.bowl]<] ~)) [%pass /tombstones %agent [src.bowl %channels] %poke rail] == :- %noun @@ -631,7 +631,7 @@ :: wrt them. :: =. v-channels (~(uni by v-channels:bak) v-channels) - (emil (turn (prod-next:imp [our dap]:bowl) exit:guardian)) + (emil (turn (prod-next:imp [our dap]:bowl) exit:guard)) == :: ++ watch @@ -701,7 +701,7 @@ == :: ++ agent - |= [=(pole knot) =sign:guardian] + |= [=(pole knot) =sign:guard] ~> %spin.['agent'] ^+ cor ?+ pole ~|(bad-agent-wire+pole !!) @@ -767,7 +767,7 @@ ++ peek |= =(pole knot) ~> %spin.['peek'] - %- peek:unguard:guardian + %- peek:un:guard ^- (unit (unit rail)) =? +.pole !?=([%v0 *] +.pole) [%v0 +.pole] @@ -865,7 +865,7 @@ ++ ca-core . ++ emit |=(=card ca-core(cor (^emit card))) ++ emil |=(caz=(list card) ca-core(cor (^emil caz))) - ++ give |=(=gift:guardian ca-core(cor (^give gift))) + ++ give |=(=gift:guard ca-core(cor (^give gift))) ++ ca-perms ~(. perms:utils our.bowl now.bowl nest group.perm.channel) ++ ca-abet %_ cor @@ -1401,7 +1401,7 @@ ++ ho-core . ++ emit |=(=card ho-core(cor (^emit card))) ++ emil |=(caz=(list card) ho-core(cor (^emil caz))) - ++ give |=(=gift:guardian ho-core(cor (^give gift))) + ++ give |=(=gift:guard ho-core(cor (^give gift))) ++ ho-abet %_ cor hooks.hooks diff --git a/desk/app/channels.hoon b/desk/app/channels.hoon index 38799defcf..5972552d4b 100644 --- a/desk/app/channels.hoon +++ b/desk/app/channels.hoon @@ -11,7 +11,7 @@ /- c=channels, cv=channels-ver, g=groups, gv=groups-ver, a=activity, av=activity-ver, story /- meta /+ default-agent, verb, dbug, - guardian, + guard, neg=negotiate, discipline, logs, sparse, kol, imp=import-aid /+ utils=channel-utils, volume, s=subscriber, @@ -22,7 +22,7 @@ %- %- discipline :+ :: marks :: - discipline:guardian + discipline:guard :: facts :: :~ [/ %channel-response %toggle-post ~] @@ -128,8 +128,8 @@ ^- agent:gall => |% - +$ card card:guardian - +$ rail rail:guardian + +$ card card:guard + +$ rail rail:guard +$ current-state $: %18 =v-channels:v10:cv @@ -155,7 +155,7 @@ log ~(. logs [our.bowl /logs]) cor ~(. +> [bowl ~]) ++ on-init - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:init:cor @@ -164,16 +164,16 @@ ++ on-save !>([state]) ++ on-load |= =vase - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(load:cor vase) [cards this] :: ++ on-poke - %- on-poke:guardian + %- on-poke:guard |= =rail - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(poke:cor rail) @@ -181,7 +181,7 @@ :: ++ on-watch |= =path - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(watch:cor path) @@ -191,15 +191,15 @@ ++ on-leave on-leave:def ++ on-fail |= [=term =tang] - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) :_ this - [(exit:guardian (fail:log term tang ~))]~ + [(exit:guard (fail:log term tang ~))]~ :: ++ on-agent - %- on-agent:guardian - |= [=wire =sign:guardian] - %- step:unguard:guardian + %- on-agent:guard + |= [=wire =sign:guard] + %- step:un:guard ^- (quip card _this) =^ cards state abet:(agent:cor wire sign) @@ -207,7 +207,7 @@ :: ++ on-arvo |= [=wire sign=sign-arvo] - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) @@ -218,10 +218,10 @@ ++ abet [(flop cards) state] ++ cor . ++ plog ~(. logs [our.bowl /logs]) -++ tell-plog (cork tell:plog exit:guardian) +++ tell-plog (cork tell:plog exit:guard) ++ emit |=(=card cor(cards [card cards])) ++ emil |=(caz=(list card) cor(cards (welp (flop caz) cards))) -++ give |=(=gift:guardian (emit %give gift)) +++ give |=(=gift:guard (emit %give gift)) ++ server (cat 3 dap.bowl '-server') ++ log |= msg=(trap tape) @@ -240,7 +240,7 @@ ?: (~(has by wex.bowl) wire dock) cor =^ caz=(list card:agent:gall) subs (~(subscribe s [subs bowl]) wire dock path delay) - (emil (turn caz exit:guardian)) + (emil (turn caz exit:guard)) :: ++ load |^ |= =vase @@ -744,7 +744,7 @@ ^+ cor =^ caz=(list card:agent:gall) subs (~(unsubscribe s [subs bowl]) wire dock) - (emil (turn caz exit:guardian)) + (emil (turn caz exit:guard)) ++ inflate-io :: leave all subscriptions we don't recognize :: @@ -1019,7 +1019,7 @@ =. v-channels (~(uni by v-channels:bak) v-channels) =. voc (~(uni by voc:bak) voc) =. hidden-posts (~(uni in hidden-posts:bak) hidden-posts) - (emil (turn (prod-next:imp [our dap]:bowl) exit:guardian)) + (emil (turn (prod-next:imp [our dap]:bowl) exit:guard)) == ++ watch |= =(pole knot) @@ -1095,7 +1095,7 @@ ?~(q.plan / /(scot %ud u.q.plan)) :: ++ take-said - |= [=nest:c =plan:c =sign:guardian] + |= [=nest:c =plan:c =sign:guard] ~> %spin.['take-said'] =/ =path (said-path nest plan) ^+ cor @@ -1176,7 +1176,7 @@ == :: ++ agent - |= [=(pole knot) =sign:guardian] + |= [=(pole knot) =sign:guard] ~> %spin.['agent'] ^+ cor ~| `wire`pole @@ -1293,7 +1293,7 @@ ++ peek |= =(pole knot) ~> %spin.['peek'] - %- peek:unguard:guardian + %- peek:un:guard ^- (unit (unit rail)) ?> ?=(^ pole) =? +.pole !?=([?(%v0 %v1 %v2 %v3 %v4 %v5 %v6) *] +.pole) @@ -1574,7 +1574,7 @@ [%~.~ %retry rest=*] =^ caz=(list card:agent:gall) subs (~(handle-wakeup s [subs bowl]) pole) - (emil (turn caz exit:guardian)) + (emil (turn caz exit:guard)) :: [?(%numbers %tombstones) kind=?(%chat %diary %heap) ship=@ name=@ ~] =/ host=ship (slav %p ship.pole) @@ -1644,7 +1644,7 @@ ++ ca-core . ++ emit |=(=card ca-core(cor (^emit card))) ++ emil |=(caz=(list card) ca-core(cor (^emil caz))) - ++ give |=(=gift:guardian ca-core(cor (^give gift))) + ++ give |=(=gift:guard ca-core(cor (^give gift))) ++ ca-perms ~(. perms:utils our.bowl now.bowl nest group.perm.channel) ++ safe-watch |= [=wire =dock =path] @@ -2069,7 +2069,7 @@ /[kind.nest]/[name.nest]/updates/(scot %da (fall tim *@da)) :: ++ ca-agent - |= [=wire =sign:guardian] + |= [=wire =sign:guard] ~> %spin.['ca-agent'] ^+ ca-core =? last-updated ?=(%fact -.sign) @@ -2087,7 +2087,7 @@ == :: ++ ca-take-create - |= =sign:guardian + |= =sign:guard ~> %spin.['ca-take-create'] ^+ ca-core ?- -.sign @@ -2119,7 +2119,7 @@ == :: ++ ca-take-update - |= =sign:guardian + |= =sign:guard ~> %spin.['ca-take-update'] ^+ ca-core ?+ -.sign ca-core @@ -2138,7 +2138,7 @@ == :: ++ ca-take-checkpoint - |= =sign:guardian + |= =sign:guard ~> %spin.['ca-take-checkpoint'] ^+ ca-core ?+ -.sign ca-core @@ -2158,7 +2158,7 @@ == :: ++ ca-take-backlog - |= =sign:guardian + |= =sign:guard ~> %spin.['ca-take-backlog'] ^+ ca-core ?+ -.sign ca-core diff --git a/desk/app/chat.hoon b/desk/app/chat.hoon index faf0c9425e..fe322c71b2 100644 --- a/desk/app/chat.hoon +++ b/desk/app/chat.hoon @@ -2,7 +2,7 @@ /- u=ui, e=epic, a=activity, av=activity-ver, s=story, meta /- contacts /+ default-agent, verb, dbug, - guardian, + guard, neg=negotiate, discipline, logs, em=emojimart /+ pac=dm @@ -70,7 +70,7 @@ %- %- discipline :+ :: marks :: - discipline:guardian + discipline:guard :: facts :: :~ [/ %chat-blocked-by %chat-unblocked-by %chat-toggle-message %chat-club-action %writ-response %ships ~] @@ -176,8 +176,8 @@ ^- agent:gall => |% - +$ card card:guardian - +$ rail rail:guardian + +$ card card:guard + +$ rail rail:guard ++ okay `epic:e`1 ++ wood-state ^- state:wood-lib @@ -212,7 +212,7 @@ log ~(. logs [our.bowl /logs]) cor ~(. +> [bowl ~]) ++ on-init - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:init:cor @@ -221,23 +221,23 @@ ++ on-save !>([state okay]) ++ on-load |= =vase - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(load:cor vase) [cards this] :: ++ on-poke - %- on-poke:guardian + %- on-poke:guard |= =rail - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(poke:cor rail) [cards this] ++ on-watch |= =path - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(watch:cor path) @@ -253,16 +253,16 @@ [(fail:log term tang ~)]~ :: ++ on-agent - %- on-agent:guardian - |= [=wire =sign:guardian] - %- step:unguard:guardian + %- on-agent:guard + |= [=wire =sign:guard] + %- step:un:guard ^- (quip card _this) =^ cards state abet:(agent:cor wire sign) [cards this] ++ on-arvo |= [=wire sign=sign-arvo] - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) @@ -273,13 +273,13 @@ log ~(. logs [our.bowl /logs]) ol (kol gte) log ~(. logs [our.bowl /logs]) - tell-log (cork tell:log exit:guardian) - fail-log (cork fail:log exit:guardian) + tell-log (cork tell:log exit:guard) + fail-log (cork fail:log exit:guard) ++ abet [(flop cards) state] ++ cor . ++ emit |=(=card cor(cards [card cards])) ++ emil |=(caz=(list card) cor(cards (welp (flop caz) cards))) -++ give |=(=gift:guardian (emit %give gift)) +++ give |=(=gift:guard (emit %give gift)) ++ now-id `id:c`[our now]:bowl ++ scry-path |= [agent=term =path] @@ -838,7 +838,7 @@ ?+ -.rail ~|(bad-poke/-.rail !!) %chat-negotiate ::TODO arguably should just be a /mar/negotiate - (emit (exit:guardian (initiate:neg p.rail dap.bowl))) + (emit (exit:guard (initiate:neg p.rail dap.bowl))) :: %chat-dm-rsvp =* rsvp=rsvp:dm:c p.rail @@ -1131,7 +1131,7 @@ == :: ++ agent - |= [=(pole knot) =sign:guardian] + |= [=(pole knot) =sign:guard] ~> %spin.['agent'] ^+ cor ?+ pole ~|(bad-agent-wire/pole !!) @@ -1215,7 +1215,7 @@ ++ peek |= =path ~> %spin.['peek'] - %- peek:unguard:guardian + %- peek:un:guard ^- (unit (unit rail)) ?+ path [~ ~] [%x %full ~] ``noun+[dms clubs] @@ -2353,7 +2353,7 @@ == :: ++ cu-agent - |= [=wire =sign:guardian] + |= [=wire =sign:guard] ~> %spin.['cu-agent'] ^+ cu-core ?+ wire ~|(bad-club-take/wire !!) @@ -2701,7 +2701,7 @@ (can-poke:neg bowl [ship dap.bowl]) == (emit (proxy-rsvp:di-pass ok)) - =. cor (emit (exit:guardian (initiate:neg [ship dap.bowl]))) + =. cor (emit (exit:guard (initiate:neg [ship dap.bowl]))) ?. ok :: reject or leave the dm :: @@ -2761,7 +2761,7 @@ == :: ++ di-agent - |= [=wire =sign:guardian] + |= [=wire =sign:guard] ~> %spin.['di-agent'] ^+ di-core ?+ wire ~|(bad-dm-take/wire !!) @@ -2956,7 +2956,7 @@ ++ di-pass |% ++ pass - |= [=wire =dock =task:guardian] + |= [=wire =dock =task:guard] ~> %spin.['pass'] ^- card [%pass (welp di-area wire) %agent dock task] diff --git a/desk/app/contacts.hoon b/desk/app/contacts.hoon index 9155387b62..59ad3f0439 100644 --- a/desk/app/contacts.hoon +++ b/desk/app/contacts.hoon @@ -1,6 +1,6 @@ /- activity-ver /+ default-agent, dbug, verb, neg=negotiate, - guardian + guard /+ *contacts, kol :: :: performance, keep warm @@ -17,8 +17,8 @@ :: .sag: foreign subscription state :: +| %types -+$ card card:guardian -+$ rail rail:guardian ++$ card card:guard ++$ rail rail:guard +$ state-4 $: %4 rof=profile @@ -43,7 +43,7 @@ cor ~(. raw bowl) :: ++ on-init - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:init:cor [cards this] @@ -52,21 +52,21 @@ :: ++ on-load |= old=vase - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(load:cor old) [cards this] :: ++ on-watch |= =path - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(peer:cor path) [cards this] :: ++ on-poke |= [=mark =vase] - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(poke:cor mark vase) [cards this] @@ -76,14 +76,14 @@ :: ++ on-agent |= [=wire =sign:agent:gall] - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(agent:cor wire sign) [cards this] :: ++ on-arvo |= [=wire sign=sign-arvo] - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) [cards this] @@ -108,8 +108,8 @@ ++ cor . ++ emit |=(c=card cor(out [c out])) ++ emil |=(c=(list card) cor(out (weld (flop c) out))) - ++ give |=(=gift:guardian (emit %give gift)) - ++ pass |=([=wire =note:guardian] (emit %pass wire note)) + ++ give |=(=gift:guard (emit %give gift)) + ++ pass |=([=wire =note:guard] (emit %pass wire note)) :: +| %operations :: @@ -161,7 +161,7 @@ ++ fact |= [pat=(set path) u=update] ~> %spin.['fact'] - ^- gift:guardian + ^- gift:guard [%fact ~(tap in pat) contact-update-1+u] -- :: @@ -753,7 +753,7 @@ ++ peek |= pat=(pole knot) ~> %spin.['peek'] - %- peek:unguard:guardian + %- peek:un:guard ^- (unit (unit rail)) ?+ pat [~ ~] :: diff --git a/desk/app/groups.hoon b/desk/app/groups.hoon index 36c45921ce..db8416f359 100644 --- a/desk/app/groups.hoon +++ b/desk/app/groups.hoon @@ -10,7 +10,7 @@ av=activity-ver /- meta /+ default-agent, verb, dbug, - guardian + guard /+ gc=groups-conv, cu=channel-utils, v=volume, s=subscriber, imp=import-aid, logs, t=contacts /+ of @@ -24,7 +24,7 @@ %- %- discipline :+ :: marks :: - discipline:guardian + discipline:guard :: facts :: :~ [/server/groups/$/$/updates/$/$ %group-update %group-log ~] @@ -106,8 +106,8 @@ ^- agent:gall => |% - +$ card card:guardian - +$ rail rail:guardian + +$ card card:guard + +$ rail rail:guard +$ current-state $: %11 groups=net-groups:v9:gv @@ -131,7 +131,7 @@ log ~(. logs [our.bowl /logs]) cor ~(. +> [bowl ~]) ++ on-init - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:init:cor @@ -140,7 +140,7 @@ ++ on-save !>([state ~]) ++ on-load |= =vase - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(load:cor vase) @@ -148,14 +148,14 @@ :: ++ on-poke |= [=mark =vase] - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(poke:cor mark vase) [cards this] ++ on-watch |= =path - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(watch:cor path) @@ -166,22 +166,22 @@ ++ on-leave on-leave:def ++ on-fail |= [=term =tang] - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) %- (slog term tang) :_ this - [(exit:guardian (fail:log term tang ~))]~ + [(exit:guard (fail:log term tang ~))]~ :: ++ on-agent |= [=wire =sign:agent:gall] - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(agent:cor wire sign) [cards this] ++ on-arvo |= [=wire sign=sign-arvo] - %- step:unguard:guardian + %- step:un:guard ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) @@ -192,7 +192,7 @@ ++ cor . ++ emit |=(=card cor(cards [card cards])) ++ emil |=(caz=(list card) cor(cards (welp (flop caz) cards))) -++ give |=(=gift:guardian (emit %give gift)) +++ give |=(=gift:guard (emit %give gift)) ++ server dap.bowl :: ++ submit-activity @@ -212,7 +212,7 @@ |= [desc=term =tang] ~> %spin.['fail'] =/ =card - %- exit:guardian + %- exit:guard (~(fail logs our.bowl /logs) desc tang deez) (emit card) :: @@ -220,7 +220,7 @@ |= [vol=volume:logs =echo:logs] ~> %spin.['tell'] =/ =card - %- exit:guardian + %- exit:guard (~(tell logs our.bowl /logs) vol echo deez) (emit card) :: +deez: log message details @@ -647,7 +647,7 @@ ?. ?=([%epic ~] wire) cor =^ caz=(list card:agent:gall) subs.cor (~(unsubscribe s [subs bowl]) wire dock) - (emil:cor (turn caz exit:guardian)) + (emil:cor (turn caz exit:guard)) =? old ?=(%4 -.old) (state-4-to-5 old) =? old ?=(%5 -.old) (state-5-to-6 old) =^ caz-6-to-7=(list card) old @@ -661,7 +661,7 @@ =/ =dock [our.bowl %contacts] =^ caz=(list card:agent:gall) subs.cor (~(unsubscribe s [subs bowl]) /contact dock) - (emil:cor (turn caz exit:guardian)) + (emil:cor (turn caz exit:guard)) =? old ?=(%8 -.old) (state-8-to-9 old) =^ caz-9-to-10=(list card) old ?. ?=(%9 -.old) [~ old] @@ -1129,7 +1129,7 @@ ++ peek |= =(pole knot) ~> %spin.['peek'] - %- peek:unguard:guardian + %- peek:un:guard |^ ^- (unit (unit rail)) ?+ pole [~ ~] :: @@ -1469,7 +1469,7 @@ [%~.~ %retry rest=*] =^ caz=(list card:agent:gall) subs (~(handle-wakeup s [subs bowl]) pole) - (emil (turn caz exit:guardian)) + (emil (turn caz exit:guard)) :: :: initialize .active-channels in $group :: @@ -1637,7 +1637,7 @@ ?: (~(has by wex.bowl) wire dock) cor =^ caz=(list card:agent:gall) subs (~(subscribe s [subs bowl]) wire dock path delay) - (emil (turn caz exit:guardian)) + (emil (turn caz exit:guard)) :: +eager-leave: eagerly unsubscribe from a path :: :: deletes the subscription entry from wex.bowl @@ -1651,7 +1651,7 @@ =. wex.bowl (~(del by wex.bowl) wire dock) =^ caz=(list card:agent:gall) subs (~(unsubscribe s [subs bowl]) wire dock) - (emil (turn caz exit:guardian)) + (emil (turn caz exit:guard)) :: ++ watch-channels (safe-watch /channels [our.bowl %channels] /v1) @@ -1752,7 +1752,7 @@ :: ++ se-core . ++ emit |=(=card se-core(cor cor(cards [card cards]))) - ++ give |=(=gift:guardian (emit %give gift)) + ++ give |=(=gift:guard (emit %give gift)) :: +se-abed: init :: ++ se-abed @@ -2751,7 +2751,7 @@ |= [=ship ivl=(list ship) =_se-core] ?. (can-poke:neg bowl ship %groups) =. se-core - (emit:se-core (exit:guardian (initiate:neg [ship dap.bowl]))) + (emit:se-core (exit:guard (initiate:neg [ship dap.bowl]))) :: retry .retry times with doubling .delay :: =+ delay=~h1 @@ -4700,7 +4700,7 @@ =^ caz=(list card:agent:gall) subs =/ =dock [p.flag dap.bowl] (~(unsubscribe s [subs bowl]) (weld fi-area /preview) dock) - (emil (turn caz exit:guardian)) + (emil (turn caz exit:guard)) =? fi-core |(?=(~ old-foreign) !=(u.old-foreign foreign)) fi-give-update cor @@ -4801,7 +4801,7 @@ ~> %spin.['fi-join'] ^+ fi-core =* log ~(. l `%group-join) - =. cor (emit (exit:guardian (initiate:neg [p.flag server]))) + =. cor (emit (exit:guard (initiate:neg [p.flag server]))) :: leave the ask subscription in case it has not yet closed :: =? cor ?=([~ %ask] progress) @@ -4832,7 +4832,7 @@ |= story=(unit story:s:g) ~> %spin.['fi-ask'] ^+ fi-core - =. cor (emit (exit:guardian (initiate:neg [p.flag server]))) + =. cor (emit (exit:guard (initiate:neg [p.flag server]))) ?: (~(has by groups) flag) fi-core ?: ?& ?=(^ progress) ?=(?(%ask %join %watch %done) u.progress) diff --git a/desk/lib/dm.hoon b/desk/lib/dm.hoon index ae6d388110..613563d6db 100644 --- a/desk/lib/dm.hoon +++ b/desk/lib/dm.hoon @@ -1,5 +1,5 @@ /- c=chat, cv=chat-ver, d=channels, s=story, meta -/+ mp=mop-extensions, cc=chat-conv, cu=channel-utils, guardian +/+ mp=mop-extensions, cc=chat-conv, cu=channel-utils, guard |_ pac=pact:c ++ size-limit 256.000 :: 256KB ++ mope ((mp time (may:c writ:c)) lte) @@ -252,7 +252,7 @@ ++ give-paged-writs |= [mode=?(%light %heavy) ver=?(%v0 %v1 %v2 %v3 %v4) ls=(list [time (may:c writ:c)])] ~> %spin.['libdm-give-paged-writs'] - ^- (unit (unit rail:guardian)) + ^- (unit (unit rail:guard)) =; p=paged-writs:c ?- ver %v0 ``chat-paged-writs+(v3:paged-writs:v4:cc (v4:paged-writs:v7:cc p)) @@ -293,7 +293,7 @@ ++ get-around |= [mode=?(%light %heavy) ver=?(%v0 %v1 %v2 %v3 %v4) =time count=@ud] ~> %spin.['libdm-get-around'] - ^- (unit (unit rail:guardian)) + ^- (unit (unit rail:guard)) =/ older (bat:mope wit.pac `time count) =/ newer (tab:on:writs:c wit.pac `time count) =/ writ (get:on:writs:c wit.pac time) @@ -323,7 +323,7 @@ ++ peek |= [care=@tas ver=?(%v0 %v1 %v2 %v3 %v4) =(pole knot)] ~> %spin.['libdm-peek'] - ^- (unit (unit rail:guardian)) + ^- (unit (unit rail:guard)) =* on on:writs:c ?+ pole [~ ~] :: diff --git a/desk/lib/guardian.hoon b/desk/lib/guard.hoon similarity index 95% rename from desk/lib/guardian.hoon rename to desk/lib/guard.hoon index 8c9f58908a..ada38aa233 100644 --- a/desk/lib/guardian.hoon +++ b/desk/lib/guard.hoon @@ -1,4 +1,4 @@ -:: guardian: custom card types for compile-time marked-data guard rails +:: guard: custom card types for compile-time marked-data guard rails :: :: integrates /lib/rail's type-safe cages into the gall agent card type, :: and provides helpers for translating between safe and unsafe cards, @@ -47,7 +47,7 @@ [%give %fact *] cad(cage.p [%unsafe cage.p.cad]) == :: -++ unguard +++ un |% ++ card |= cad=^card From fe72604e08d23899ef191b0e7cdbf890f65c2f97 Mon Sep 17 00:00:00 2001 From: fang Date: Tue, 12 May 2026 16:52:36 +0200 Subject: [PATCH 16/20] guard: rename +exit to +unsafe More clearly indicates what's going on. --- desk/app/channels-server.hoon | 12 ++++++------ desk/app/channels.hoon | 12 ++++++------ desk/app/chat.hoon | 8 ++++---- desk/app/groups.hoon | 24 ++++++++++++------------ desk/lib/guard.hoon | 2 +- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/desk/app/channels-server.hoon b/desk/app/channels-server.hoon index a6845ccd8c..f59c3eea0d 100644 --- a/desk/app/channels-server.hoon +++ b/desk/app/channels-server.hoon @@ -98,7 +98,7 @@ ^- (quip card _this) %- (slog term tang) :_ this - [(exit:guard (fail:log term tang ~))]~ + [(unsafe:guard (fail:log term tang ~))]~ :: ++ on-agent %- on-agent:guard @@ -494,11 +494,11 @@ [%send-sequence-numbers *] =+ ;;([%send-sequence-numbers =nest:c] q.vase) =. cor - (emit (exit:guard (tell:log %dbug ~[>[%got-poke %send-sequence-numbers nest]<] ~))) + (emit (unsafe:guard (tell:log %dbug ~[>[%got-poke %send-sequence-numbers nest]<] ~))) ?~ can=(~(get by v-channels) nest) cor =; =rail %- emil - :~ (exit:guard (tell:log %dbug ~[>[%sending-sequence-numbers src.bowl]<] ~)) + :~ (unsafe:guard (tell:log %dbug ~[>[%sending-sequence-numbers src.bowl]<] ~)) [%pass /numbers %agent [src.bowl %channels] %poke rail] == :- %noun @@ -511,11 +511,11 @@ :: [%send-tombstones *] =+ ;;([%send-tombstones =nest:c] q.vase) - =. cor (emit (exit:guard (tell:log %dbug ~[>[%got-poke %send-tombstones nest]<] ~))) + =. cor (emit (unsafe:guard (tell:log %dbug ~[>[%got-poke %send-tombstones nest]<] ~))) ?~ can=(~(get by v-channels) nest) cor =; =rail %- emil - :~ (exit:guard (tell:log %dbug ~[>[%sending-tombstones src.bowl]<] ~)) + :~ (unsafe:guard (tell:log %dbug ~[>[%sending-tombstones src.bowl]<] ~)) [%pass /tombstones %agent [src.bowl %channels] %poke rail] == :- %noun @@ -631,7 +631,7 @@ :: wrt them. :: =. v-channels (~(uni by v-channels:bak) v-channels) - (emil (turn (prod-next:imp [our dap]:bowl) exit:guard)) + (emil (turn (prod-next:imp [our dap]:bowl) unsafe:guard)) == :: ++ watch diff --git a/desk/app/channels.hoon b/desk/app/channels.hoon index 5972552d4b..c5c4009bd8 100644 --- a/desk/app/channels.hoon +++ b/desk/app/channels.hoon @@ -194,7 +194,7 @@ %- step:un:guard ^- (quip card _this) :_ this - [(exit:guard (fail:log term tang ~))]~ + [(unsafe:guard (fail:log term tang ~))]~ :: ++ on-agent %- on-agent:guard @@ -218,7 +218,7 @@ ++ abet [(flop cards) state] ++ cor . ++ plog ~(. logs [our.bowl /logs]) -++ tell-plog (cork tell:plog exit:guard) +++ tell-plog (cork tell:plog unsafe:guard) ++ emit |=(=card cor(cards [card cards])) ++ emil |=(caz=(list card) cor(cards (welp (flop caz) cards))) ++ give |=(=gift:guard (emit %give gift)) @@ -240,7 +240,7 @@ ?: (~(has by wex.bowl) wire dock) cor =^ caz=(list card:agent:gall) subs (~(subscribe s [subs bowl]) wire dock path delay) - (emil (turn caz exit:guard)) + (emil (turn caz unsafe:guard)) :: ++ load |^ |= =vase @@ -744,7 +744,7 @@ ^+ cor =^ caz=(list card:agent:gall) subs (~(unsubscribe s [subs bowl]) wire dock) - (emil (turn caz exit:guard)) + (emil (turn caz unsafe:guard)) ++ inflate-io :: leave all subscriptions we don't recognize :: @@ -1019,7 +1019,7 @@ =. v-channels (~(uni by v-channels:bak) v-channels) =. voc (~(uni by voc:bak) voc) =. hidden-posts (~(uni in hidden-posts:bak) hidden-posts) - (emil (turn (prod-next:imp [our dap]:bowl) exit:guard)) + (emil (turn (prod-next:imp [our dap]:bowl) unsafe:guard)) == ++ watch |= =(pole knot) @@ -1574,7 +1574,7 @@ [%~.~ %retry rest=*] =^ caz=(list card:agent:gall) subs (~(handle-wakeup s [subs bowl]) pole) - (emil (turn caz exit:guard)) + (emil (turn caz unsafe:guard)) :: [?(%numbers %tombstones) kind=?(%chat %diary %heap) ship=@ name=@ ~] =/ host=ship (slav %p ship.pole) diff --git a/desk/app/chat.hoon b/desk/app/chat.hoon index fe322c71b2..5a8c24c7b0 100644 --- a/desk/app/chat.hoon +++ b/desk/app/chat.hoon @@ -273,8 +273,8 @@ log ~(. logs [our.bowl /logs]) ol (kol gte) log ~(. logs [our.bowl /logs]) - tell-log (cork tell:log exit:guard) - fail-log (cork fail:log exit:guard) + tell-log (cork tell:log unsafe:guard) + fail-log (cork fail:log unsafe:guard) ++ abet [(flop cards) state] ++ cor . ++ emit |=(=card cor(cards [card cards])) @@ -838,7 +838,7 @@ ?+ -.rail ~|(bad-poke/-.rail !!) %chat-negotiate ::TODO arguably should just be a /mar/negotiate - (emit (exit:guard (initiate:neg p.rail dap.bowl))) + (emit (unsafe:guard (initiate:neg p.rail dap.bowl))) :: %chat-dm-rsvp =* rsvp=rsvp:dm:c p.rail @@ -2701,7 +2701,7 @@ (can-poke:neg bowl [ship dap.bowl]) == (emit (proxy-rsvp:di-pass ok)) - =. cor (emit (exit:guard (initiate:neg [ship dap.bowl]))) + =. cor (emit (unsafe:guard (initiate:neg [ship dap.bowl]))) ?. ok :: reject or leave the dm :: diff --git a/desk/app/groups.hoon b/desk/app/groups.hoon index db8416f359..e58dee4e0e 100644 --- a/desk/app/groups.hoon +++ b/desk/app/groups.hoon @@ -170,7 +170,7 @@ ^- (quip card _this) %- (slog term tang) :_ this - [(exit:guard (fail:log term tang ~))]~ + [(unsafe:guard (fail:log term tang ~))]~ :: ++ on-agent |= [=wire =sign:agent:gall] @@ -212,7 +212,7 @@ |= [desc=term =tang] ~> %spin.['fail'] =/ =card - %- exit:guard + %- unsafe:guard (~(fail logs our.bowl /logs) desc tang deez) (emit card) :: @@ -220,7 +220,7 @@ |= [vol=volume:logs =echo:logs] ~> %spin.['tell'] =/ =card - %- exit:guard + %- unsafe:guard (~(tell logs our.bowl /logs) vol echo deez) (emit card) :: +deez: log message details @@ -647,7 +647,7 @@ ?. ?=([%epic ~] wire) cor =^ caz=(list card:agent:gall) subs.cor (~(unsubscribe s [subs bowl]) wire dock) - (emil:cor (turn caz exit:guard)) + (emil:cor (turn caz unsafe:guard)) =? old ?=(%4 -.old) (state-4-to-5 old) =? old ?=(%5 -.old) (state-5-to-6 old) =^ caz-6-to-7=(list card) old @@ -661,7 +661,7 @@ =/ =dock [our.bowl %contacts] =^ caz=(list card:agent:gall) subs.cor (~(unsubscribe s [subs bowl]) /contact dock) - (emil:cor (turn caz exit:guard)) + (emil:cor (turn caz unsafe:guard)) =? old ?=(%8 -.old) (state-8-to-9 old) =^ caz-9-to-10=(list card) old ?. ?=(%9 -.old) [~ old] @@ -1469,7 +1469,7 @@ [%~.~ %retry rest=*] =^ caz=(list card:agent:gall) subs (~(handle-wakeup s [subs bowl]) pole) - (emil (turn caz exit:guard)) + (emil (turn caz unsafe:guard)) :: :: initialize .active-channels in $group :: @@ -1637,7 +1637,7 @@ ?: (~(has by wex.bowl) wire dock) cor =^ caz=(list card:agent:gall) subs (~(subscribe s [subs bowl]) wire dock path delay) - (emil (turn caz exit:guard)) + (emil (turn caz unsafe:guard)) :: +eager-leave: eagerly unsubscribe from a path :: :: deletes the subscription entry from wex.bowl @@ -1651,7 +1651,7 @@ =. wex.bowl (~(del by wex.bowl) wire dock) =^ caz=(list card:agent:gall) subs (~(unsubscribe s [subs bowl]) wire dock) - (emil (turn caz exit:guard)) + (emil (turn caz unsafe:guard)) :: ++ watch-channels (safe-watch /channels [our.bowl %channels] /v1) @@ -2751,7 +2751,7 @@ |= [=ship ivl=(list ship) =_se-core] ?. (can-poke:neg bowl ship %groups) =. se-core - (emit:se-core (exit:guard (initiate:neg [ship dap.bowl]))) + (emit:se-core (unsafe:guard (initiate:neg [ship dap.bowl]))) :: retry .retry times with doubling .delay :: =+ delay=~h1 @@ -4700,7 +4700,7 @@ =^ caz=(list card:agent:gall) subs =/ =dock [p.flag dap.bowl] (~(unsubscribe s [subs bowl]) (weld fi-area /preview) dock) - (emil (turn caz exit:guard)) + (emil (turn caz unsafe:guard)) =? fi-core |(?=(~ old-foreign) !=(u.old-foreign foreign)) fi-give-update cor @@ -4801,7 +4801,7 @@ ~> %spin.['fi-join'] ^+ fi-core =* log ~(. l `%group-join) - =. cor (emit (exit:guard (initiate:neg [p.flag server]))) + =. cor (emit (unsafe:guard (initiate:neg [p.flag server]))) :: leave the ask subscription in case it has not yet closed :: =? cor ?=([~ %ask] progress) @@ -4832,7 +4832,7 @@ |= story=(unit story:s:g) ~> %spin.['fi-ask'] ^+ fi-core - =. cor (emit (exit:guard (initiate:neg [p.flag server]))) + =. cor (emit (unsafe:guard (initiate:neg [p.flag server]))) ?: (~(has by groups) flag) fi-core ?: ?& ?=(^ progress) ?=(?(%ask %join %watch %done) u.progress) diff --git a/desk/lib/guard.hoon b/desk/lib/guard.hoon index ada38aa233..6e76ead56f 100644 --- a/desk/lib/guard.hoon +++ b/desk/lib/guard.hoon @@ -37,7 +37,7 @@ ?. ?=(%fact -.sign) (f wire sign) (f wire sign(cage (en-rail cage.sign))) :: -++ exit +++ unsafe :: gall-style card into unsafe guard-style card |= cad=card:agent:gall ^- card ?< ?=(%slip -.cad) From 6330e6fd0ada3e7cde4f61256f1bc3427c741330 Mon Sep 17 00:00:00 2001 From: fang Date: Tue, 12 May 2026 16:55:21 +0200 Subject: [PATCH 17/20] rail: comments --- desk/gen/rail.hoon | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/desk/gen/rail.hoon b/desk/gen/rail.hoon index 6ed9114354..8f3cac6aa5 100644 --- a/desk/gen/rail.hoon +++ b/desk/gen/rail.hoon @@ -1,6 +1,8 @@ -:: call as *=groups=/lib/rail/hoon +groups!rail +:: rail: code generator for /lib/rail.hoon :: -::TODO investigate adding a "meta-build" for rune that evaluates the file +:: call as *=groups=/lib/rail/hoon +groups!rail +:: +::TODO investigate adding a "meta-build" ford rune that evaluates the file :: to obtain a hoon ast, which it then compiles into the result :: =/ non-strict-marks=(set mark) From 4de733b189085dfd6380bdf3924257731288f754 Mon Sep 17 00:00:00 2001 From: fang Date: Tue, 12 May 2026 16:56:32 +0200 Subject: [PATCH 18/20] rail: un-strict %group-command mark --- desk/gen/rail.hoon | 1 + 1 file changed, 1 insertion(+) diff --git a/desk/gen/rail.hoon b/desk/gen/rail.hoon index 8f3cac6aa5..f8f1ae85fa 100644 --- a/desk/gen/rail.hoon +++ b/desk/gen/rail.hoon @@ -45,6 +45,7 @@ %hook-response-0 %hook-template :: + %group-command %group-update %group-log :: From e69950767997d18cbc7a9faa54d4ed7319640e38 Mon Sep 17 00:00:00 2001 From: fang Date: Tue, 19 May 2026 17:06:07 +0200 Subject: [PATCH 19/20] discipline: pull mark types from rail Instead of making the agent supply the marks itself, we now get mark types from /lib/rail's new +types map. Agents still specify the marks that they want checked for "strictness", which is to say, marks that the library should enforce don't get their types changed. --- desk/app/channels-server.hoon | 4 +- desk/app/channels.hoon | 45 ++- desk/app/chat.hoon | 96 ++--- desk/app/groups.hoon | 28 +- desk/gen/rail.hoon | 66 +-- desk/lib/discipline.hoon | 46 ++- desk/lib/rail.hoon | 742 +++++++++++++++++----------------- 7 files changed, 514 insertions(+), 513 deletions(-) diff --git a/desk/app/channels-server.hoon b/desk/app/channels-server.hoon index f59c3eea0d..0296f4343c 100644 --- a/desk/app/channels-server.hoon +++ b/desk/app/channels-server.hoon @@ -11,9 +11,9 @@ /+ hj=hooks-json :: %- %- discipline - :+ :: marks + :+ :: unchanging marks :: - discipline:guard + ~ :: facts :: :~ [/$/$/checkpoint %channel-checkpoint ~] diff --git a/desk/app/channels.hoon b/desk/app/channels.hoon index c5c4009bd8..33ac017a0a 100644 --- a/desk/app/channels.hoon +++ b/desk/app/channels.hoon @@ -20,9 +20,50 @@ /+ channel-json :: %- %- discipline - :+ :: marks + :+ :: unchanging marks :: - discipline:guard + :~ %channel-heads + %channel-heads-2 + %channel-heads-3 + %channel-heads-4 + %channel-perm + %channel-post-2 + %channel-post-3 + %channel-post-4 + %channel-posts-2 + %channel-posts-3 + %channel-replies + %channel-replies-2 + %channel-replies-3 + %channel-replies-4 + %channel-reply + %channel-reply-2 + %channel-response + %channel-response-2 + %channel-response-3 + %channel-response-4 + %channel-said + %channel-said-1 + %channel-said-2 + %channel-scan + %channel-scan-2 + %channel-scan-3 + %channel-scam + %channel-scam-2 + %channel-scam-3 + %channel-simple-post + %channel-simple-posts + %channel-simple-replies + %channel-simple-reply + %channel-unread-update + %channel-unreads + %channels + %channels-3 + %channels-4 + %hidden-posts + %hook-channel-preview + %toggle-post + == :: facts :: :~ [/ %channel-response %toggle-post ~] diff --git a/desk/app/chat.hoon b/desk/app/chat.hoon index 5a8c24c7b0..94ccca0e01 100644 --- a/desk/app/chat.hoon +++ b/desk/app/chat.hoon @@ -13,64 +13,52 @@ :: performance, keep warm /+ chat-json :: -/% m-chat-blocked-by %chat-blocked-by -/% m-chat-changed-writs %chat-changed-writs -/% m-chat-changed-writs-1 %chat-changed-writs-1 -/% m-chat-club-action %chat-club-action -/% m-chat-club-action-0 %chat-club-action-0 -/% m-chat-club-action-1 %chat-club-action-1 -/% m-chat-club-action-2 %chat-club-action-2 -/% m-chat-dm-action %chat-dm-action -/% m-chat-dm-action-1 %chat-dm-action-1 -/% m-chat-dm-action-2 %chat-dm-action-2 -/% m-chat-dm-diff %chat-dm-diff -/% m-chat-dm-diff-1 %chat-dm-diff-1 -/% m-chat-dm-diff-2 %chat-dm-diff-2 -/% m-chat-heads %chat-heads -/% m-chat-heads-1 %chat-heads-1 -/% m-chat-heads-2 %chat-heads-2 -/% m-chat-heads-3 %chat-heads-3 -/% m-chat-heads-4 %chat-heads-4 -/% m-chat-paged-writs %chat-paged-writs -/% m-chat-paged-writs-1 %chat-paged-writs-1 -/% m-chat-paged-writs-2 %chat-paged-writs-2 -/% m-chat-paged-writs-3 %chat-paged-writs-3 -/% m-chat-paged-writs-4 %chat-paged-writs-4 -/% m-chat-scam %chat-scam -/% m-chat-scam-1 %chat-scam-1 -/% m-chat-scam-2 %chat-scam-2 -/% m-chat-scam-3 %chat-scam-3 -/% m-chat-scam-4 %chat-scam-4 -/% m-chat-scan %chat-scan -/% m-chat-scan-1 %chat-scan-1 -/% m-chat-scan-2 %chat-scan-2 -/% m-chat-scan-3 %chat-scan-3 -/% m-chat-scan-4 %chat-scan-4 -/% m-chat-toggle-message %chat-toggle-message -/% m-chat-unblocked-by %chat-unblocked-by -/% m-chat-unread-update %chat-unread-update -/% m-chat-unreads %chat-unreads -/% m-chat-writ-1 %chat-writ-1 -/% m-chat-writ-2 %chat-writ-2 -/% m-chat-writ-3 %chat-writ-3 -/% m-chat-writ-4 %chat-writ-4 -/% m-clubs %clubs -/% m-epic %epic -/% m-hidden-messages %hidden-messages -/% m-ships %ships -/% m-writ %writ -/% m-writ-response %writ-response -/% m-writ-response-1 %writ-response-1 -/% m-writ-response-2 %writ-response-2 -/% m-writ-response-3 %writ-response-3 -/% m-writ-response-4 %writ-response-4 -:: /* desk-bill %bill /desk/bill :: keep warm :: %- %- discipline - :+ :: marks + :+ :: unchanging marks :: - discipline:guard + :~ %chat-blocked-by + %chat-changed-writs + %chat-club-action-0 + %chat-club-action-1 + %chat-dm-action + %chat-dm-action-1 + %chat-dm-diff + %chat-dm-diff-1 + %chat-heads + %chat-heads-1 + %chat-heads-2 + %chat-heads-3 + %chat-paged-writs + %chat-paged-writs-1 + %chat-paged-writs-2 + %chat-paged-writs-3 + %chat-scam + %chat-scam-1 + %chat-scam-2 + %chat-scam-3 + %chat-scan + %chat-scan-1 + %chat-scan-2 + %chat-scan-3 + %chat-toggle-message + %chat-unblocked-by + %chat-unread-update + %chat-unreads + %chat-writ-1 + %chat-writ-2 + %chat-writ-3 + %clubs + %epic + %hidden-messages + %ships + %writ + %writ-response + %writ-response-1 + %writ-response-2 + %writ-response-3 + == :: facts :: :~ [/ %chat-blocked-by %chat-unblocked-by %chat-toggle-message %chat-club-action %writ-response %ships ~] diff --git a/desk/app/groups.hoon b/desk/app/groups.hoon index e58dee4e0e..91b6cb203a 100644 --- a/desk/app/groups.hoon +++ b/desk/app/groups.hoon @@ -22,9 +22,33 @@ /* commit %txt /commit/txt :: %- %- discipline - :+ :: marks + :+ :: unchanging marks :: - discipline:guard + :~ %group + %group-1 + %group-2 + %groups + %groups-1 + %groups-2 + %groups-ui + %groups-ui-1 + %groups-ui-2 + %group-changed-groups-1 + %group-changed-groups-2 + %group-preview + %group-preview + %group-preview-3 + %group-previews + %group-previews-1 + %group-token + %channel-preview + %channel-preview-1 + %group-response-1 + %group-action-3 + %gangs + %foreign-1 + %foreigns-1 + == :: facts :: :~ [/server/groups/$/$/updates/$/$ %group-update %group-log ~] diff --git a/desk/gen/rail.hoon b/desk/gen/rail.hoon index f8f1ae85fa..11ed38e573 100644 --- a/desk/gen/rail.hoon +++ b/desk/gen/rail.hoon @@ -5,63 +5,6 @@ ::TODO investigate adding a "meta-build" ford rune that evaluates the file :: to obtain a hoon ast, which it then compiles into the result :: -=/ non-strict-marks=(set mark) - ^~ %- sy ^- (list mark) - :~ %chat-changed-writs-1 - %chat-club-action - %chat-club-action-2 - %chat-dm-action-2 - %chat-dm-diff-2 - %chat-heads-4 - %chat-paged-writs-4 - %chat-scam-4 - %chat-scan-4 - %chat-writ-4 - %writ-response-4 - :: - ::TODO make strict one day - %channel-changed-posts - %channel-changed-posts-1 - %channel-post - %channel-post-5 - %channel-posts - %channel-posts-4 - %channel-posts-5 - %channel-replies-5 - %channel-said-3 - %channel-scan-4 - %channel-scam-4 - %channels-2 - %channels-5 - :: - %channel-checkpoint - %channel-denied - %channel-logs - %channel-said-1 - %channel-said-2 - %channel-update - %hook-channel-preview - %hook-full - %hook-response-0 - %hook-template - :: - %group-command - %group-update - %group-log - :: - %activity-feed - %activity-feed-init - %activity-full - %activity-full-1 - %activity-summary - %activity-summary-1 - %activity-update - %activity-update-1 - %aqua-effect - %ui-init-2 - %ui-init-3 - == -:: :- %say |= $: [now=@da eny=@uvJ bec=beak] ~ @@ -172,8 +115,10 @@ ''' == :: - ++ discipline - ^- (list [=mark strict=? =type]) + ++ types + ^- (map mark type) ^~ + %- ~(gas by *(map mark type)) + ^- (list (pair mark type)) :~ ''' :: @@ -182,8 +127,7 @@ %+ turn maz |= m=mark =+ gap=(fil 3 (add 2 (sub max (met 3 m))) ' ') - =+ sic=?:((~(has in non-strict-marks) m) '|' '&') - (rap 3 ':+ %' m gap sic ' -:!>(*vale:' m ')' ~) + (rap 3 ':- %' m gap '-:!>(*vale:' m ')' ~) '\0a' :: ''' diff --git a/desk/lib/discipline.hoon b/desk/lib/discipline.hoon index fef064c93f..d3ecd7bda1 100644 --- a/desk/lib/discipline.hoon +++ b/desk/lib/discipline.hoon @@ -23,11 +23,10 @@ :: logged to posthog as criticals. :: :: usage example: -:: /% m-my-mark %my-mark :: %- %- discipline -:: :+ :: marks +:: :+ :: marks to check for changes :: :: -:: :~ [%my-mark strict=& -:!>(*vale:m-my-mark)] +:: :~ %my-mark :: == :: :: facts :: :: @@ -40,20 +39,16 @@ :: == :: rest-of-the-agent :: -/+ logs +/+ logs, rail :: /% m-noun %noun :: -|= $: marks=(list [=mark strict=? =type]) +|= $: marks=(list mark) facts=(list [=path marks=(list mark)]) :: first matching is used, ~ for any scries=(list [=path =mark]) == -:: take care of common marks, libraries +:: take care of common libraries :: -=. marks - =- (weld - marks) - :~ [%noun & -:!>(*vale:m-noun)] - == =. facts %+ weld ^- (list [path (list mark)]) @@ -80,10 +75,8 @@ =. facts (sort facts por) =. scries (sort scries por) :: -=/ mark-map=(map mark [strict=? =type]) - (~(gas by *(map mark [? type])) marks) -=/ mark-types=(map mark type) - (~(run by mark-map) tail) +=/ strict-marks=(set mark) + (~(gas in *(set mark)) marks) :: |= inner=agent:gall |^ agent @@ -119,6 +112,15 @@ `mark.i.scries $(scries t.scries) :: +++ build-types-map + |= strict-marks=(set mark) + %+ roll ~(tap in strict-marks) + |= [=mark types=(map mark type)] + ?: (~(has by types:rail) mark) + (~(put by types) mark (~(got by types:rail) mark)) + ~& [%discipline-unknown-mark mark] + types +:: ++ helper |_ [=bowl:gall marks=(map mark type)] ++ log ~(. logs our.bowl /~/discipline/logs) @@ -197,17 +199,16 @@ :: produces the marks that aren't equivalent :: ++ check-marks - |= [ole=(map mark type) neu=(map mark [strict=? =type])] + |= [ole=(map mark type) neu=(map mark type)] ^- (list mark) %+ murn ~(tap by ole) |= old=[=mark =type] ^- (unit mark) ?~ new=(~(get by neu) mark.old) ~ - ?. strict.u.new ~ =; match=? ?:(match ~ `mark.old) - ?& (~(nest ut type.old) | type.u.new) - (~(nest ut type.u.new) | type.old) + ?& (~(nest ut type.old) | u.new) + (~(nest ut u.new) | type.old) == -- :: @@ -228,7 +229,7 @@ :: ++ on-init ^- (quip card _this) - =. last-marks mark-types + =. last-marks (build-types-map strict-marks) =^ cards inner on-init:og !: =. cards (check-cards:help ~ cards) [cards this] @@ -238,16 +239,17 @@ |= ole=vase ^- (quip card _this) ?. ?=([[%discipline *] *] q.ole) - =. last-marks mark-types + =. last-marks (build-types-map strict-marks) =^ cards inner (on-load:og ole) !: =. cards (check-cards:help ~ cards) [cards this] =+ !<([%discipline old=state-0] (slot 2 ole)) =. state old - ?^ bad=(check-marks:help last-marks mark-map) + =/ next-marks (build-types-map strict-marks) + ?^ bad=(check-marks:help last-marks next-marks) ~| [%discipline dap=dap.bowl %mark-types-changed marks=;;((list mark) bad)] !! - =. last-marks mark-types + =. last-marks next-marks =^ cards inner (on-load:og (slot 3 ole)) !: =. cards (check-cards:help ~ cards) [cards this] diff --git a/desk/lib/rail.hoon b/desk/lib/rail.hoon index 19f193dbdf..94bd47265c 100644 --- a/desk/lib/rail.hoon +++ b/desk/lib/rail.hoon @@ -1504,375 +1504,377 @@ %xml [p !<(_*vale:xml q)] == :: -++ discipline - ^- (list [=mark strict=? =type]) - :~ :+ %activity-action & -:!>(*vale:activity-action) - :+ %activity-allowed & -:!>(*vale:activity-allowed) - :+ %activity-event & -:!>(*vale:activity-event) - :+ %activity-feed | -:!>(*vale:activity-feed) - :+ %activity-feed-5 & -:!>(*vale:activity-feed-5) - :+ %activity-feed-init | -:!>(*vale:activity-feed-init) - :+ %activity-feed-init-5 & -:!>(*vale:activity-feed-init-5) - :+ %activity-full | -:!>(*vale:activity-full) - :+ %activity-full-1 | -:!>(*vale:activity-full-1) - :+ %activity-full-4 & -:!>(*vale:activity-full-4) - :+ %activity-settings & -:!>(*vale:activity-settings) - :+ %activity-stream & -:!>(*vale:activity-stream) - :+ %activity-summary | -:!>(*vale:activity-summary) - :+ %activity-summary-1 | -:!>(*vale:activity-summary-1) - :+ %activity-summary-4 & -:!>(*vale:activity-summary-4) - :+ %activity-summary-pairs-4 & -:!>(*vale:activity-summary-pairs-4) - :+ %activity-update | -:!>(*vale:activity-update) - :+ %activity-update-1 | -:!>(*vale:activity-update-1) - :+ %activity-update-4 & -:!>(*vale:activity-update-4) - :+ %aqua-effect | -:!>(*vale:aqua-effect) - :+ %atom & -:!>(*vale:atom) - :+ %bait-acknowledge & -:!>(*vale:bait-acknowledge) - :+ %bait-describe & -:!>(*vale:bait-describe) - :+ %bait-undescribe & -:!>(*vale:bait-undescribe) - :+ %bait-update & -:!>(*vale:bait-update) - :+ %bait-update-group & -:!>(*vale:bait-update-group) - :+ %bark-add-recipient & -:!>(*vale:bark-add-recipient) - :+ %bark-receive-summary & -:!>(*vale:bark-receive-summary) - :+ %bark-remove-recipient & -:!>(*vale:bark-remove-recipient) - :+ %belt & -:!>(*vale:belt) - :+ %bill & -:!>(*vale:bill) - :+ %blit & -:!>(*vale:blit) - :+ %broadcaster-action & -:!>(*vale:broadcaster-action) - :+ %channel-action & -:!>(*vale:channel-action) - :+ %channel-action-1 & -:!>(*vale:channel-action-1) - :+ %channel-action-2 & -:!>(*vale:channel-action-2) - :+ %channel-changed-posts | -:!>(*vale:channel-changed-posts) - :+ %channel-changed-posts-1 | -:!>(*vale:channel-changed-posts-1) - :+ %channel-checkpoint | -:!>(*vale:channel-checkpoint) - :+ %channel-command & -:!>(*vale:channel-command) - :+ %channel-denied | -:!>(*vale:channel-denied) - :+ %channel-heads & -:!>(*vale:channel-heads) - :+ %channel-heads-2 & -:!>(*vale:channel-heads-2) - :+ %channel-heads-3 & -:!>(*vale:channel-heads-3) - :+ %channel-heads-4 & -:!>(*vale:channel-heads-4) - :+ %channel-leave & -:!>(*vale:channel-leave) - :+ %channel-logs | -:!>(*vale:channel-logs) - :+ %channel-perm & -:!>(*vale:channel-perm) - :+ %channel-post | -:!>(*vale:channel-post) - :+ %channel-post-2 & -:!>(*vale:channel-post-2) - :+ %channel-post-3 & -:!>(*vale:channel-post-3) - :+ %channel-post-4 & -:!>(*vale:channel-post-4) - :+ %channel-post-5 | -:!>(*vale:channel-post-5) - :+ %channel-posts | -:!>(*vale:channel-posts) - :+ %channel-posts-2 & -:!>(*vale:channel-posts-2) - :+ %channel-posts-3 & -:!>(*vale:channel-posts-3) - :+ %channel-posts-4 | -:!>(*vale:channel-posts-4) - :+ %channel-posts-5 | -:!>(*vale:channel-posts-5) - :+ %channel-preview & -:!>(*vale:channel-preview) - :+ %channel-preview-1 & -:!>(*vale:channel-preview-1) - :+ %channel-replies & -:!>(*vale:channel-replies) - :+ %channel-replies-2 & -:!>(*vale:channel-replies-2) - :+ %channel-replies-3 & -:!>(*vale:channel-replies-3) - :+ %channel-replies-4 & -:!>(*vale:channel-replies-4) - :+ %channel-replies-5 | -:!>(*vale:channel-replies-5) - :+ %channel-reply & -:!>(*vale:channel-reply) - :+ %channel-reply-2 & -:!>(*vale:channel-reply-2) - :+ %channel-request-join & -:!>(*vale:channel-request-join) - :+ %channel-response & -:!>(*vale:channel-response) - :+ %channel-response-1 & -:!>(*vale:channel-response-1) - :+ %channel-response-2 & -:!>(*vale:channel-response-2) - :+ %channel-response-3 & -:!>(*vale:channel-response-3) - :+ %channel-response-4 & -:!>(*vale:channel-response-4) - :+ %channel-response-5 & -:!>(*vale:channel-response-5) - :+ %channel-said & -:!>(*vale:channel-said) - :+ %channel-said-1 | -:!>(*vale:channel-said-1) - :+ %channel-said-2 | -:!>(*vale:channel-said-2) - :+ %channel-said-3 | -:!>(*vale:channel-said-3) - :+ %channel-scam & -:!>(*vale:channel-scam) - :+ %channel-scam-2 & -:!>(*vale:channel-scam-2) - :+ %channel-scam-3 & -:!>(*vale:channel-scam-3) - :+ %channel-scam-4 | -:!>(*vale:channel-scam-4) - :+ %channel-scan & -:!>(*vale:channel-scan) - :+ %channel-scan-2 & -:!>(*vale:channel-scan-2) - :+ %channel-scan-3 & -:!>(*vale:channel-scan-3) - :+ %channel-scan-4 | -:!>(*vale:channel-scan-4) - :+ %channel-simple-post & -:!>(*vale:channel-simple-post) - :+ %channel-simple-posts & -:!>(*vale:channel-simple-posts) - :+ %channel-simple-replies & -:!>(*vale:channel-simple-replies) - :+ %channel-simple-reply & -:!>(*vale:channel-simple-reply) - :+ %channel-simple-response & -:!>(*vale:channel-simple-response) - :+ %channel-unread-update & -:!>(*vale:channel-unread-update) - :+ %channel-unreads & -:!>(*vale:channel-unreads) - :+ %channel-update | -:!>(*vale:channel-update) - :+ %channels & -:!>(*vale:channels) - :+ %channels-2 | -:!>(*vale:channels-2) - :+ %channels-3 & -:!>(*vale:channels-3) - :+ %channels-4 & -:!>(*vale:channels-4) - :+ %channels-5 | -:!>(*vale:channels-5) - :+ %chat-block-ship & -:!>(*vale:chat-block-ship) - :+ %chat-blocked & -:!>(*vale:chat-blocked) - :+ %chat-blocked-by & -:!>(*vale:chat-blocked-by) - :+ %chat-changed-writs & -:!>(*vale:chat-changed-writs) - :+ %chat-changed-writs-1 | -:!>(*vale:chat-changed-writs-1) - :+ %chat-club-action | -:!>(*vale:chat-club-action) - :+ %chat-club-action-0 & -:!>(*vale:chat-club-action-0) - :+ %chat-club-action-1 & -:!>(*vale:chat-club-action-1) - :+ %chat-club-action-2 | -:!>(*vale:chat-club-action-2) - :+ %chat-club-create & -:!>(*vale:chat-club-create) - :+ %chat-dm-action & -:!>(*vale:chat-dm-action) - :+ %chat-dm-action-1 & -:!>(*vale:chat-dm-action-1) - :+ %chat-dm-action-2 | -:!>(*vale:chat-dm-action-2) - :+ %chat-dm-archive & -:!>(*vale:chat-dm-archive) - :+ %chat-dm-diff & -:!>(*vale:chat-dm-diff) - :+ %chat-dm-diff-1 & -:!>(*vale:chat-dm-diff-1) - :+ %chat-dm-diff-2 | -:!>(*vale:chat-dm-diff-2) - :+ %chat-dm-rsvp & -:!>(*vale:chat-dm-rsvp) - :+ %chat-heads & -:!>(*vale:chat-heads) - :+ %chat-heads-1 & -:!>(*vale:chat-heads-1) - :+ %chat-heads-2 & -:!>(*vale:chat-heads-2) - :+ %chat-heads-3 & -:!>(*vale:chat-heads-3) - :+ %chat-heads-4 | -:!>(*vale:chat-heads-4) - :+ %chat-negotiate & -:!>(*vale:chat-negotiate) - :+ %chat-paged-writs & -:!>(*vale:chat-paged-writs) - :+ %chat-paged-writs-1 & -:!>(*vale:chat-paged-writs-1) - :+ %chat-paged-writs-2 & -:!>(*vale:chat-paged-writs-2) - :+ %chat-paged-writs-3 & -:!>(*vale:chat-paged-writs-3) - :+ %chat-paged-writs-4 | -:!>(*vale:chat-paged-writs-4) - :+ %chat-remark-action & -:!>(*vale:chat-remark-action) - :+ %chat-scam & -:!>(*vale:chat-scam) - :+ %chat-scam-1 & -:!>(*vale:chat-scam-1) - :+ %chat-scam-2 & -:!>(*vale:chat-scam-2) - :+ %chat-scam-3 & -:!>(*vale:chat-scam-3) - :+ %chat-scam-4 | -:!>(*vale:chat-scam-4) - :+ %chat-scan & -:!>(*vale:chat-scan) - :+ %chat-scan-1 & -:!>(*vale:chat-scan-1) - :+ %chat-scan-2 & -:!>(*vale:chat-scan-2) - :+ %chat-scan-3 & -:!>(*vale:chat-scan-3) - :+ %chat-scan-4 | -:!>(*vale:chat-scan-4) - :+ %chat-toggle-message & -:!>(*vale:chat-toggle-message) - :+ %chat-unblock-ship & -:!>(*vale:chat-unblock-ship) - :+ %chat-unblocked & -:!>(*vale:chat-unblocked) - :+ %chat-unblocked-by & -:!>(*vale:chat-unblocked-by) - :+ %chat-unread-update & -:!>(*vale:chat-unread-update) - :+ %chat-unreads & -:!>(*vale:chat-unreads) - :+ %chat-writ-1 & -:!>(*vale:chat-writ-1) - :+ %chat-writ-2 & -:!>(*vale:chat-writ-2) - :+ %chat-writ-3 & -:!>(*vale:chat-writ-3) - :+ %chat-writ-4 | -:!>(*vale:chat-writ-4) - :+ %club-action & -:!>(*vale:club-action) - :+ %clubs & -:!>(*vale:clubs) - :+ %contact & -:!>(*vale:contact) - :+ %contact-0 & -:!>(*vale:contact-0) - :+ %contact-1 & -:!>(*vale:contact-1) - :+ %contact-action & -:!>(*vale:contact-action) - :+ %contact-action-0 & -:!>(*vale:contact-action-0) - :+ %contact-action-1 & -:!>(*vale:contact-action-1) - :+ %contact-book & -:!>(*vale:contact-book) - :+ %contact-book-0 & -:!>(*vale:contact-book-0) - :+ %contact-changed-contacts & -:!>(*vale:contact-changed-contacts) - :+ %contact-changed-pages & -:!>(*vale:contact-changed-pages) - :+ %contact-directory & -:!>(*vale:contact-directory) - :+ %contact-directory-0 & -:!>(*vale:contact-directory-0) - :+ %contact-news & -:!>(*vale:contact-news) - :+ %contact-page & -:!>(*vale:contact-page) - :+ %contact-page-0 & -:!>(*vale:contact-page-0) - :+ %contact-page-1 & -:!>(*vale:contact-page-1) - :+ %contact-response-0 & -:!>(*vale:contact-response-0) - :+ %contact-rolodex & -:!>(*vale:contact-rolodex) - :+ %contact-update & -:!>(*vale:contact-update) - :+ %contact-update-0 & -:!>(*vale:contact-update-0) - :+ %contact-update-1 & -:!>(*vale:contact-update-1) - :+ %css & -:!>(*vale:css) - :+ %dm-action & -:!>(*vale:dm-action) - :+ %dm-archive & -:!>(*vale:dm-archive) - :+ %dm-diff & -:!>(*vale:dm-diff) - :+ %dm-rsvp & -:!>(*vale:dm-rsvp) - :+ %dm-unarchive & -:!>(*vale:dm-unarchive) - :+ %docket-0 & -:!>(*vale:docket-0) - :+ %dude & -:!>(*vale:dude) - :+ %dummy & -:!>(*vale:dummy) - :+ %egg-any & -:!>(*vale:egg-any) - :+ %emojimart & -:!>(*vale:emojimart) - :+ %epic & -:!>(*vale:epic) - :+ %flag & -:!>(*vale:flag) - :+ %flags & -:!>(*vale:flags) - :+ %foreign-1 & -:!>(*vale:foreign-1) - :+ %foreign-2 & -:!>(*vale:foreign-2) - :+ %foreigns-1 & -:!>(*vale:foreigns-1) - :+ %foreigns-2 & -:!>(*vale:foreigns-2) - :+ %gangs & -:!>(*vale:gangs) - :+ %gateway-status-action-1 & -:!>(*vale:gateway-status-action-1) - :+ %gateway-status-update-1 & -:!>(*vale:gateway-status-update-1) - :+ %group & -:!>(*vale:group) - :+ %group-1 & -:!>(*vale:group-1) - :+ %group-2 & -:!>(*vale:group-2) - :+ %group-action & -:!>(*vale:group-action) - :+ %group-action-0 & -:!>(*vale:group-action-0) - :+ %group-action-1 & -:!>(*vale:group-action-1) - :+ %group-action-2 & -:!>(*vale:group-action-2) - :+ %group-action-3 & -:!>(*vale:group-action-3) - :+ %group-action-4 & -:!>(*vale:group-action-4) - :+ %group-cancel & -:!>(*vale:group-cancel) - :+ %group-changed-groups-1 & -:!>(*vale:group-changed-groups-1) - :+ %group-changed-groups-2 & -:!>(*vale:group-changed-groups-2) - :+ %group-command & -:!>(*vale:group-command) - :+ %group-create-thread & -:!>(*vale:group-create-thread) - :+ %group-foreign-1 & -:!>(*vale:group-foreign-1) - :+ %group-foreign-2 & -:!>(*vale:group-foreign-2) - :+ %group-init & -:!>(*vale:group-init) - :+ %group-init-0 & -:!>(*vale:group-init-0) - :+ %group-init-1 & -:!>(*vale:group-init-1) - :+ %group-init-2 & -:!>(*vale:group-init-2) - :+ %group-init-3 & -:!>(*vale:group-init-3) - :+ %group-init-4 & -:!>(*vale:group-init-4) - :+ %group-invite & -:!>(*vale:group-invite) - :+ %group-invite-1 & -:!>(*vale:group-invite-1) - :+ %group-join & -:!>(*vale:group-join) - :+ %group-knock & -:!>(*vale:group-knock) - :+ %group-leave & -:!>(*vale:group-leave) - :+ %group-log | -:!>(*vale:group-log) - :+ %group-preview & -:!>(*vale:group-preview) - :+ %group-preview-1 & -:!>(*vale:group-preview-1) - :+ %group-preview-2 & -:!>(*vale:group-preview-2) - :+ %group-preview-3 & -:!>(*vale:group-preview-3) - :+ %group-previews & -:!>(*vale:group-previews) - :+ %group-previews-1 & -:!>(*vale:group-previews-1) - :+ %group-rescind & -:!>(*vale:group-rescind) - :+ %group-response-1 & -:!>(*vale:group-response-1) - :+ %group-token & -:!>(*vale:group-token) - :+ %group-ui & -:!>(*vale:group-ui) - :+ %group-ui-1 & -:!>(*vale:group-ui-1) - :+ %group-ui-2 & -:!>(*vale:group-ui-2) - :+ %group-update | -:!>(*vale:group-update) - :+ %grouper-answer-enabled & -:!>(*vale:grouper-answer-enabled) - :+ %grouper-ask-enabled & -:!>(*vale:grouper-ask-enabled) - :+ %grouper-disable & -:!>(*vale:grouper-disable) - :+ %grouper-enable & -:!>(*vale:grouper-enable) - :+ %groups & -:!>(*vale:groups) - :+ %groups-1 & -:!>(*vale:groups-1) - :+ %groups-2 & -:!>(*vale:groups-2) - :+ %groups-ui & -:!>(*vale:groups-ui) - :+ %groups-ui-1 & -:!>(*vale:groups-ui-1) - :+ %groups-ui-2 & -:!>(*vale:groups-ui-2) - :+ %growl-summarize & -:!>(*vale:growl-summarize) - :+ %hi-ship & -:!>(*vale:hi-ship) - :+ %hidden-messages & -:!>(*vale:hidden-messages) - :+ %hidden-posts & -:!>(*vale:hidden-posts) - :+ %holt & -:!>(*vale:holt) - :+ %hook-action-0 & -:!>(*vale:hook-action-0) - :+ %hook-channel-preview | -:!>(*vale:hook-channel-preview) - :+ %hook-full | -:!>(*vale:hook-full) - :+ %hook-response-0 | -:!>(*vale:hook-response-0) - :+ %hook-setup-template & -:!>(*vale:hook-setup-template) - :+ %hook-setup-template-args & -:!>(*vale:hook-setup-template-args) - :+ %hook-template | -:!>(*vale:hook-template) - :+ %hoon & -:!>(*vale:hoon) - :+ %htm & -:!>(*vale:htm) - :+ %html & -:!>(*vale:html) - :+ %httr & -:!>(*vale:httr) - :+ %hymn & -:!>(*vale:hymn) - :+ %invite-decline & -:!>(*vale:invite-decline) - :+ %jam & -:!>(*vale:jam) - :+ %jpg & -:!>(*vale:jpg) - :+ %js & -:!>(*vale:js) - :+ %json & -:!>(*vale:json) - :+ %json-rpc-response & -:!>(*vale:json-rpc-response) - :+ %kelvin & -:!>(*vale:kelvin) - :+ %kiln-approve-merge & -:!>(*vale:kiln-approve-merge) - :+ %kiln-jump & -:!>(*vale:kiln-jump) - :+ %kiln-jump-ask & -:!>(*vale:kiln-jump-ask) - :+ %kiln-jump-opt & -:!>(*vale:kiln-jump-opt) - :+ %kiln-sync-update & -:!>(*vale:kiln-sync-update) - :+ %language-server-rpc-notification & -:!>(*vale:language-server-rpc-notification) - :+ %language-server-rpc-request & -:!>(*vale:language-server-rpc-request) - :+ %language-server-rpc-response & -:!>(*vale:language-server-rpc-response) - :+ %lanyard-command-1 & -:!>(*vale:lanyard-command-1) - :+ %lanyard-query-1 & -:!>(*vale:lanyard-query-1) - :+ %lanyard-update-1 & -:!>(*vale:lanyard-update-1) - :+ %loob & -:!>(*vale:loob) - :+ %mass & -:!>(*vale:mass) - :+ %mime & -:!>(*vale:mime) - :+ %negotiate-reset & -:!>(*vale:negotiate-reset) - :+ %nest & -:!>(*vale:nest) - :+ %notify-client-action & -:!>(*vale:notify-client-action) - :+ %notify-provider-action & -:!>(*vale:notify-provider-action) - :+ %notify-update & -:!>(*vale:notify-update) - :+ %notify-update-1 & -:!>(*vale:notify-update-1) - :+ %noun & -:!>(*vale:noun) - :+ %noun-autodiff & -:!>(*vale:noun-autodiff) - :+ %path & -:!>(*vale:path) - :+ %png & -:!>(*vale:png) - :+ %presence-action-1 & -:!>(*vale:presence-action-1) - :+ %presence-command-1 & -:!>(*vale:presence-command-1) - :+ %presence-response-1 & -:!>(*vale:presence-response-1) - :+ %presence-update-1 & -:!>(*vale:presence-update-1) - :+ %purl & -:!>(*vale:purl) - :+ %reel-bait & -:!>(*vale:reel-bait) - :+ %reel-bite & -:!>(*vale:reel-bite) - :+ %reel-command & -:!>(*vale:reel-command) - :+ %reel-confirmation & -:!>(*vale:reel-confirmation) - :+ %reel-describe & -:!>(*vale:reel-describe) - :+ %reel-description & -:!>(*vale:reel-description) - :+ %reel-give-token-link & -:!>(*vale:reel-give-token-link) - :+ %reel-metadata & -:!>(*vale:reel-metadata) - :+ %reel-undescribe & -:!>(*vale:reel-undescribe) - :+ %reel-want-token-link & -:!>(*vale:reel-want-token-link) - :+ %release & -:!>(*vale:release) - :+ %reset-group-perms & -:!>(*vale:reset-group-perms) - :+ %ship & -:!>(*vale:ship) - :+ %ships & -:!>(*vale:ships) - :+ %sigil & -:!>(*vale:sigil) - :+ %sole-action & -:!>(*vale:sole-action) - :+ %sole-effect & -:!>(*vale:sole-effect) - :+ %svg & -:!>(*vale:svg) - :+ %tang & -:!>(*vale:tang) - :+ %tape & -:!>(*vale:tape) - :+ %thread-done & -:!>(*vale:thread-done) - :+ %thread-fail & -:!>(*vale:thread-fail) - :+ %toc & -:!>(*vale:toc) - :+ %toggle-post & -:!>(*vale:toggle-post) - :+ %txt & -:!>(*vale:txt) - :+ %txt-diff & -:!>(*vale:txt-diff) - :+ %udon & -:!>(*vale:udon) - :+ %ui-action & -:!>(*vale:ui-action) - :+ %ui-add-contact-suggestions & -:!>(*vale:ui-add-contact-suggestions) - :+ %ui-heads & -:!>(*vale:ui-heads) - :+ %ui-heads-2 & -:!>(*vale:ui-heads-2) - :+ %ui-heads-3 & -:!>(*vale:ui-heads-3) - :+ %ui-heads-4 & -:!>(*vale:ui-heads-4) - :+ %ui-hide-contact & -:!>(*vale:ui-hide-contact) - :+ %ui-import-pals & -:!>(*vale:ui-import-pals) - :+ %ui-init & -:!>(*vale:ui-init) - :+ %ui-init-1 & -:!>(*vale:ui-init-1) - :+ %ui-init-2 | -:!>(*vale:ui-init-2) - :+ %ui-init-3 | -:!>(*vale:ui-init-3) - :+ %ui-init-4 & -:!>(*vale:ui-init-4) - :+ %ui-init-5 & -:!>(*vale:ui-init-5) - :+ %ui-init-6 & -:!>(*vale:ui-init-6) - :+ %ui-init-7 & -:!>(*vale:ui-init-7) - :+ %ui-pins & -:!>(*vale:ui-pins) - :+ %ui-show-contact & -:!>(*vale:ui-show-contact) - :+ %ui-vita & -:!>(*vale:ui-vita) - :+ %ui-vita-toggle & -:!>(*vale:ui-vita-toggle) - :+ %umd & -:!>(*vale:umd) - :+ %urb & -:!>(*vale:urb) - :+ %urbit & -:!>(*vale:urbit) - :+ %verb & -:!>(*vale:verb) - :+ %verb-event & -:!>(*vale:verb-event) - :+ %verb-event-plus & -:!>(*vale:verb-event-plus) - :+ %vere & -:!>(*vale:vere) - :+ %verifier-result & -:!>(*vale:verifier-result) - :+ %verifier-update & -:!>(*vale:verifier-update) - :+ %verifier-user-command & -:!>(*vale:verifier-user-command) - :+ %verifier-user-query & -:!>(*vale:verifier-user-query) - :+ %volume-set & -:!>(*vale:volume-set) - :+ %volume-value & -:!>(*vale:volume-value) - :+ %wasm & -:!>(*vale:wasm) - :+ %webmanifest & -:!>(*vale:webmanifest) - :+ %woff2 & -:!>(*vale:woff2) - :+ %writ & -:!>(*vale:writ) - :+ %writ-response & -:!>(*vale:writ-response) - :+ %writ-response-1 & -:!>(*vale:writ-response-1) - :+ %writ-response-2 & -:!>(*vale:writ-response-2) - :+ %writ-response-3 & -:!>(*vale:writ-response-3) - :+ %writ-response-4 | -:!>(*vale:writ-response-4) - :+ %xhtml & -:!>(*vale:xhtml) - :+ %xml & -:!>(*vale:xml) +++ types + ^- (map mark type) ^~ + %- ~(gas by *(map mark type)) + ^- (list (pair mark type)) + :~ :- %activity-action -:!>(*vale:activity-action) + :- %activity-allowed -:!>(*vale:activity-allowed) + :- %activity-event -:!>(*vale:activity-event) + :- %activity-feed -:!>(*vale:activity-feed) + :- %activity-feed-5 -:!>(*vale:activity-feed-5) + :- %activity-feed-init -:!>(*vale:activity-feed-init) + :- %activity-feed-init-5 -:!>(*vale:activity-feed-init-5) + :- %activity-full -:!>(*vale:activity-full) + :- %activity-full-1 -:!>(*vale:activity-full-1) + :- %activity-full-4 -:!>(*vale:activity-full-4) + :- %activity-settings -:!>(*vale:activity-settings) + :- %activity-stream -:!>(*vale:activity-stream) + :- %activity-summary -:!>(*vale:activity-summary) + :- %activity-summary-1 -:!>(*vale:activity-summary-1) + :- %activity-summary-4 -:!>(*vale:activity-summary-4) + :- %activity-summary-pairs-4 -:!>(*vale:activity-summary-pairs-4) + :- %activity-update -:!>(*vale:activity-update) + :- %activity-update-1 -:!>(*vale:activity-update-1) + :- %activity-update-4 -:!>(*vale:activity-update-4) + :- %aqua-effect -:!>(*vale:aqua-effect) + :- %atom -:!>(*vale:atom) + :- %bait-acknowledge -:!>(*vale:bait-acknowledge) + :- %bait-describe -:!>(*vale:bait-describe) + :- %bait-undescribe -:!>(*vale:bait-undescribe) + :- %bait-update -:!>(*vale:bait-update) + :- %bait-update-group -:!>(*vale:bait-update-group) + :- %bark-add-recipient -:!>(*vale:bark-add-recipient) + :- %bark-receive-summary -:!>(*vale:bark-receive-summary) + :- %bark-remove-recipient -:!>(*vale:bark-remove-recipient) + :- %belt -:!>(*vale:belt) + :- %bill -:!>(*vale:bill) + :- %blit -:!>(*vale:blit) + :- %broadcaster-action -:!>(*vale:broadcaster-action) + :- %channel-action -:!>(*vale:channel-action) + :- %channel-action-1 -:!>(*vale:channel-action-1) + :- %channel-action-2 -:!>(*vale:channel-action-2) + :- %channel-changed-posts -:!>(*vale:channel-changed-posts) + :- %channel-changed-posts-1 -:!>(*vale:channel-changed-posts-1) + :- %channel-checkpoint -:!>(*vale:channel-checkpoint) + :- %channel-command -:!>(*vale:channel-command) + :- %channel-denied -:!>(*vale:channel-denied) + :- %channel-heads -:!>(*vale:channel-heads) + :- %channel-heads-2 -:!>(*vale:channel-heads-2) + :- %channel-heads-3 -:!>(*vale:channel-heads-3) + :- %channel-heads-4 -:!>(*vale:channel-heads-4) + :- %channel-leave -:!>(*vale:channel-leave) + :- %channel-logs -:!>(*vale:channel-logs) + :- %channel-perm -:!>(*vale:channel-perm) + :- %channel-post -:!>(*vale:channel-post) + :- %channel-post-2 -:!>(*vale:channel-post-2) + :- %channel-post-3 -:!>(*vale:channel-post-3) + :- %channel-post-4 -:!>(*vale:channel-post-4) + :- %channel-post-5 -:!>(*vale:channel-post-5) + :- %channel-posts -:!>(*vale:channel-posts) + :- %channel-posts-2 -:!>(*vale:channel-posts-2) + :- %channel-posts-3 -:!>(*vale:channel-posts-3) + :- %channel-posts-4 -:!>(*vale:channel-posts-4) + :- %channel-posts-5 -:!>(*vale:channel-posts-5) + :- %channel-preview -:!>(*vale:channel-preview) + :- %channel-preview-1 -:!>(*vale:channel-preview-1) + :- %channel-replies -:!>(*vale:channel-replies) + :- %channel-replies-2 -:!>(*vale:channel-replies-2) + :- %channel-replies-3 -:!>(*vale:channel-replies-3) + :- %channel-replies-4 -:!>(*vale:channel-replies-4) + :- %channel-replies-5 -:!>(*vale:channel-replies-5) + :- %channel-reply -:!>(*vale:channel-reply) + :- %channel-reply-2 -:!>(*vale:channel-reply-2) + :- %channel-request-join -:!>(*vale:channel-request-join) + :- %channel-response -:!>(*vale:channel-response) + :- %channel-response-1 -:!>(*vale:channel-response-1) + :- %channel-response-2 -:!>(*vale:channel-response-2) + :- %channel-response-3 -:!>(*vale:channel-response-3) + :- %channel-response-4 -:!>(*vale:channel-response-4) + :- %channel-response-5 -:!>(*vale:channel-response-5) + :- %channel-said -:!>(*vale:channel-said) + :- %channel-said-1 -:!>(*vale:channel-said-1) + :- %channel-said-2 -:!>(*vale:channel-said-2) + :- %channel-said-3 -:!>(*vale:channel-said-3) + :- %channel-scam -:!>(*vale:channel-scam) + :- %channel-scam-2 -:!>(*vale:channel-scam-2) + :- %channel-scam-3 -:!>(*vale:channel-scam-3) + :- %channel-scam-4 -:!>(*vale:channel-scam-4) + :- %channel-scan -:!>(*vale:channel-scan) + :- %channel-scan-2 -:!>(*vale:channel-scan-2) + :- %channel-scan-3 -:!>(*vale:channel-scan-3) + :- %channel-scan-4 -:!>(*vale:channel-scan-4) + :- %channel-simple-post -:!>(*vale:channel-simple-post) + :- %channel-simple-posts -:!>(*vale:channel-simple-posts) + :- %channel-simple-replies -:!>(*vale:channel-simple-replies) + :- %channel-simple-reply -:!>(*vale:channel-simple-reply) + :- %channel-simple-response -:!>(*vale:channel-simple-response) + :- %channel-unread-update -:!>(*vale:channel-unread-update) + :- %channel-unreads -:!>(*vale:channel-unreads) + :- %channel-update -:!>(*vale:channel-update) + :- %channels -:!>(*vale:channels) + :- %channels-2 -:!>(*vale:channels-2) + :- %channels-3 -:!>(*vale:channels-3) + :- %channels-4 -:!>(*vale:channels-4) + :- %channels-5 -:!>(*vale:channels-5) + :- %chat-block-ship -:!>(*vale:chat-block-ship) + :- %chat-blocked -:!>(*vale:chat-blocked) + :- %chat-blocked-by -:!>(*vale:chat-blocked-by) + :- %chat-changed-writs -:!>(*vale:chat-changed-writs) + :- %chat-changed-writs-1 -:!>(*vale:chat-changed-writs-1) + :- %chat-club-action -:!>(*vale:chat-club-action) + :- %chat-club-action-0 -:!>(*vale:chat-club-action-0) + :- %chat-club-action-1 -:!>(*vale:chat-club-action-1) + :- %chat-club-action-2 -:!>(*vale:chat-club-action-2) + :- %chat-club-create -:!>(*vale:chat-club-create) + :- %chat-dm-action -:!>(*vale:chat-dm-action) + :- %chat-dm-action-1 -:!>(*vale:chat-dm-action-1) + :- %chat-dm-action-2 -:!>(*vale:chat-dm-action-2) + :- %chat-dm-archive -:!>(*vale:chat-dm-archive) + :- %chat-dm-diff -:!>(*vale:chat-dm-diff) + :- %chat-dm-diff-1 -:!>(*vale:chat-dm-diff-1) + :- %chat-dm-diff-2 -:!>(*vale:chat-dm-diff-2) + :- %chat-dm-rsvp -:!>(*vale:chat-dm-rsvp) + :- %chat-heads -:!>(*vale:chat-heads) + :- %chat-heads-1 -:!>(*vale:chat-heads-1) + :- %chat-heads-2 -:!>(*vale:chat-heads-2) + :- %chat-heads-3 -:!>(*vale:chat-heads-3) + :- %chat-heads-4 -:!>(*vale:chat-heads-4) + :- %chat-negotiate -:!>(*vale:chat-negotiate) + :- %chat-paged-writs -:!>(*vale:chat-paged-writs) + :- %chat-paged-writs-1 -:!>(*vale:chat-paged-writs-1) + :- %chat-paged-writs-2 -:!>(*vale:chat-paged-writs-2) + :- %chat-paged-writs-3 -:!>(*vale:chat-paged-writs-3) + :- %chat-paged-writs-4 -:!>(*vale:chat-paged-writs-4) + :- %chat-remark-action -:!>(*vale:chat-remark-action) + :- %chat-scam -:!>(*vale:chat-scam) + :- %chat-scam-1 -:!>(*vale:chat-scam-1) + :- %chat-scam-2 -:!>(*vale:chat-scam-2) + :- %chat-scam-3 -:!>(*vale:chat-scam-3) + :- %chat-scam-4 -:!>(*vale:chat-scam-4) + :- %chat-scan -:!>(*vale:chat-scan) + :- %chat-scan-1 -:!>(*vale:chat-scan-1) + :- %chat-scan-2 -:!>(*vale:chat-scan-2) + :- %chat-scan-3 -:!>(*vale:chat-scan-3) + :- %chat-scan-4 -:!>(*vale:chat-scan-4) + :- %chat-toggle-message -:!>(*vale:chat-toggle-message) + :- %chat-unblock-ship -:!>(*vale:chat-unblock-ship) + :- %chat-unblocked -:!>(*vale:chat-unblocked) + :- %chat-unblocked-by -:!>(*vale:chat-unblocked-by) + :- %chat-unread-update -:!>(*vale:chat-unread-update) + :- %chat-unreads -:!>(*vale:chat-unreads) + :- %chat-writ-1 -:!>(*vale:chat-writ-1) + :- %chat-writ-2 -:!>(*vale:chat-writ-2) + :- %chat-writ-3 -:!>(*vale:chat-writ-3) + :- %chat-writ-4 -:!>(*vale:chat-writ-4) + :- %club-action -:!>(*vale:club-action) + :- %clubs -:!>(*vale:clubs) + :- %contact -:!>(*vale:contact) + :- %contact-0 -:!>(*vale:contact-0) + :- %contact-1 -:!>(*vale:contact-1) + :- %contact-action -:!>(*vale:contact-action) + :- %contact-action-0 -:!>(*vale:contact-action-0) + :- %contact-action-1 -:!>(*vale:contact-action-1) + :- %contact-book -:!>(*vale:contact-book) + :- %contact-book-0 -:!>(*vale:contact-book-0) + :- %contact-changed-contacts -:!>(*vale:contact-changed-contacts) + :- %contact-changed-pages -:!>(*vale:contact-changed-pages) + :- %contact-directory -:!>(*vale:contact-directory) + :- %contact-directory-0 -:!>(*vale:contact-directory-0) + :- %contact-news -:!>(*vale:contact-news) + :- %contact-page -:!>(*vale:contact-page) + :- %contact-page-0 -:!>(*vale:contact-page-0) + :- %contact-page-1 -:!>(*vale:contact-page-1) + :- %contact-response-0 -:!>(*vale:contact-response-0) + :- %contact-rolodex -:!>(*vale:contact-rolodex) + :- %contact-update -:!>(*vale:contact-update) + :- %contact-update-0 -:!>(*vale:contact-update-0) + :- %contact-update-1 -:!>(*vale:contact-update-1) + :- %css -:!>(*vale:css) + :- %dm-action -:!>(*vale:dm-action) + :- %dm-archive -:!>(*vale:dm-archive) + :- %dm-diff -:!>(*vale:dm-diff) + :- %dm-rsvp -:!>(*vale:dm-rsvp) + :- %dm-unarchive -:!>(*vale:dm-unarchive) + :- %docket-0 -:!>(*vale:docket-0) + :- %dude -:!>(*vale:dude) + :- %dummy -:!>(*vale:dummy) + :- %egg-any -:!>(*vale:egg-any) + :- %emojimart -:!>(*vale:emojimart) + :- %epic -:!>(*vale:epic) + :- %flag -:!>(*vale:flag) + :- %flags -:!>(*vale:flags) + :- %foreign-1 -:!>(*vale:foreign-1) + :- %foreign-2 -:!>(*vale:foreign-2) + :- %foreigns-1 -:!>(*vale:foreigns-1) + :- %foreigns-2 -:!>(*vale:foreigns-2) + :- %gangs -:!>(*vale:gangs) + :- %gateway-status-action-1 -:!>(*vale:gateway-status-action-1) + :- %gateway-status-update-1 -:!>(*vale:gateway-status-update-1) + :- %group -:!>(*vale:group) + :- %group-1 -:!>(*vale:group-1) + :- %group-2 -:!>(*vale:group-2) + :- %group-action -:!>(*vale:group-action) + :- %group-action-0 -:!>(*vale:group-action-0) + :- %group-action-1 -:!>(*vale:group-action-1) + :- %group-action-2 -:!>(*vale:group-action-2) + :- %group-action-3 -:!>(*vale:group-action-3) + :- %group-action-4 -:!>(*vale:group-action-4) + :- %group-cancel -:!>(*vale:group-cancel) + :- %group-changed-groups-1 -:!>(*vale:group-changed-groups-1) + :- %group-changed-groups-2 -:!>(*vale:group-changed-groups-2) + :- %group-command -:!>(*vale:group-command) + :- %group-create-thread -:!>(*vale:group-create-thread) + :- %group-foreign-1 -:!>(*vale:group-foreign-1) + :- %group-foreign-2 -:!>(*vale:group-foreign-2) + :- %group-init -:!>(*vale:group-init) + :- %group-init-0 -:!>(*vale:group-init-0) + :- %group-init-1 -:!>(*vale:group-init-1) + :- %group-init-2 -:!>(*vale:group-init-2) + :- %group-init-3 -:!>(*vale:group-init-3) + :- %group-init-4 -:!>(*vale:group-init-4) + :- %group-invite -:!>(*vale:group-invite) + :- %group-invite-1 -:!>(*vale:group-invite-1) + :- %group-join -:!>(*vale:group-join) + :- %group-knock -:!>(*vale:group-knock) + :- %group-leave -:!>(*vale:group-leave) + :- %group-log -:!>(*vale:group-log) + :- %group-preview -:!>(*vale:group-preview) + :- %group-preview-1 -:!>(*vale:group-preview-1) + :- %group-preview-2 -:!>(*vale:group-preview-2) + :- %group-preview-3 -:!>(*vale:group-preview-3) + :- %group-previews -:!>(*vale:group-previews) + :- %group-previews-1 -:!>(*vale:group-previews-1) + :- %group-rescind -:!>(*vale:group-rescind) + :- %group-response-1 -:!>(*vale:group-response-1) + :- %group-token -:!>(*vale:group-token) + :- %group-ui -:!>(*vale:group-ui) + :- %group-ui-1 -:!>(*vale:group-ui-1) + :- %group-ui-2 -:!>(*vale:group-ui-2) + :- %group-update -:!>(*vale:group-update) + :- %grouper-answer-enabled -:!>(*vale:grouper-answer-enabled) + :- %grouper-ask-enabled -:!>(*vale:grouper-ask-enabled) + :- %grouper-disable -:!>(*vale:grouper-disable) + :- %grouper-enable -:!>(*vale:grouper-enable) + :- %groups -:!>(*vale:groups) + :- %groups-1 -:!>(*vale:groups-1) + :- %groups-2 -:!>(*vale:groups-2) + :- %groups-ui -:!>(*vale:groups-ui) + :- %groups-ui-1 -:!>(*vale:groups-ui-1) + :- %groups-ui-2 -:!>(*vale:groups-ui-2) + :- %growl-summarize -:!>(*vale:growl-summarize) + :- %hi-ship -:!>(*vale:hi-ship) + :- %hidden-messages -:!>(*vale:hidden-messages) + :- %hidden-posts -:!>(*vale:hidden-posts) + :- %holt -:!>(*vale:holt) + :- %hook-action-0 -:!>(*vale:hook-action-0) + :- %hook-channel-preview -:!>(*vale:hook-channel-preview) + :- %hook-full -:!>(*vale:hook-full) + :- %hook-response-0 -:!>(*vale:hook-response-0) + :- %hook-setup-template -:!>(*vale:hook-setup-template) + :- %hook-setup-template-args -:!>(*vale:hook-setup-template-args) + :- %hook-template -:!>(*vale:hook-template) + :- %hoon -:!>(*vale:hoon) + :- %htm -:!>(*vale:htm) + :- %html -:!>(*vale:html) + :- %httr -:!>(*vale:httr) + :- %hymn -:!>(*vale:hymn) + :- %invite-decline -:!>(*vale:invite-decline) + :- %jam -:!>(*vale:jam) + :- %jpg -:!>(*vale:jpg) + :- %js -:!>(*vale:js) + :- %json -:!>(*vale:json) + :- %json-rpc-response -:!>(*vale:json-rpc-response) + :- %kelvin -:!>(*vale:kelvin) + :- %kiln-approve-merge -:!>(*vale:kiln-approve-merge) + :- %kiln-jump -:!>(*vale:kiln-jump) + :- %kiln-jump-ask -:!>(*vale:kiln-jump-ask) + :- %kiln-jump-opt -:!>(*vale:kiln-jump-opt) + :- %kiln-sync-update -:!>(*vale:kiln-sync-update) + :- %language-server-rpc-notification -:!>(*vale:language-server-rpc-notification) + :- %language-server-rpc-request -:!>(*vale:language-server-rpc-request) + :- %language-server-rpc-response -:!>(*vale:language-server-rpc-response) + :- %lanyard-command-1 -:!>(*vale:lanyard-command-1) + :- %lanyard-query-1 -:!>(*vale:lanyard-query-1) + :- %lanyard-update-1 -:!>(*vale:lanyard-update-1) + :- %loob -:!>(*vale:loob) + :- %mass -:!>(*vale:mass) + :- %mime -:!>(*vale:mime) + :- %negotiate-reset -:!>(*vale:negotiate-reset) + :- %nest -:!>(*vale:nest) + :- %notify-client-action -:!>(*vale:notify-client-action) + :- %notify-provider-action -:!>(*vale:notify-provider-action) + :- %notify-update -:!>(*vale:notify-update) + :- %notify-update-1 -:!>(*vale:notify-update-1) + :- %noun -:!>(*vale:noun) + :- %noun-autodiff -:!>(*vale:noun-autodiff) + :- %path -:!>(*vale:path) + :- %png -:!>(*vale:png) + :- %presence-action-1 -:!>(*vale:presence-action-1) + :- %presence-command-1 -:!>(*vale:presence-command-1) + :- %presence-response-1 -:!>(*vale:presence-response-1) + :- %presence-update-1 -:!>(*vale:presence-update-1) + :- %purl -:!>(*vale:purl) + :- %reel-bait -:!>(*vale:reel-bait) + :- %reel-bite -:!>(*vale:reel-bite) + :- %reel-command -:!>(*vale:reel-command) + :- %reel-confirmation -:!>(*vale:reel-confirmation) + :- %reel-describe -:!>(*vale:reel-describe) + :- %reel-description -:!>(*vale:reel-description) + :- %reel-give-token-link -:!>(*vale:reel-give-token-link) + :- %reel-metadata -:!>(*vale:reel-metadata) + :- %reel-undescribe -:!>(*vale:reel-undescribe) + :- %reel-want-token-link -:!>(*vale:reel-want-token-link) + :- %release -:!>(*vale:release) + :- %reset-group-perms -:!>(*vale:reset-group-perms) + :- %ship -:!>(*vale:ship) + :- %ships -:!>(*vale:ships) + :- %sigil -:!>(*vale:sigil) + :- %sole-action -:!>(*vale:sole-action) + :- %sole-effect -:!>(*vale:sole-effect) + :- %svg -:!>(*vale:svg) + :- %tang -:!>(*vale:tang) + :- %tape -:!>(*vale:tape) + :- %thread-done -:!>(*vale:thread-done) + :- %thread-fail -:!>(*vale:thread-fail) + :- %toc -:!>(*vale:toc) + :- %toggle-post -:!>(*vale:toggle-post) + :- %txt -:!>(*vale:txt) + :- %txt-diff -:!>(*vale:txt-diff) + :- %udon -:!>(*vale:udon) + :- %ui-action -:!>(*vale:ui-action) + :- %ui-add-contact-suggestions -:!>(*vale:ui-add-contact-suggestions) + :- %ui-heads -:!>(*vale:ui-heads) + :- %ui-heads-2 -:!>(*vale:ui-heads-2) + :- %ui-heads-3 -:!>(*vale:ui-heads-3) + :- %ui-heads-4 -:!>(*vale:ui-heads-4) + :- %ui-hide-contact -:!>(*vale:ui-hide-contact) + :- %ui-import-pals -:!>(*vale:ui-import-pals) + :- %ui-init -:!>(*vale:ui-init) + :- %ui-init-1 -:!>(*vale:ui-init-1) + :- %ui-init-2 -:!>(*vale:ui-init-2) + :- %ui-init-3 -:!>(*vale:ui-init-3) + :- %ui-init-4 -:!>(*vale:ui-init-4) + :- %ui-init-5 -:!>(*vale:ui-init-5) + :- %ui-init-6 -:!>(*vale:ui-init-6) + :- %ui-init-7 -:!>(*vale:ui-init-7) + :- %ui-pins -:!>(*vale:ui-pins) + :- %ui-show-contact -:!>(*vale:ui-show-contact) + :- %ui-vita -:!>(*vale:ui-vita) + :- %ui-vita-toggle -:!>(*vale:ui-vita-toggle) + :- %umd -:!>(*vale:umd) + :- %urb -:!>(*vale:urb) + :- %urbit -:!>(*vale:urbit) + :- %verb -:!>(*vale:verb) + :- %verb-event -:!>(*vale:verb-event) + :- %verb-event-plus -:!>(*vale:verb-event-plus) + :- %vere -:!>(*vale:vere) + :- %verifier-result -:!>(*vale:verifier-result) + :- %verifier-update -:!>(*vale:verifier-update) + :- %verifier-user-command -:!>(*vale:verifier-user-command) + :- %verifier-user-query -:!>(*vale:verifier-user-query) + :- %volume-set -:!>(*vale:volume-set) + :- %volume-value -:!>(*vale:volume-value) + :- %wasm -:!>(*vale:wasm) + :- %webmanifest -:!>(*vale:webmanifest) + :- %woff2 -:!>(*vale:woff2) + :- %writ -:!>(*vale:writ) + :- %writ-response -:!>(*vale:writ-response) + :- %writ-response-1 -:!>(*vale:writ-response-1) + :- %writ-response-2 -:!>(*vale:writ-response-2) + :- %writ-response-3 -:!>(*vale:writ-response-3) + :- %writ-response-4 -:!>(*vale:writ-response-4) + :- %xhtml -:!>(*vale:xhtml) + :- %xml -:!>(*vale:xml) == -- From 9dc34366ec5b82480110c69cbb3fc7d26ee02823 Mon Sep 17 00:00:00 2001 From: fang Date: Wed, 20 May 2026 17:12:16 +0200 Subject: [PATCH 20/20] discipline: get instead of has-got --- desk/lib/discipline.hoon | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/desk/lib/discipline.hoon b/desk/lib/discipline.hoon index d3ecd7bda1..7a462c62bf 100644 --- a/desk/lib/discipline.hoon +++ b/desk/lib/discipline.hoon @@ -116,8 +116,8 @@ |= strict-marks=(set mark) %+ roll ~(tap in strict-marks) |= [=mark types=(map mark type)] - ?: (~(has by types:rail) mark) - (~(put by types) mark (~(got by types:rail) mark)) + ?^ typ=(~(get by types:rail) mark) + (~(put by types) mark u.typ) ~& [%discipline-unknown-mark mark] types ::