A race you completed is real distance. MushMate already counted it in your dogs' load and in the four summary tiles on the Statistics screen. Yet the chart a few centimetres below forgot it.

The same screen could therefore show two totals for the same period. This was not rounding: a 120 km race disappeared from one of the numbers.

What changes

Training outings and races now feed the same web history. A race appears in the chart, table, CSV and “Current season” card. It also contributes to each participating dog's all-time and current-season mileage.

The public and club leaderboards follow the same rule. Race distance contributes to kennel mileage, and the race counts as one outing. If that race crosses a 250, 500 or 1,000 km milestone, the milestone date can now come from the race instead of training outings alone.

Labels now say “Outings”, not “Sessions”, because a competition is not a training session. The Statistics subtitle explicitly says “races included” in all five application languages.

What others see

If your kennel joins the public leaderboard, others still see the same fields: its name, region, cumulative mileage and outing count. The last two now include races.

Nothing else becomes public. Participating dogs, their positions in the team, GPS tracks, stage times, training plan and health data remain behind the same access rules.

What this does not do

This change does not merge a race into a training session. A race remains its own object, with stages, checkpoints and team. It only joins aggregates that answer: “how far did we actually travel?”

A race shared by ten dogs counts once in kennel totals and once for each of the ten participating dogs. Adding it ten times at kennel level would inflate the leaderboard.

The mobile plan-adherence band now converges too: a race day stays “used”, but it carries the kilometres actually travelled instead of zero. If legacy data contains both a race and its training twin, the race wins. For a multi-dog scope, the parent contributes the maximum individual distance — never their sum. The Duration tile still combines training moving time with race elapsed time; that distinction remains a separate issue.

The decision taken against appearances

The first diagnosis said mobile counted races twice. It relied on demonstration data that created a training-session twin for each race — a shape the production application never writes. We checked real write paths before changing the rule: the double count did not exist. The real defect was the opposite, on web: several reads never queried races at all.

We therefore removed no mileage. We aligned every read with what was actually travelled.