Training sessions: grouping solves, tagging failures and cleaning up history
A thousand unsorted solves say nothing. Sessions are the tool that makes them say something: they group what you trained, separate what should not be compared, and let you delete what never should have counted.
What a session is here
A session is a group of solves worth looking at together. One is created on its own when you start timing, and you can create your own named ones — one per method you are testing, one per new cube, one per simulated competition round.
- Every session knows which category its solves belong to and which device they were made on.
- Automatic sessions are shown folded by category, and the ones you named appear separately, under their name.
- If you trained the same category on two different devices, the row says so: solves from 2 devices.
The folding happens when the screen is drawn, not by rewriting your data. Your sessions stay yours: what changes is how they are grouped on screen.
Resilience after an error, with the events counted
Each group carries a post-error resilience figure: how well your next solve holds up after one goes wrong. It comes with the number of events it was computed from, because a figure drawn from two errors is not a measurement.
It is observable performance recovery: computed by looking at what happened on the solve after an error, not by assessing the person.
Eight failure tags, each with its penalty
A DNF on its own explains nothing. When a solve goes wrong you can tag what happened, and the tag carries the penalty the WCA gives it:
- Lock-up — the cube jammed. No penalty.
- Pop — a piece popped out.
- Corner twist — a corner twisted in place: +2 or DNF depending on the case.
- Wrong alg — misexecuted: DNF.
- Long pause — you froze. No penalty: it is lookahead data, not a rulebook error.
- One move away — it ended one turn short: +2.
- Unsolved — DNF.
- Unclassified — for when you do not know what happened, which is information too.
Separating the mechanical tag (lock-up, pop) from the execution one (wrong alg, pause) is what tells you whether the problem is your cube or your method. Merging them into a single DNF erases that.
Tools for a real history
A real history gets messy: repeated imports, a test solve, two sessions that were the same round. There are four operations for that:
- Merge two sessions without duplicates — what is repeated does not go in twice.
- Split a session — the solves you tick move to a new session.
- Remove duplicates across the whole history, not just the open session.
- Threshold cleanup — lists the solves below the time you set, so you can review and delete the accidental taps.
None of the four acts on its own or in the background: it shows you what it would touch and you apply it.
The context that is recorded, and the one that is not
A session can be given a place (at home, with other cubers, at a competition) and a goal (personal best attempt, steady average, weak cases, just for fun). It is there to compare what is actually comparable: your average at home and your average in front of people are not the same data point.
They are situational labels you pick from a list, and nothing more. There is no field asking how you feel, and the app does not infer an internal state from your times.
In and out: import, export, sync
Your solves are not locked in:
- Export one session or the whole history, as JSON or CSV.
- Import from csTimer, Twisty Timer and CubeDesk, with automatic format detection, and also from a Kruxmind export: in that case the recorded moves and the phase splits travel too, which is what no third-party format carries.
- Sync across devices with an account: what you trained on the phone and on the computer merges without duplicating.
The same module in the timer and on the home screen
Sessions look the same from the timer as from the home screen: one category at a time with its selector, automatic ones folded and named ones apart. Same information in both places, not two versions that disagree.
What it does not do
Sessions do not reorganise your history on their own and delete nothing unless you ask, and imported data is not massaged to fit: if a file carries a field that cannot be understood, that field is dropped whole and said so, rather than filled in with a guess.