Okay so not real documentation but a gathering of thoughts. 1. General reminder that "TK" will be used in comments that are notes to the programmers rather than typical comments that explain code. Ctrl + F to TK at the start of new sessions to see what notes a file has. 2. Here is what I am thinking for participant variables that are for "Experimental Navigation" i.e. for when we should be showing what pages to the participants. They are all binary for convienient TRUE FALSE logic In an order that attempts chronology: consented: initial: None True: Participant should proceed with the Training App False: Kick participant to the NoPay app trained: initial: False True: They have passed training and should proceed to the committment page False: They have failed training and should proceed to the attention check page, or they have not done it yet # TK: I am repeating a Lasmi experiment procedure Here attended: initial: None True: They passed the attention check and can have another try at training page False: They have failed attention check and should be kicked to the NoPay app committed: initial: None True: They should proceed to the Voting app (strictly the GroupingWaitPage) False: They should proceed to the Pay app, but with just the 'initial' payment grouped: initial: None True: They have found a group of 10 and should proceed with that group to the LeaderWaitPage in the Voting app False: This individual committed but no group was found for them. They should proceed to the Pay app, but with just the initial payment and potentially a "waiting bonus"(?) active: initial: True True: This is an active participant and should be shown the relevant pages False: We have deemed this participant inactive and then should be kicked to... TK: inactive people kicked to Pay, depending on how much they completed? orphaned: initial: False True: This participant was taking part in the Voting app, but so many of their group have been deemed inactive that we want to end the experiment prematurely as the data they contribute cannot be used in analysis False: This person has not been in a group that has had too many people leave such that we should stop that group prematurely too many people become inactive, maybe I should kill the session early screened: initial: False True: This participant has been deemed inactive (in the Voting app) so their Pages have been covered with the pantalla de inactividad. A screened participant should have their decision immediately self-submitted to keep that 'player' in the group without slowing down the rounds. // I thought it might be a good idea to additionallly have the variables "skip_to_pay" and "skip_to_no_pay" so that we can check these for the display logic rather than all the other variables. And then we can use the variables and write lines like (psuedo-code below) if attended == False: skip_to_no_pay = True And then for all after pages we can have a check of def is_displayed(): if player.participant.skip_to_no_pay == False: return False And so on