I have. It merits a more thorough response than I’ve been able to give it but 
with archiving up I can put thought towards it now. I’ll write more tomorrow.

-o

P.S.: https://twitter.com/derspiny/status/915838104304590848

> On Oct 5, 2017, at 2:21 AM, Aris Merchant 
> <thoughtsoflifeandligh...@gmail.com> wrote:
> 
> o, have you seen this?
> 
> -Aris
> 
> On Fri, Sep 29, 2017 at 1:00 AM, Aris Merchant
> <thoughtsoflifeandligh...@gmail.com> wrote:
>> On Thu, Sep 28, 2017 at 12:28 AM, Owen Jacobson <o...@grimoire.ca> wrote:
>>>> This is the first stage of an attempt to create an annotation system 
>>>> designed to formalize game state changes by attaching formal descriptions 
>>>> of those changes to documents, represented by email messages. At this 
>>>> time, I plan only to archive messages, but there will be a read element 
>>>> allowing anonymous users to read and enumerate messages from the archive 
>>>> in the near future.
>>> 
>>> The broader scheme here is this:
>>> 
>>> 1. A client app forwards public messages to the archive. They sit in an 
>>> “unannotated messages” queue until someone - me, probably - picks them up 
>>> and annotates them.
>>> 
>>> 2. A user annotates each message with a short formal description of the 
>>> game-state changes imposed by a message. These annotations are mutable, so 
>>> mistaken annotations are not a permanent problem, and are versioned so that 
>>> vandalism can be undone. I haven’t worked out the exact schema for these 
>>> annotations, yet, but the concept I’m working with is loosely based on the 
>>> RFC 6902 JSON Patch format, adapted for Agora’s specific needs. For 
>>> example, an annotation transferring shinies might read, in YAML form for 
>>> readability:
>>> 
>>>> - op: event
>>>>  office: Secretary
>>>>  summary: o paid Ørjan 1 sh.
>>>> 
>>>> - op: transfer
>>>>  from: /Shinies/Player/o
>>>>  to: /Shinies/Player/Ørjan
>>>>  delta: 1
>>> 
>>> Obviously, this is an awkward format, but it has some nice properties that 
>>> I think make it worth building on. I’m still tweaking the actual format for 
>>> annotaitons, and it’s likely I’ll add a UI or some variety of terse syntax 
>>> so that it’s possible to write this kind of simple action in fewer than 
>>> eight lines.
>>> 
>>> 3. The archive exposes an API that can sum up the annotations, starting 
>>> from the beginning of time, all the way up to a specific point in time, and 
>>> then return the computed state of the game plus a list of events by office. 
>>> My report scripts will become “query this API in a specific way, and feed 
>>> the resulting data to a template to render it for email.”
>>> 
>>> The idea is that instead of trying to reduce Agora to a set of formal 
>>> actions, I instead want to keep the prose forms as the primary documents 
>>> and allow formal note-taking alongside them. Many of Agora’s state changes 
>>> are formalizable, and from there, those parts of Agora’s state are 
>>> computable, so this could take a bunch of load off for computing those 
>>> parts of the game.
>>> 
>>> I’ve had some success with a reduced version of this approach for the 
>>> office of Surveyor. All Surveyor’s reports have been generated by a 
>>> built-to-purpose Python script that applies the same principles to a set of 
>>> local YAML files instead of a web API.
>>> 
>>> -o
>> 
>> I love this idea. It seems very practical without sacrificing
>> usability for the end users (i.e. the players). I have a few
>> suggestions:
>> 
>> 1. Who annotates. I think giving everyone access to the annotation
>> interface would probably make sense. You can't personally annotate
>> every message affecting the entire gamestate, and I'd love to help set
>> the formats I'm consuming for Promotor. nichdel came up with a
>> proposal format suggestion, and now that this has come along I'm
>> modifying it to have more information for the Promotor side of the
>> Promotor-Assessor pipeline. I'm sure other officers have input on how
>> formalization for their parts of the gamestate should take place, and
>> they have a unique understanding of what information is needed to do
>> their jobs.
>> 
>> 2. Annotation style. As you've mentioned, your format is a bit forced.
>> You're doing a great job with what you have to work with, but I think
>> the basic problem may be that you're trying to use markup to represent
>> transactions. It works wonderfully for representing the data (and
>> should probably be a base format for that), but poorly for
>> representing things like conditional actions. You can add and add to
>> the format, but you'll just be making it more complicated to use. I
>> suggest you consider using programs (possibly with methods you
>> provide) as annotations. It feels kind of intuitively weird to
>> represent an annotation as a program, and they don't have the nice
>> formal properties the data itself does (except maybe if you used
>> Haskell or something), but I think it might be a lot more practical
>> for actual use. Programs allow for loops, unrestricted conditionals,
>> and the like, meaning that you don't have to work something out by
>> hand or create a new transaction type just for one complicated
>> transaction. They would work well for this because they take data and
>> compute changes, which is exactly what our action system does. There
>> is thus a neat one-to-one correspondence between an action and a
>> program.
>> 
>> o, honestly, this is an amazing idea. This is such a brilliant
>> solution to the entire problem that I'm kind of kicking myself for not
>> coming up with it (not that I would have been able to implement it if
>> I had).
>> 
>> -Aris

Reply via email to