Pavlovia shelf can't find key once the corresponding record is set to DESIGNER

URL of experiment: sequenceBuilder [PsychoPy]

Description of the problem:
I am new to using the shelf feature and have the following problem. When I make a record available to a certain experiment the experiment is able to interact with the record using its key. However, I then wanted different experiments to pass information between one another by creating records that can be accessed by all of my experiments. To do this, I changed the settings of the records from one specific experiment to DESIGNER. Unfortunately I am now getting the error that the record with the indicated key cannot be found.

PS.; another feature request once the above is working: It would be great to add a third option which allows to make records available to specific groups. This would be for example really helpful for labs that have a group to organize their different experiments on git.lab.

Best regards,

1 Like

While I did not find a solution yet, I found more information and a new question:
To reiterate the problem: a single experiment can interact with the records in my shelf when I make the records accessible to that particular experiment. Once I make the records in my shelf available to the DESIGNER, the same experiment that worked before cannot access the records in the shelf anymore. That is strange given that I uploaded the experiments from my account.
The information I could extract from the javascript console about my shelf records is the following and to my innocent eyes this looks fine. It sounds like the shelf records are available to all experiments designed by my account (MOB_LAB):

Any insights from the community would be highly appreciated and a new question I am having is: is there a way to check the designer of an experiment? I would like to double check this for all of my experiment (even though the experiments are uploaded on the MOB_LAB account)

All the best,

Hi @massimo, no insights here, but I experience the same problem (Can't access dictionary shelf record - #2 by ajus).

Maybe, @Becca or @apitiot can help with that?

1 Like

Dear @massimo and @ajus,

With my apologies for the delay in answering you, the issue here is linked to Shelf methods operating under the assumption that a key without any @D<designer ID> or @E<experiment ID> component is an experiment level key. This makes it easier in most cases, as it prevents designers from having to systematically add those additional components.

As an illustration, In your MOB_LAB/sequencebuilder experiment, when you get the value for the record with key [sequence] where sequence is for instance "sequenceA", the Shelf fills in for you the missing components, i.e. it transforms the key into: [sequence, "@D<designer ID>", "@E<experiment ID>"].

So, on line 183, when you use: taskOrder = await psychoJS.shelf.getListValue({key: [sequence], defaultValue:[]}), the assumption is that the record associated with that key is an experiment level record. That worked initially, as you mention, until you changed the record level to designer level.

The solution is then to add the designer component to that key, i.e.:
taskOrder = await psychoJS.shelf.getListValue({key: [sequence, "@D39184"], defaultValue:[]});
This is how you can access a designer level record.

Does that make sense?
We are still improving upon the documentation, to make those points as clear as possible.

Best wishes,


1 Like

I think that the Shelf has been updated. I got an error when I tried to use my designer code, but it worked when I used tasklists = await psychoJS.shelf.getDictionaryFieldNames({key: ["task_launcher", "@designer"]});