diff --git a/desk/app/channels-server.hoon b/desk/app/channels-server.hoon index f5fb437fe4..2f7beade27 100644 --- a/desk/app/channels-server.hoon +++ b/desk/app/channels-server.hoon @@ -6,34 +6,14 @@ h=hooks, m=meta /+ ccv=channel-conv, utils=channel-utils, imp=import-aid, em=emojimart /+ default-agent, verb, dbug, + guard, 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 + :+ :: unchanging 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) - == + ~ :: facts :: :~ [/$/$/checkpoint %channel-checkpoint ~] @@ -61,7 +41,8 @@ ^- agent:gall => |% - +$ card card:agent:gall + +$ card card:guard + +$ rail rail:guard +$ current-state $: %15 =v-channels:v10:cv @@ -78,6 +59,7 @@ log ~(. logs [our.bowl /logs]) cor ~(. +> [bowl ~ ~]) ++ on-init + %- step:un:guard ^- (quip card _this) =^ cards state abet:init:cor @@ -86,6 +68,7 @@ ++ on-save !>(state) ++ on-load |= =vase + %- step:un:guard ^- (quip card _this) =^ cards state abet:(load:cor vase) @@ -93,6 +76,7 @@ :: ++ on-poke |= [=mark =vase] + %- step:un:guard ^- (quip card _this) =^ cards state abet:(poke:cor mark vase) @@ -100,6 +84,7 @@ :: ++ on-watch |= =path + %- step:un:guard ^- (quip card _this) =^ cards state abet:(watch:cor path) @@ -109,13 +94,16 @@ ++ on-leave on-leave:def ++ on-fail |= [=term =tang] + %- step:un:guard ^- (quip card _this) %- (slog term tang) :_ this - [(fail:log term tang ~)]~ + [(unsafe:guard (fail:log term tang ~))]~ :: ++ on-agent - |= [=wire =sign:agent:gall] + %- on-agent:guard + |= [=wire =sign:guard] + %- step:un:guard ^- (quip card _this) =^ cards state abet:(agent:cor wire sign) @@ -123,6 +111,7 @@ :: ++ on-arvo |= [=wire sign=sign-arvo] + %- step:un:guard ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) @@ -136,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:agent:gall (emit %give gift)) +++ give |=(=gift:guard (emit %give gift)) ++ log ~(. logs [our.bowl /logs]) ++ safe-watch |= [=wire =dock =path] @@ -151,7 +140,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) @@ -476,11 +465,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 :: @@ -505,15 +494,15 @@ [%send-sequence-numbers *] =+ ;;([%send-sequence-numbers =nest:c] q.vase) =. cor - (emit (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 - =; =cage + =; =rail %- emil - :~ (tell:log %dbug ~[>[%sending-sequence-numbers src.bowl]<] ~) - [%pass /numbers %agent [src.bowl %channels] %poke cage] + :~ (unsafe:guard (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) @@ -522,15 +511,15 @@ :: [%send-tombstones *] =+ ;;([%send-tombstones =nest:c] q.vase) - =. cor (emit (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 - =; =cage + =; =rail %- emil - :~ (tell:log %dbug ~[>[%sending-tombstones src.bowl]<] ~) - [%pass /tombstones %agent [src.bowl %channels] %poke cage] + :~ (unsafe:guard (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)] @@ -593,7 +582,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) @@ -630,11 +619,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 @@ -642,7 +631,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) unsafe:guard)) == :: ++ watch @@ -654,19 +643,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 ~] @@ -712,7 +701,7 @@ == :: ++ agent - |= [=(pole knot) =sign:agent:gall] + |= [=(pole knot) =sign:guard] ~> %spin.['agent'] ^+ cor ?+ pole ~|(bad-agent-wire+pole !!) @@ -749,7 +738,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 ~] @@ -763,7 +753,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 == @@ -777,14 +767,15 @@ ++ peek |= =(pole knot) ~> %spin.['peek'] - ^- (unit (unit cage)) + %- peek:un:guard + ^- (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 @@ -864,8 +855,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 @@ -874,7 +865,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:guard ca-core(cor (^give gift))) ++ ca-perms ~(. perms:utils our.bowl now.bowl nest group.perm.channel) ++ ca-abet %_ cor @@ -893,8 +884,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 @@ -903,7 +894,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 @@ -914,7 +905,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 @@ -925,7 +916,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 @@ -947,9 +938,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 @@ -958,7 +949,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 :: @@ -1292,7 +1283,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'] @@ -1314,7 +1305,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 @@ -1331,8 +1322,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] @@ -1360,8 +1351,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] @@ -1375,8 +1366,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 @@ -1410,7 +1401,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:guard ho-core(cor (^give gift))) ++ ho-abet %_ cor hooks.hooks @@ -1525,7 +1516,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] @@ -1638,28 +1629,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 + (emit [%pass /hooks/effect %agent [our.bowl %groups] %poke rail]) :: %activity - =/ =cage activity-action+!>(`action:v8:av`action.effect) - (emit [%pass /hooks/effect %agent [our.bowl %activity] %poke cage]) + =/ =rail activity-action+`action:v8:av`action.effect + (emit [%pass /hooks/effect %agent [our.bowl %activity] %poke rail]) :: %dm - =/ =cage chat-dm-action+!>(`action:dm:v3:chv`action.effect) - (emit [%pass /hooks/effect %agent [our.bowl %chat] %poke cage]) + =/ =rail chat-dm-action+`action:dm:v3:chv`action.effect + (emit [%pass /hooks/effect %agent [our.bowl %chat] %poke rail]) :: %club - =/ =cage chat-club-action+!>(`action:club:v3:chv`action.effect) - (emit [%pass /hooks/effect %agent [our.bowl %chat] %poke cage]) + =/ =rail chat-club-action+`action:club:v3:chv`action.effect + (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 + (emit [%pass /hooks/effect %agent [our.bowl %contacts] %poke rail]) :: %wait =/ =wire /hooks/waiting/(scot %uv id.effect) diff --git a/desk/app/channels.hoon b/desk/app/channels.hoon index 6b8ae9f9bc..d839e38d9b 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, a=activity, av=activity-ver, story /- meta /+ default-agent, verb, dbug, + guard, neg=negotiate, discipline, logs, sparse, kol, imp=import-aid /+ utils=channel-utils, volume, s=subscriber, @@ -18,132 +19,50 @@ :: 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 + :+ :: unchanging 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) + :~ %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 :: @@ -250,7 +169,8 @@ ^- agent:gall => |% - +$ card card:agent:gall + +$ card card:guard + +$ rail rail:guard +$ current-state $: %18 =v-channels:v10:cv @@ -276,6 +196,7 @@ log ~(. logs [our.bowl /logs]) cor ~(. +> [bowl ~]) ++ on-init + %- step:un:guard ^- (quip card _this) =^ cards state abet:init:cor @@ -284,20 +205,24 @@ ++ on-save !>([state]) ++ on-load |= =vase + %- step:un:guard ^- (quip card _this) =^ cards state abet:(load:cor vase) [cards this] :: ++ on-poke - |= [=mark =vase] + %- on-poke:guard + |= =rail + %- step:un:guard ^- (quip card _this) =^ cards state - abet:(poke:cor mark vase) + abet:(poke:cor rail) [cards this] :: ++ on-watch |= =path + %- step:un:guard ^- (quip card _this) =^ cards state abet:(watch:cor path) @@ -307,12 +232,15 @@ ++ on-leave on-leave:def ++ on-fail |= [=term =tang] + %- step:un:guard ^- (quip card _this) :_ this - [(fail:log term tang ~)]~ + [(unsafe:guard (fail:log term tang ~))]~ :: ++ on-agent - |= [=wire =sign:agent:gall] + %- on-agent:guard + |= [=wire =sign:guard] + %- step:un:guard ^- (quip card _this) =^ cards state abet:(agent:cor wire sign) @@ -320,6 +248,7 @@ :: ++ on-arvo |= [=wire sign=sign-arvo] + %- step:un:guard ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) @@ -330,9 +259,10 @@ ++ abet [(flop cards) state] ++ cor . ++ plog ~(. logs [our.bowl /logs]) +++ 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:agent:gall (emit %give gift)) +++ give |=(=gift:guard (emit %give gift)) ++ server (cat 3 dap.bowl '-server') ++ log |= msg=(trap tape) @@ -349,9 +279,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 unsafe:guard)) :: ++ load |^ |= =vase @@ -395,7 +325,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) @@ -853,9 +783,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 unsafe:guard)) ++ inflate-io :: leave all subscriptions we don't recognize :: @@ -913,14 +843,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) |) @@ -943,18 +873,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 @@ -978,9 +908,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 @@ -999,16 +929,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) @@ -1023,80 +953,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 @@ -1107,7 +1039,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 @@ -1128,7 +1060,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) unsafe:guard)) == ++ watch |= =(pole knot) @@ -1204,7 +1136,7 @@ ?~(q.plan / /(scot %ud u.q.plan)) :: ++ take-said - |= [=nest:c =plan:c =sign:agent:gall] + |= [=nest:c =plan:c =sign:guard] ~> %spin.['take-said'] =/ =path (said-path nest plan) ^+ cor @@ -1214,7 +1146,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) @@ -1227,20 +1159,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] @@ -1251,25 +1183,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 @@ -1285,12 +1217,12 @@ == :: ++ agent - |= [=(pole knot) =sign:agent:gall] + |= [=(pole knot) =sign:guard] ~> %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 @@ -1341,7 +1273,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 ~] @@ -1356,7 +1289,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 @@ -1401,7 +1334,8 @@ ++ peek |= =(pole knot) ~> %spin.['peek'] - ^- (unit (unit cage)) + %- peek:un:guard + ^- (unit (unit rail)) ?> ?=(^ pole) =? +.pole !?=([?(%v0 %v1 %v2 %v3 %v4 %v5 %v6) *] +.pole) [%v0 +.pole] @@ -1410,53 +1344,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) @@ -1471,17 +1405,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] @@ -1505,30 +1439,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 [~ ~] @@ -1539,7 +1473,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 [~ ~] @@ -1550,7 +1484,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 [~ ~] @@ -1646,28 +1580,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 == :: @@ -1679,14 +1613,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 unsafe:guard)) :: [?(%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) @@ -1695,20 +1629,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] == == == @@ -1751,7 +1685,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:guard ca-core(cor (^give gift))) ++ ca-perms ~(. perms:utils our.bowl now.bowl nest group.perm.channel) ++ safe-watch |= [=wire =dock =path] @@ -1777,7 +1711,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 =, v9:av @@ -1978,8 +1912,8 @@ %- emil %+ turn actions |= =action - =/ =cage activity-action-1+!>(action) - [%pass /activity/submit %agent [our.bowl %activity] %poke cage] + =/ =rail activity-action-1+action + [%pass /activity/submit %agent [our.bowl %activity] %poke rail] -- :: :: handle creating a channel @@ -1995,8 +1929,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 :: @@ -2166,13 +2100,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 @@ -2189,8 +2123,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 @@ -2204,11 +2138,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 @@ -2252,7 +2186,7 @@ /[kind.nest]/[name.nest]/updates/(scot %da (fall tim *@da)) :: ++ ca-agent - |= [=wire =sign:agent:gall] + |= [=wire =sign:guard] ~> %spin.['ca-agent'] ^+ ca-core =? last-updated ?=(%fact -.sign) @@ -2270,7 +2204,7 @@ == :: ++ ca-take-create - |= =sign:agent:gall + |= =sign:guard ~> %spin.['ca-take-create'] ^+ ca-core ?- -.sign @@ -2289,10 +2223,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) @@ -2302,7 +2236,7 @@ == :: ++ ca-take-update - |= =sign:agent:gall + |= =sign:guard ~> %spin.['ca-take-update'] ^+ ca-core ?+ -.sign ca-core @@ -2313,15 +2247,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:guard ~> %spin.['ca-take-checkpoint'] ^+ ca-core ?+ -.sign ca-core @@ -2333,15 +2267,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:guard ~> %spin.['ca-take-backlog'] ^+ ca-core ?+ -.sign ca-core @@ -2353,10 +2287,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) == == :: @@ -2595,7 +2529,7 @@ :* %agent [our.bowl %contacts] %poke - contact-action-0+!>([%heed (turn authors get-author-ship:utils)]) + contact-action-0+[%heed (turn authors get-author-ship:utils)] == ++ ca-u-reply |= [=id-post:c post=v-post:c =id-reply:c =u-reply:c] @@ -2733,31 +2667,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 @@ -2862,23 +2796,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 @@ -2896,10 +2830,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) @@ -2910,10 +2844,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 == %^ mention:hits-bound:ca-search (slav %ud skip.pole) @@ -2924,10 +2858,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) @@ -2963,28 +2897,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 @@ -2997,7 +2931,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 @@ -3011,7 +2945,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) ~] @@ -3047,7 +2981,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) @@ -3060,7 +2994,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 [~ ~] @@ -3121,27 +3055,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 @@ -3214,11 +3148,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=*] @@ -3232,40 +3166,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) @@ -3273,22 +3207,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 diff --git a/desk/app/chat.hoon b/desk/app/chat.hoon index c6c1844ada..f721a4190c 100644 --- a/desk/app/chat.hoon +++ b/desk/app/chat.hoon @@ -2,6 +2,7 @@ /- u=ui, e=epic, a=activity, av=activity-ver, s=story, meta /- contacts /+ default-agent, verb, dbug, + guard, neg=negotiate, discipline, logs, em=emojimart /+ pac=dm @@ -12,125 +13,51 @@ :: 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 :: - :~ :+ %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) + :~ %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 :: @@ -237,7 +164,8 @@ ^- agent:gall => |% - +$ card card:agent:gall + +$ card card:guard + +$ rail rail:guard ++ okay `epic:e`1 ++ wood-state ^- state:wood-lib @@ -272,6 +200,7 @@ log ~(. logs [our.bowl /logs]) cor ~(. +> [bowl ~]) ++ on-init + %- step:un:guard ^- (quip card _this) =^ cards state abet:init:cor @@ -280,19 +209,23 @@ ++ on-save !>([state okay]) ++ on-load |= =vase + %- step:un:guard ^- (quip card _this) =^ cards state abet:(load:cor vase) [cards this] :: ++ on-poke - |= [=mark =vase] + %- on-poke:guard + |= =rail + %- step:un:guard ^- (quip card _this) =^ cards state - abet:(poke:cor mark vase) + abet:(poke:cor rail) [cards this] ++ on-watch |= =path + %- step:un:guard ^- (quip card _this) =^ cards state abet:(watch:cor path) @@ -303,18 +236,21 @@ ++ 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] + %- 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:un:guard ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) @@ -324,11 +260,14 @@ +* wood ~(. wood-lib [bowl wood-state]) log ~(. logs [our.bowl /logs]) ol (kol gte) + log ~(. logs [our.bowl /logs]) + 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])) ++ emil |=(caz=(list card) cor(cards (welp (flop caz) cards))) -++ give |=(=gift:agent:gall (emit %give gift)) +++ give |=(=gift:guard (emit %give gift)) ++ now-id `id:c`[our now]:bowl ++ scry-path |= [agent=term =path] @@ -867,16 +806,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 (initiate:neg !<(@p vase) dap.bowl)) + (emit (unsafe:guard (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) @@ -894,49 +847,30 @@ (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) - =. cor (emit (tell:log %dbug ~['received dm action' >action<] ~)) + =/ 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) ~|("%dm-action poke failed: only allowed from self" !!) @@ -958,46 +892,35 @@ di-abet:(di-proxy:(di-abed-soft:di-core p.action) q.action) :: %chat-dm-diff-2 - =+ !<(=diff:dm:v7:cv vase) - =. cor (emit (tell:log %dbug ~['received dm diff' >diff<] ~)) + =* 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 @@ -1005,19 +928,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 @@ -1025,23 +948,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) @@ -1121,7 +1043,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 @@ -1130,7 +1052,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 @@ -1139,7 +1061,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 @@ -1147,7 +1069,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 @@ -1158,7 +1080,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) @@ -1193,11 +1115,11 @@ cu-abet:(cu-watch:(cu-abed id) ver.pole rest.pole) :: [%epic ~] - (give %fact ~ epic+!>(okay)) + (give %fact ~ epic+okay) == :: ++ agent - |= [=(pole knot) =sign:agent:gall] + |= [=(pole knot) =sign:guard] ~> %spin.['agent'] ^+ cor ?+ pole ~|(bad-agent-wire/pole !!) @@ -1266,9 +1188,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 @@ -1281,23 +1203,24 @@ ++ peek |= =path ~> %spin.['peek'] - ^- (unit (unit cage)) + %- peek:un:guard + ^- (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 @@ -1306,7 +1229,7 @@ == :: [%x %v1 %init ~] - =- ``noun+!>(-) + :^ ~ ~ %noun :* ~(key by accepted-dms) ~(key by pending-dms) (~(run by clubs) |=(=club:c crew.club)) @@ -1321,7 +1244,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 @@ -1330,10 +1253,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=*] @@ -1346,17 +1269,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] @@ -1410,12 +1333,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]) @@ -1449,13 +1372,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) @@ -1475,16 +1398,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) :: == @@ -1536,7 +1459,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 =, v9:av @@ -1560,8 +1483,8 @@ %- emil %+ turn actions |= =action:v9:av - =/ =cage activity-action-1+!>(action) - [%pass /activity/submit %agent [our.bowl %activity] %poke cage] + =/ =rail activity-action-1+action + [%pass /activity/submit %agent [our.bowl %activity] %poke rail] ?: ?& ?=(?(%post %reply %react) -.concern) :: =/ author-ship=@p @@ -1701,18 +1624,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 @@ -1736,19 +1659,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 @@ -2017,8 +1940,8 @@ =. clubs (~(del by clubs) id) :: if we're leaving a DM we're in, make sure we delete the activity =/ =action:v8:av [%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'] @@ -2082,8 +2005,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 @@ -2139,14 +2062,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 @@ -2156,7 +2079,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 @@ -2170,20 +2093,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 @@ -2407,20 +2330,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 @@ -2438,11 +2361,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) @@ -2453,11 +2376,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) @@ -2476,7 +2399,7 @@ == :: ++ cu-agent - |= [=wire =sign:agent:gall] + |= [=wire =sign:guard] ~> %spin.['cu-agent'] ^+ cu-core ?+ wire ~|(bad-club-take/wire !!) @@ -2500,15 +2423,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 @@ -2550,8 +2473,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) @@ -2591,8 +2514,8 @@ =. dms (~(del by dms) ship) :: if we're leaving a DM we're in, make sure we delete the activity =/ =action:v8:av [%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'] @@ -2677,7 +2600,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 @@ -2691,21 +2614,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 @@ -2728,8 +2651,8 @@ q.diff(react.delta u.moj) :: =/ =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) @@ -2863,7 +2786,7 @@ (can-poke:neg bowl [ship dap.bowl]) == (emit (proxy-rsvp:di-pass ok)) - =. cor (emit (initiate:neg [ship dap.bowl])) + =. cor (emit (unsafe:guard (initiate:neg [ship dap.bowl]))) ?. ok :: reject or leave the dm :: @@ -2874,7 +2797,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 :: @@ -2909,7 +2832,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 @@ -2923,7 +2846,7 @@ == :: ++ di-agent - |= [=wire =sign:agent:gall] + |= [=wire =sign:guard] ~> %spin.['di-agent'] ^+ di-core ?+ wire ~|(bad-dm-take/wire !!) @@ -2938,7 +2861,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 *] @@ -2973,15 +2896,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) @@ -2996,7 +2919,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] @@ -3034,7 +2957,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) @@ -3043,11 +2966,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 @@ -3065,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 == %^ text:hits-bound:search:di-pact (slav %ud skip.pole) @@ -3080,11 +3003,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) @@ -3118,18 +3041,18 @@ ++ di-pass |% ++ pass - |= [=wire =dock =task:agent:gall] + |= [=wire =dock =task:guard] ~> %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 @@ -3158,14 +3081,14 @@ :: only remove activity if club is gone ?: (~(has by clubs) id) caz =/ =action:v8:av [%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:v8:av [%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/app/contacts.hoon b/desk/app/contacts.hoon index 31298e5b18..c7d196d2ae 100644 --- a/desk/app/contacts.hoon +++ b/desk/app/contacts.hoon @@ -8,7 +8,8 @@ :: :: /- activity-ver -/+ default-agent, dbug, verb, neg=negotiate +/+ default-agent, dbug, verb, neg=negotiate, + guard /+ *contacts, kol :: :: performance, keep warm @@ -25,7 +26,8 @@ :: .sag: foreign subscription state :: +| %types -+$ card card:agent:gall ++$ card card:guard ++$ rail rail:guard +$ state-4 $: %4 rof=profile @@ -50,6 +52,7 @@ cor ~(. raw bowl) :: ++ on-init + %- step:un:guard ^- (quip card _this) =^ cards state abet:init:cor [cards this] @@ -58,18 +61,21 @@ :: ++ on-load |= old=vase + %- step:un:guard ^- (quip card _this) =^ cards state abet:(load:cor old) [cards this] :: ++ on-watch |= =path + %- step:un:guard ^- (quip card _this) =^ cards state abet:(peer:cor path) [cards this] :: ++ on-poke |= [=mark =vase] + %- step:un:guard ^- (quip card _this) =^ cards state abet:(poke:cor mark vase) [cards this] @@ -79,12 +85,15 @@ :: ++ on-agent |= [=wire =sign:agent:gall] + %- step:un:guard ^- (quip card _this) =^ cards state abet:(agent:cor wire sign) [cards this] :: ++ on-arvo |= [=wire sign=sign-arvo] + %- step:un:guard + ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) [cards this] :: @@ -108,8 +117,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:guard (emit %give gift)) + ++ pass |=([=wire =note:guard] (emit %pass wire note)) :: +| %operations :: @@ -117,8 +126,8 @@ |= [who=ship field=(pair @tas value)] ~> %spin.['pass-activity'] ^- card - =/ =cage activity-action+!>(`action:v8:activity-ver`[%add %contact who field]) - [%pass /activity %agent [our.bowl %activity] %poke cage] + =/ =rail activity-action+`action:v8:activity-ver`[%add %contact who field] + [%pass /activity %agent [our.bowl %activity] %poke rail] :: :: +pub: publication management :: @@ -161,8 +170,8 @@ ++ fact |= [pat=(set path) u=update] ~> %spin.['fact'] - ^- gift:agent:gall - [%fact ~(tap in pat) %contact-update-1 !>(u)] + ^- gift:guard + [%fact ~(tap in pat) contact-update-1+u] -- :: |% @@ -282,13 +291,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 @@ -516,7 +525,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 @@ -753,7 +762,8 @@ ++ peek |= pat=(pole knot) ~> %spin.['peek'] - ^- (unit (unit cage)) + %- peek:un:guard + ^- (unit (unit rail)) ?+ pat [~ ~] :: [%x %all ~] @@ -769,7 +779,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) @@ -781,37 +791,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 %directory ~] =| dir=directory @@ -834,13 +844,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 @@ -851,7 +861,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)] @@ -866,8 +876,8 @@ ?~ who=(slaw %p her.pat) [~ ~] ?: (~(has by book) u.who) - ``loob+!>(&) - =- ``loob+!>(-) + ``loob+& + =- ``loob+- ?~ far=(~(get by peers) u.who) | ?~ for.u.far @@ -878,24 +888,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 @@ -912,7 +922,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 diff --git a/desk/app/groups.hoon b/desk/app/groups.hoon index e70a02c8b8..1593a34729 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, av=activity-ver /- meta -/+ default-agent, verb, dbug +/+ default-agent, verb, dbug, + guard /+ gc=groups-conv, cu=channel-utils, v=volume, s=subscriber, imp=import-aid, logs, t=contacts /+ of @@ -17,80 +18,36 @@ :: 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 + :+ :: unchanging 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) + :~ %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 :: @@ -173,7 +130,8 @@ ^- agent:gall => |% - +$ card card:agent:gall + +$ card card:guard + +$ rail rail:guard +$ current-state $: %11 groups=net-groups:v9:gv @@ -197,6 +155,7 @@ log ~(. logs [our.bowl /logs]) cor ~(. +> [bowl ~]) ++ on-init + %- step:un:guard ^- (quip card _this) =^ cards state abet:init:cor @@ -205,6 +164,7 @@ ++ on-save !>([state ~]) ++ on-load |= =vase + %- step:un:guard ^- (quip card _this) =^ cards state abet:(load:cor vase) @@ -212,12 +172,14 @@ :: ++ on-poke |= [=mark =vase] + %- step:un:guard ^- (quip card _this) =^ cards state abet:(poke:cor mark vase) [cards this] ++ on-watch |= =path + %- step:un:guard ^- (quip card _this) =^ cards state abet:(watch:cor path) @@ -228,19 +190,22 @@ ++ on-leave on-leave:def ++ on-fail |= [=term =tang] + %- step:un:guard ^- (quip card _this) %- (slog term tang) :_ this - [(fail:log term tang ~)]~ + [(unsafe:guard (fail:log term tang ~))]~ :: ++ on-agent |= [=wire =sign:agent:gall] + %- step:un:guard ^- (quip card _this) =^ cards state abet:(agent:cor wire sign) [cards this] ++ on-arvo |= [=wire sign=sign-arvo] + %- step:un:guard ^- (quip card _this) =^ cards state abet:(arvo:cor wire sign) @@ -251,7 +216,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:guard (emit %give gift)) ++ server dap.bowl :: ++ submit-activity @@ -261,8 +226,8 @@ ?. .^(? %gu /(scot %p our.bowl)/activity/(scot %da now.bowl)/$) cor %- emit - =/ =cage activity-action-1+!>(`action:v9:av`action) - [%pass /activity/submit %agent [our.bowl %activity] %poke cage] + =/ =rail activity-action-1+`action:v9:av`action + [%pass /activity/submit %agent [our.bowl %activity] %poke rail] :: |l: logging core :: ++ l @@ -271,6 +236,7 @@ |= [desc=term =tang] ~> %spin.['fail'] =/ =card + %- unsafe:guard (~(fail logs our.bowl /logs) desc tang deez) (emit card) :: @@ -278,6 +244,7 @@ |= [vol=volume:logs =echo:logs] ~> %spin.['tell'] =/ =card + %- unsafe:guard (~(tell logs our.bowl /logs) vol echo deez) (emit card) :: +deez: log message details @@ -583,8 +550,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 +638,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 +669,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 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 @@ -716,9 +683,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 unsafe:guard)) =? old ?=(%8 -.old) (state-8-to-9 old) =^ caz-9-to-10=(list card) old ?. ?=(%9 -.old) [~ old] @@ -1085,12 +1052,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 +1108,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 +1153,8 @@ ++ peek |= =(pole knot) ~> %spin.['peek'] - ^- (unit (unit cage)) - |^ + %- peek:un:guard + |^ ^- (unit (unit rail)) ?+ pole [~ ~] :: :: @@ -1219,7 +1186,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 +1199,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 +1212,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 +1228,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 +1257,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 +1274,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 +1297,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 +1312,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 +1332,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 +1462,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 +1479,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 +1491,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 unsafe:guard)) :: :: initialize .active-channels in $group :: @@ -1692,9 +1659,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 unsafe:guard)) :: +eager-leave: eagerly unsubscribe from a path :: :: deletes the subscription entry from wex.bowl @@ -1706,9 +1673,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 unsafe:guard)) :: ++ watch-channels (safe-watch /channels [our.bowl %channels] /v1) @@ -1809,7 +1776,7 @@ :: ++ se-core . ++ emit |=(=card se-core(cor cor(cards [card cards]))) - ++ give |=(=gift:agent:gall (emit %give gift)) + ++ give |=(=gift:guard (emit %give gift)) :: +se-abed: init :: ++ se-abed @@ -1905,26 +1872,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 +1958,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 +2535,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]) :: @@ -2716,7 +2683,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 @@ -2807,7 +2774,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 (unsafe:guard (initiate:neg [ship dap.bowl]))) :: retry .retry times with doubling .delay :: =+ delay=~h1 @@ -2905,7 +2872,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) @@ -3164,14 +3131,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 @@ -3212,7 +3179,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 :: @@ -3233,7 +3200,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 :: @@ -3246,7 +3213,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 :: @@ -3398,21 +3365,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'] @@ -3427,7 +3394,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) @@ -3441,9 +3408,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) @@ -3457,9 +3424,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'] @@ -3469,8 +3436,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 :: @@ -3669,8 +3636,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 @@ -4590,7 +4557,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) @@ -4599,14 +4566,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. :: @@ -4614,25 +4581,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 @@ -4642,16 +4609,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 @@ -4660,7 +4627,7 @@ ?~ channel=(~(get by channels.group) nest) [~ ~] =; ships=(set ship) - ``ships+!>(ships) + ``ships+ships %- silt ^- (list ship) %+ skim ~(tap in ~(key by seats.group)) @@ -4675,7 +4642,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 @@ -4691,7 +4658,7 @@ == :: [%channels %can-read ~] - =- ``noun+!>(-) + =- ``noun+- ^- $-([ship nest:gv] ?) |= [=ship =nest:gv] ?~ chan=(~(get by channels.group) nest) | @@ -4701,7 +4668,7 @@ :: admissions queries :: [%entry %tokens ~] - ``noun+!>(tokens.ad) + ``noun+tokens.ad == ++ go-can-read |= [=ship =channel:g] @@ -4753,10 +4720,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 unsafe:guard)) =? fi-core |(?=(~ old-foreign) !=(u.old-foreign foreign)) fi-give-update cor @@ -4767,8 +4734,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 @@ -4794,16 +4761,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 @@ -4811,9 +4778,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] == :: @@ -4856,7 +4823,7 @@ ~> %spin.['fi-join'] ^+ fi-core =* log ~(. l `%group-join) - =. cor (emit (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) @@ -4887,7 +4854,7 @@ |= story=(unit story:s:g) ~> %spin.['fi-ask'] ^+ fi-core - =. cor (emit (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) @@ -5189,7 +5156,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 @@ -5197,7 +5164,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 @@ -5239,7 +5206,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] ~] == @@ -5251,7 +5218,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 new file mode 100644 index 0000000000..11ed38e573 --- /dev/null +++ b/desk/gen/rail.hoon @@ -0,0 +1,138 @@ +:: rail: code generator for /lib/rail.hoon +:: +:: 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 +:: +:- %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=/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 ~)) + 'p=_*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' + :: + ''' + == + :: + ++ 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' + :: + ''' + == + :: + ++ types + ^- (map mark type) ^~ + %- ~(gas by *(map mark type)) + ^- (list (pair mark type)) + :~ + ''' + :: + %^ rap 3 ' ' + %+ join '\0a ' + %+ turn maz + |= m=mark + =+ gap=(fil 3 (add 2 (sub max (met 3 m))) ' ') + (rap 3 ':- %' m gap '-:!>(*vale:' m ')' ~) + '\0a' + :: + ''' + == + -- + ''' ::TODO discipline arg? + '\0a' +== \ No newline at end of file diff --git a/desk/lib/activity-json.hoon b/desk/lib/activity-json.hoon index 56b46e9420..d99b3ba5a3 100644 --- a/desk/lib/activity-json.hoon +++ b/desk/lib/activity-json.hoon @@ -261,6 +261,34 @@ :~ time+s+(scot %ud time.te) event+(event event.te) == + :: + ++ update + |= u=update:v9:av + %+ frond -.u + ?- -.u + %add (added +.u) + %del (source +.u) + %read (read +.u) + %activity (activity +.u |) + %adjust (adjusted +.u) + %allow-notifications (allowed +.u) + == + :: + ++ added + |= [src=source:v9:av te=time-event:v9:av] + %- pairs + :~ source+(source src) + source-key+s+(string-source src) + time+(time time.te) + event+(event event.te) + == + :: + ++ adjusted + |= [s=source:v9:av v=(unit volume-map:v9:av)] + %- pairs + :~ source+(source s) + volume+?~(v ~ (volume-map u.v)) + == -- :: ++ v8 diff --git a/desk/lib/discipline.hoon b/desk/lib/discipline.hoon index fef064c93f..7a462c62bf 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)] + ?^ typ=(~(get by types:rail) mark) + (~(put by types) mark u.typ) + ~& [%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/dm.hoon b/desk/lib/dm.hoon index a318853e76..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 +/+ 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,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:guard)) =; 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: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 cage)) + ^- (unit (unit rail:guard)) =* 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/guard.hoon b/desk/lib/guard.hoon new file mode 100644 index 0000000000..6e76ead56f --- /dev/null +++ b/desk/lib/guard.hoon @@ -0,0 +1,72 @@ +:: 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, +:: agent function and output. +:: +/+ *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] + == ++$ 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))) +:: +++ unsafe :: gall-style card into unsafe guard-style card + |= 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]) + == +:: +++ un + |% + ++ 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) + -- +-- diff --git a/desk/lib/rail.hoon b/desk/lib/rail.hoon new file mode 100644 index 0000000000..cd7e40374c --- /dev/null +++ b/desk/lib/rail.hoon @@ -0,0 +1,1930 @@ +:: THIS FILE IS AUTO-GENERATED, DO NOT MODIFY IT DIRECTLY +:: +:: to update it, pulling in *all* marks in your current %groups desk, run: +:: *=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 +:: 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-action-1 %activity-action-1 +/% activity-allowed %activity-allowed +/% activity-event %activity-event +/% activity-event-1 %activity-event-1 +/% activity-feed %activity-feed +/% activity-feed-5 %activity-feed-5 +/% activity-feed-6 %activity-feed-6 +/% activity-feed-init %activity-feed-init +/% activity-feed-init-5 %activity-feed-init-5 +/% activity-feed-init-6 %activity-feed-init-6 +/% activity-full %activity-full +/% activity-full-1 %activity-full-1 +/% activity-full-4 %activity-full-4 +/% activity-full-5 %activity-full-5 +/% activity-settings %activity-settings +/% activity-settings-1 %activity-settings-1 +/% activity-stream %activity-stream +/% activity-stream-1 %activity-stream-1 +/% activity-summary %activity-summary +/% activity-summary-1 %activity-summary-1 +/% activity-summary-4 %activity-summary-4 +/% activity-summary-5 %activity-summary-5 +/% activity-summary-pairs-4 %activity-summary-pairs-4 +/% activity-update %activity-update +/% activity-update-1 %activity-update-1 +/% activity-update-4 %activity-update-4 +/% activity-update-5 %activity-update-5 +/% 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 +/% 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 +/% 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 +/% egg-any %egg-any +/% emojimart %emojimart +/% epic %epic +/% flag %flag +/% flags %flags +/% foreign-1 %foreign-1 +/% foreign-2 %foreign-2 +/% foreigns-1 %foreigns-1 +/% foreigns-2 %foreigns-2 +/% gangs %gangs +/% gateway-status-action-1 %gateway-status-action-1 +/% gateway-status-update-1 %gateway-status-update-1 +/% 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-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-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-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 +/% 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 +/% mass %mass +/% mime %mime +/% negotiate-reset %negotiate-reset +/% nest %nest +/% 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 +/% presence-action-1 %presence-action-1 +/% presence-command-1 %presence-command-1 +/% presence-response-1 %presence-response-1 +/% presence-update-1 %presence-update-1 +/% 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 +/% 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-init-8 %ui-init-8 +/% 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 %verb +/% 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-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 p=_*vale:activity-action == + $: %activity-action-1 $+ activity-action-1 p=_*vale:activity-action-1 == + $: %activity-allowed $+ activity-allowed p=_*vale:activity-allowed == + $: %activity-event $+ activity-event p=_*vale:activity-event == + $: %activity-event-1 $+ activity-event-1 p=_*vale:activity-event-1 == + $: %activity-feed $+ activity-feed p=_*vale:activity-feed == + $: %activity-feed-5 $+ activity-feed-5 p=_*vale:activity-feed-5 == + $: %activity-feed-6 $+ activity-feed-6 p=_*vale:activity-feed-6 == + $: %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-feed-init-6 $+ activity-feed-init-6 p=_*vale:activity-feed-init-6 == + $: %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-full-5 $+ activity-full-5 p=_*vale:activity-full-5 == + $: %activity-settings $+ activity-settings p=_*vale:activity-settings == + $: %activity-settings-1 $+ activity-settings-1 p=_*vale:activity-settings-1 == + $: %activity-stream $+ activity-stream p=_*vale:activity-stream == + $: %activity-stream-1 $+ activity-stream-1 p=_*vale:activity-stream-1 == + $: %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-5 $+ activity-summary-5 p=_*vale:activity-summary-5 == + $: %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 == + $: %activity-update-5 $+ activity-update-5 p=_*vale:activity-update-5 == + $: %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 == + $: %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 == + $: %foreigns-2 $+ foreigns-2 p=_*vale:foreigns-2 == + $: %gangs $+ gangs p=_*vale:gangs == + $: %gateway-status-action-1 $+ gateway-status-action-1 p=_*vale:gateway-status-action-1 == + $: %gateway-status-update-1 $+ gateway-status-update-1 p=_*vale:gateway-status-update-1 == + $: %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-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-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-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 == + $: %negotiate-reset $+ negotiate-reset p=_*vale:negotiate-reset == + $: %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 == + $: %presence-action-1 $+ presence-action-1 p=_*vale:presence-action-1 == + $: %presence-command-1 $+ presence-command-1 p=_*vale:presence-command-1 == + $: %presence-response-1 $+ presence-response-1 p=_*vale:presence-response-1 == + $: %presence-update-1 $+ presence-update-1 p=_*vale:presence-update-1 == + $: %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-init-8 $+ ui-init-8 p=_*vale:ui-init-8 == + $: %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 $+ verb p=_*vale:verb == + $: %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-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 + |= =rail + ^- cage + ?- -.rail + %unsafe cage.rail + :: + %activity-action [-.rail !>(+.rail)] + %activity-action-1 [-.rail !>(+.rail)] + %activity-allowed [-.rail !>(+.rail)] + %activity-event [-.rail !>(+.rail)] + %activity-event-1 [-.rail !>(+.rail)] + %activity-feed [-.rail !>(+.rail)] + %activity-feed-5 [-.rail !>(+.rail)] + %activity-feed-6 [-.rail !>(+.rail)] + %activity-feed-init [-.rail !>(+.rail)] + %activity-feed-init-5 [-.rail !>(+.rail)] + %activity-feed-init-6 [-.rail !>(+.rail)] + %activity-full [-.rail !>(+.rail)] + %activity-full-1 [-.rail !>(+.rail)] + %activity-full-4 [-.rail !>(+.rail)] + %activity-full-5 [-.rail !>(+.rail)] + %activity-settings [-.rail !>(+.rail)] + %activity-settings-1 [-.rail !>(+.rail)] + %activity-stream [-.rail !>(+.rail)] + %activity-stream-1 [-.rail !>(+.rail)] + %activity-summary [-.rail !>(+.rail)] + %activity-summary-1 [-.rail !>(+.rail)] + %activity-summary-4 [-.rail !>(+.rail)] + %activity-summary-5 [-.rail !>(+.rail)] + %activity-summary-pairs-4 [-.rail !>(+.rail)] + %activity-update [-.rail !>(+.rail)] + %activity-update-1 [-.rail !>(+.rail)] + %activity-update-4 [-.rail !>(+.rail)] + %activity-update-5 [-.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)] + %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)] + %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)] + %egg-any [-.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)] + %foreigns-2 [-.rail !>(+.rail)] + %gangs [-.rail !>(+.rail)] + %gateway-status-action-1 [-.rail !>(+.rail)] + %gateway-status-update-1 [-.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-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-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-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)] + %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)] + %mass [-.rail !>(+.rail)] + %mime [-.rail !>(+.rail)] + %negotiate-reset [-.rail !>(+.rail)] + %nest [-.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)] + %presence-action-1 [-.rail !>(+.rail)] + %presence-command-1 [-.rail !>(+.rail)] + %presence-response-1 [-.rail !>(+.rail)] + %presence-update-1 [-.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)] + %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-init-8 [-.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 [-.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-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)] + == +:: +++ en-rail + |= cage + ^- rail + ?+ p [%unsafe p q] + %activity-action [p !<(_*vale:activity-action q)] + %activity-action-1 [p !<(_*vale:activity-action-1 q)] + %activity-allowed [p !<(_*vale:activity-allowed q)] + %activity-event [p !<(_*vale:activity-event q)] + %activity-event-1 [p !<(_*vale:activity-event-1 q)] + %activity-feed [p !<(_*vale:activity-feed q)] + %activity-feed-5 [p !<(_*vale:activity-feed-5 q)] + %activity-feed-6 [p !<(_*vale:activity-feed-6 q)] + %activity-feed-init [p !<(_*vale:activity-feed-init q)] + %activity-feed-init-5 [p !<(_*vale:activity-feed-init-5 q)] + %activity-feed-init-6 [p !<(_*vale:activity-feed-init-6 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-full-5 [p !<(_*vale:activity-full-5 q)] + %activity-settings [p !<(_*vale:activity-settings q)] + %activity-settings-1 [p !<(_*vale:activity-settings-1 q)] + %activity-stream [p !<(_*vale:activity-stream q)] + %activity-stream-1 [p !<(_*vale:activity-stream-1 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-5 [p !<(_*vale:activity-summary-5 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)] + %activity-update-5 [p !<(_*vale:activity-update-5 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)] + %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)] + %foreigns-2 [p !<(_*vale:foreigns-2 q)] + %gangs [p !<(_*vale:gangs q)] + %gateway-status-action-1 [p !<(_*vale:gateway-status-action-1 q)] + %gateway-status-update-1 [p !<(_*vale:gateway-status-update-1 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-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-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-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)] + %negotiate-reset [p !<(_*vale:negotiate-reset 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)] + %presence-action-1 [p !<(_*vale:presence-action-1 q)] + %presence-command-1 [p !<(_*vale:presence-command-1 q)] + %presence-response-1 [p !<(_*vale:presence-response-1 q)] + %presence-update-1 [p !<(_*vale:presence-update-1 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-init-8 [p !<(_*vale:ui-init-8 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 [p !<(_*vale:verb 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-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)] + == +:: +++ types + ^- (map mark type) ^~ + %- ~(gas by *(map mark type)) + ^- (list (pair mark type)) + :~ :- %activity-action -:!>(*vale:activity-action) + :- %activity-action-1 -:!>(*vale:activity-action-1) + :- %activity-allowed -:!>(*vale:activity-allowed) + :- %activity-event -:!>(*vale:activity-event) + :- %activity-event-1 -:!>(*vale:activity-event-1) + :- %activity-feed -:!>(*vale:activity-feed) + :- %activity-feed-5 -:!>(*vale:activity-feed-5) + :- %activity-feed-6 -:!>(*vale:activity-feed-6) + :- %activity-feed-init -:!>(*vale:activity-feed-init) + :- %activity-feed-init-5 -:!>(*vale:activity-feed-init-5) + :- %activity-feed-init-6 -:!>(*vale:activity-feed-init-6) + :- %activity-full -:!>(*vale:activity-full) + :- %activity-full-1 -:!>(*vale:activity-full-1) + :- %activity-full-4 -:!>(*vale:activity-full-4) + :- %activity-full-5 -:!>(*vale:activity-full-5) + :- %activity-settings -:!>(*vale:activity-settings) + :- %activity-settings-1 -:!>(*vale:activity-settings-1) + :- %activity-stream -:!>(*vale:activity-stream) + :- %activity-stream-1 -:!>(*vale:activity-stream-1) + :- %activity-summary -:!>(*vale:activity-summary) + :- %activity-summary-1 -:!>(*vale:activity-summary-1) + :- %activity-summary-4 -:!>(*vale:activity-summary-4) + :- %activity-summary-5 -:!>(*vale:activity-summary-5) + :- %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) + :- %activity-update-5 -:!>(*vale:activity-update-5) + :- %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-init-8 -:!>(*vale:ui-init-8) + :- %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) + == +-- diff --git a/desk/mar/egg-any.hoon b/desk/mar/egg-any.hoon new file mode 100644 index 0000000000..0c5302aa04 --- /dev/null +++ b/desk/mar/egg-any.hoon @@ -0,0 +1,11 @@ +|_ =egg-any:gall +++ grad %noun +++ grow + |% + ++ noun egg-any + -- +++ grab + |% + ++ noun egg-any:gall + -- +-- 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 + -- +-- diff --git a/desk/mar/mass.hoon b/desk/mar/mass.hoon new file mode 100644 index 0000000000..d8dcd9fa62 --- /dev/null +++ b/desk/mar/mass.hoon @@ -0,0 +1,14 @@ +:: +:::: /hoon/mass/mar + :: +|_ mas=mass +++ grab + |% + ++ noun mass + -- +++ grow + |% + ++ noun mas + -- +++ grad %noun +--