Registered 24 August 2026, before any analysis was run.
This document exists to stop us from finding what we want to find. It
states the question, the analysis, and the interpretation limits in
advance. The analysis code (scripts/mood-prepost.ts) was written
against this document and run afterwards.
If the result is null or negative, it gets published exactly as readily as a positive one. That commitment is the whole point of writing this first.
The question
Within a single sitting, does self-reported mood change between arriving and leaving?
That is all. Not whether the app works, not whether anyone is better off, not whether parts work is effective. A within-session mood shift is a small, immediate, self-reported thing, and it is the only thing this data can speak to.
Data
- Source.
Session.mood(recorded at the start) andSession.moodAfter(recorded in the closing ceremony), for completed sittings. - Scoring. Both are canonical mood words, mapped to a numeric scale
by
scoreMoodinsrc/lib/moods.ts. Higher is lighter. - Inclusion. A sitting contributes one pair if and only if both values are present and both resolve to a score. Sittings missing either are excluded, not imputed.
- Unit of analysis. The sitting, not the person. See limitations — this is a known weakness, not an oversight.
- Privacy. The analysis reads two ordinal columns and a user id for clustering counts. It reads no message content, no summaries, no noticings. Output is aggregate only.
Hypothesis
H1: the mean paired difference (after − before) is greater than zero.
H0: the mean paired difference is zero.
Analysis, fixed in advance
- Primary — sign test. The proportion of pairs that moved lighter, against an exact two-sided binomial test with ties excluded. Mood words are ordinal, not interval, so a test that only uses the direction of each change is the honest primary.
- Secondary — mean paired difference, with a 95 % bootstrap confidence interval (10,000 resamples, fixed seed). Bootstrap rather than a t interval because the differences are discrete, bounded and unlikely to be normal.
- Effect size — Cohen's dz, reported with the explicit caveat that it treats an ordinal scale as interval and should be read as a rough magnitude only.
- Descriptives — n pairs, n distinct people, median difference, proportion lighter / unchanged / heavier, and the distribution of pairs per person.
No other tests. No subgroup analysis. No re-scoring of the mood scale. If any of those become interesting, they are a new pre-registration.
Interpretation limits, stated before seeing the result
These do not go away if the numbers look good. They are why this analysis cannot support a claim of benefit.
- No control group. Nobody is compared against sitting quietly for twenty minutes, journalling on paper, or doing nothing. A positive result is entirely compatible with "any twenty-minute pause helps".
- Regression to the mean. People plausibly open the app when they feel worse than usual. Feeling better afterwards is the expected behaviour of a fluctuating measure regardless of what happened in between.
- Demand characteristics. The after-mood is asked inside a warm closing ceremony that has just thanked the person for their courage. That is good design and terrible measurement.
- Self-selection and attrition. Only people who finished a sitting contribute a pair. Anyone who found it unhelpful and abandoned it mid-way is silently excluded, biasing the sample toward the people it suited.
- Immediate only. This measures the minute after a sitting. It says nothing whatsoever about the next day, the next week, or anything that matters.
- Non-independence. One person contributing forty sittings counts forty times. The primary test assumes independent observations and this violates that. The per-person distribution is reported so the severity is visible, and the result must be read as "per sitting", never "per person".
- Ordinal scale. Words placed on a number line. The distance from "heavy" to "tired" is not the distance from "steady" to "clearer" in any principled sense.
What would falsify H1
A confidence interval on the mean difference that spans zero, or a sign test that fails to reject at the conventional threshold, is a null result and will be reported as one.
What this would need to become real evidence
A pre-post design with a waitlist or active control, an independent measure taken outside the app at least a week later, a person-level analysis with one observation per person or a proper mixed model, and somebody who does not own the product doing the analysis. Until then this is an operational sanity check on a feature, not evidence of benefit — and the wording of any public claim must reflect that.
Consent
The mood values are already collected as a product feature and covered by the privacy policy. This aggregate analysis introduces no new collection and no new sharing. If any of it is ever published beyond internal use, that requires a specific consent step first, and this document is not that step.