Review and update the questionnaire in the shared sheet.
Use this page if your main access is the shared questionnaire sheet. The sheet is the editable questionnaire source. Valid edits there are what the running survey reads.
What you can do in Google Sheets
Review and update wording in the current questionnaire version.
Add or adjust translations in the shared table.
Update answer options and context choices.
Create a new dated version tab when a change should be tracked separately.
Use the built-in sheet enforcer when you need the tab normalized and reformatted.
Current questionnaire contract
One tab per version.
Keep all languages stacked in the same Google Sheet tab. English rows are authoritative for type, required, active, order, scale_id, and randomize_question_order.
Scoring must stay complete.
Every scorable submission must produce exactly the 11 canonical ASC factor rows. A missing, duplicate, or non-canonical scale_id blocks capture or export instead of silently producing a partial dataset.
Context drives peer buckets.
q0 and q1 feed peer comparison context. Raw context can be stored for canonicalization, but participant comparison dropdowns only expose enabled rows from the comparison_tokens registry.
Some flow pieces are app-side.
The consent block and first-slider reminder are not sheet rows. q_free, when present, is the last questionnaire page before feedback. The parked experience_tracer is not part of the active sheet contract.
Stable comparison tokens
Use comparison_tokens to promote stable peer buckets.
The questionnaire tab and the comparison registry have different jobs. The questionnaire tab decides what participants can select and submit. The comparison_tokens tab decides which stable buckets can appear in the feedback comparison controls.
Questionnaire options collect data.
Adding Breathwork, Box Breathing, or a new event-specific option to the questionnaire lets participants submit that value.
Stable tokens preserve history.
A token such as breathwork or berlin_breathwork_days_2026 should stay fixed even if the participant-facing label changes later.
Enabled rows drive the feedback UI.
Only rows with comparison_enabled=1 appear in the comparison dropdowns. If there is no peer data yet, the option can still appear, but the peer plot will show an empty comparison state.
Aliases protect old labels.
Put old labels, spelling variants, and translated legacy labels in aliases so historical submissions still map to the same internal token.
Columns to maintain
kind: use induction or dose.
token: stable internal value, for example breathwork or berlin_breathwork_days_2026.
label_en, label_de, label_es: participant-facing labels for comparison controls.
induction_token: optional for dose rows; use it when a dose belongs under one induction, for example breathwork.
aliases: semicolon-separated old labels and alternate spellings that should map to the same token.
comparison_enabled: set to 1 to show the row in comparison controls; set to 0 to keep it mapped but hidden.
This changes what participants can submit in the running survey.
2
Add or update the matching registry row.
Choose a stable token. Do not change that token later just because the visible label changes.
3
Keep new buckets hidden until they are intended for comparison.
Use comparison_enabled=0 while collecting or testing. Switch to 1 only when collaborators agree it should appear publicly in the comparison controls.
4
Notify the app maintainer after token or alias changes.
The peer-plot cache should be rebuilt after mapping changes so historical rows use the updated canonical tokens.
Google Sheets workflow
1
Open the current shared questionnaire tab.
Confirm you are working in the intended version before changing anything.
2
Make the content change.
Update wording, translations, options, or structural rows in the stacked table. Keep the same columns across language blocks.
3
Keep stable questions stable.
Keep the same item_id when the question is still the same underlying question, and keep scorable English rows mapped through canonical scale_id values.
4
Update comparison_tokens when comparison eligibility changes.
Do this only when an induction or dose should map to a stable peer bucket. New questionnaire options do not automatically become comparison options.
5
Let the sheet enforcer sync the tab.
If the Google Sheets Apps Script is installed, it will auto-sort language blocks, keep the expected header shape, and apply the row formatting the questionnaire uses.
6
Create a new dated tab when the version truly changes.
Use a new dated version when the questionnaire definition should be tracked separately.
7
Open the running survey once if you want confirmation.
That is enough to see whether the latest sheet version was picked up. For response logic or scoring changes, complete one submit path and confirm that feedback renders.
8
Tell download users if files may change.
If the change affects the meaning of later exports or codebooks, let OSF users know what to expect.
What the Google Sheets enforcer does
If installed, the Apps Script runs on edit and is also available from the AXP Sheet menu as Sync questionnaire sheet.
It keeps the questionnaire tab in the expected header order and auto-sorts each language block by the English row order.
It colors and formats rows from the English structural metadata, including active state and scale_id.
It checks that explicit induction_method_N, dose_options_N, and dose_label_override_N triplets are structurally complete before syncing.
It helps keep the sheet structurally valid and readable, but it is not a separate publish step. The running survey still reads the questionnaire from the sheet itself.
Questionnaire adaptation flow
Use this when you want the full path from a sheet edit into the running survey.