|% +$ kind ?(%diary %heap %chat) ++ epic |% +$ saga $~ [%lev ~] $% [%dex ver=@ud] [%lev ~] [%chi ~] == +$ epic @ud -- ++ meta |% +$ data $: title=cord description=cord image=cord cover=cord == +$ diff $% [%title =cord] [%description =cord] [%image =cord] [%cover =cord] == -- ++ e epic ++ okay `epic:e`2 ++ mar |% ++ act `mark`(rap 3 %group-action '-' (scot %ud okay) ~) ++ upd `mark`(rap 3 %group-update '-' (scot %ud okay) ~) ++ log `mark`(rap 3 %group-log '-' (scot %ud okay) ~) ++ int `mark`(rap 3 %group-init '-' (scot %ud okay) ~) -- :: $flag: ID for a group :: +$ flag (pair ship term) :: :: $nest: ID for a channel, {app}/{ship}/{name} :: +$ nest (pair term flag) :: :: $sect: ID for cabal, similar to a role :: +$ sect term :: :: $zone: channel grouping :: :: includes its own metadata for display and keeps the order of :: channels within. :: :: zone: the term that represents the ID of a zone :: realm: the metadata representing the zone and the order of channels :: delta: the set of actions that can be taken on a zone :: %add: create a zone :: %del: delete the zone :: %edit: modify the zone metadata :: %mov: reorders the zone in the group :: %mov-nest: reorders a channel within the zone :: ++ zone =< zone |% +$ zone @tas +$ realm $: met=data:meta ord=(list nest) == +$ diff (pair zone delta) +$ delta $% [%add meta=data:meta] [%del ~] [%edit meta=data:meta] [%mov idx=@ud] [%mov-nest =nest idx=@ud] == -- :: :: $fleet: group members and their associated metadata :: :: vessel: a user's set of sects or roles and the time that they joined :: @da default represents an admin added member that has yet to join :: ++ fleet =< fleet |% +$ fleet (map ship vessel) +$ vessel $: sects=(set sect) joined=time == +$ diff $% [%add ~] [%del ~] [%add-sects sects=(set sect)] [%del-sects sects=(set sect)] == -- :: :: $channel: a medium for interaction :: ++ channel =< channel |% +$ preview $: =nest meta=data:meta group=^preview == :: +$ channels (map nest channel) :: :: $channel: a collection of metadata about a specific agent integration :: :: meta: title, description, image, cover :: added: when the channel was created :: zone: what zone or section to bucket in :: join: should the channel be joined by new members :: readers: what sects can see the channel, empty means anyone :: +$ channel $: meta=data:meta added=time =zone join=? readers=(set sect) == :: :: $diff: represents the set of actions you can take on a channel :: :: add: create a channel :: edit: edit a channel :: del: delete a channel :: add-sects: add sects to readers :: del-sects: delete sects from readers :: zone: change the zone of the channel :: join: toggle default join :: +$ diff $% [%add =channel] [%edit =channel] [%del ~] :: [%add-sects sects=(set sect)] [%del-sects sects=(set sect)] :: [%zone =zone] :: [%join join=_|] == -- :: :: $group: collection of people and the pathways in which they interact :: :: group holds all data around members, permissions, channel :: organization, and its own metadata to represent the group :: +$ group $: =fleet cabals=(map sect cabal) zones=(map zone realm:zone) zone-ord=(list zone) =bloc =channels:channel imported=(set nest) =cordon secret=? meta=data:meta == :: +$ group-ui [group saga=(unit saga:e)] :: $cabal: metadata representing a $sect or role :: ++ cabal =< cabal |% :: +$ cabal [meta=data:meta ~] :: +$ diff $% [%add meta=data:meta] [%edit meta=data:meta] [%del ~] == -- :: :: $cordon: group entry and visibility permissions :: ++ cordon =< cordon |% :: :: $open: a group with open entry, only bans are barred entry :: ++ open |% :: $ban: set of ships and ranks/classes that are not allowed entry :: :: bans can either be done at the individual ship level or by the :: rank level (comet/moon/etc.) :: +$ ban [ships=(set ship) ranks=(set rank:title)] +$ diff $% [%add-ships p=(set ship)] [%del-ships p=(set ship)] :: [%add-ranks p=(set rank:title)] [%del-ranks p=(set rank:title)] == -- :: :: $shut: a group with closed entry, everyone barred entry :: :: a shut cordon means that the group is closed, but still visible. :: people may request entry and either be accepted or denied or :: they may be invited directly :: :: ask: represents those requesting entry :: pending: represents those who've been invited :: ++ shut |% +$ state [pend=(set ship) ask=(set ship)] +$ kind ?(%ask %pending) +$ diff $% [%add-ships p=kind q=(set ship)] [%del-ships p=kind q=(set ship)] == -- :: :: $cordon: a set of metadata to represent the entry policy for a group :: :: open: a group with open entry, only bans barred entry :: shut: a group with closed entry, everyone barred entry :: afar: a custom entry policy defined by another agent :: +$ cordon $% [%shut state:shut] [%afar =flag =path desc=@t] [%open =ban:open] == :: :: $diff: the actions you can take on a cordon :: +$ diff $% [%shut p=diff:shut] [%open p=diff:open] [%swap p=cordon] == -- :: :: $bloc: superuser sects :: :: sects in the bloc set are allowed to make modifications to the group :: and its various metadata and permissions :: ++ bloc =< bloc |% +$ bloc (set sect) +$ diff $% [%add p=(set sect)] [%del p=(set sect)] == -- :: :: $diff: the general set of changes that can be made to a group :: +$ diff $% [%fleet p=(set ship) q=diff:fleet] [%cabal p=sect q=diff:cabal] [%channel p=nest q=diff:channel] [%bloc p=diff:bloc] [%cordon p=diff:cordon] [%zone p=diff:zone] [%meta p=data:meta] [%secret p=?] [%create p=group] [%del ~] == :: :: $action: the complete set of data required to edit a group :: +$ action (pair flag update) :: :: $update: a representation in time of a modification of a group :: +$ update (pair time diff) :: :: $create: a request to make a group :: +$ create $: name=term title=cord description=cord image=cord cover=cord =cordon members=(jug ship sect) secret=? == :: +$ init [=time =group] :: :: $groups-ui: map for frontend to display groups +$ groups-ui (map flag group-ui) +$ groups (map flag group) +$ net-groups (map flag [net group]) :: :: $log: a time ordered map of all modifications to groups :: +$ log ((mop time diff) lte) :: ++ log-on ((on time diff) lte) :: :: $net: an indicator of whether I'm a host or subscriber :: +$ net $~ [%pub ~] $% [%pub p=log] [%sub p=time load=_| =saga:e] == :: :: $join: a join request, can elect to join all channels :: +$ join $: =flag join-all=? == :: :: $knock: a request to enter a closed group :: +$ knock flag :: :: $progress: the state of a group join :: +$ progress ?(%knocking %adding %watching %done %error) :: :: $claim: a mark for gangs to represent a join in progress :: +$ claim $: join-all=? =progress == :: :: $preview: the metadata and entry policy for a group :: +$ preview $: =flag meta=data:meta =cordon =time secret=? == :: +$ previews (map flag preview) :: :: $invite: a marker to show you've been invited to a group :: +$ invite (pair flag ship) :: :: $gang: view of foreign group :: +$ gang $: cam=(unit claim) pev=(unit preview) vit=(unit invite) == :: +$ gangs (map flag gang) :: --