trails/openspec/specs/profile-stats/spec.md
Ullrich Schäfer 2ad9898f9c
openspec: archive profile-stats + profile-weekly-distance, sync specs
Both changes are implemented and merged (#539, #541). Promote their deltas into
openspec/specs/, move the changes to changes/archive/2026-06-14-*, and add the
two capabilities to the CAPABILITIES index.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 16:34:06 +02:00

1.8 KiB

profile-stats Specification

Purpose

TBD - created by archiving change profile-stats. Update Purpose after archive.

Requirements

Requirement: Lifetime totals on the profile

The profile page SHALL show a stats header with the owner's lifetime totals: activity count, total distance, total ascent, and total elapsed time.

Scenario: Totals shown for an athlete with activities

  • WHEN a user views a profile whose owner has activities
  • THEN a stats header shows the activity count, total distance, total ascent, and total elapsed time

Scenario: Header hidden when there are none

  • WHEN the profile owner has no activities the viewer may see
  • THEN no stats header is shown

Requirement: Viewer-scoped roll-ups

The roll-up SHALL count only the activities the viewer is permitted to see: public-only for other viewers, and all of the owner's activities when the owner views their own profile.

Scenario: Visitor sees public-only totals

  • WHEN a visitor (not the owner) views a profile
  • THEN the totals aggregate only the owner's public activities (unlisted and private are excluded)

Scenario: Owner sees their full totals

  • WHEN the owner views their own profile
  • THEN the totals aggregate all of the owner's activities regardless of visibility

Requirement: Recent-activity summary

The stats header SHALL show the count of activities in the last 4 weeks (rolling), under the same viewer scoping as the totals.

Scenario: Last-4-weeks count

  • WHEN the stats header is shown
  • THEN it includes the number of the owner's (viewer-scoped) activities started in the last 28 days

Requirement: Localized stat labels

The stats header SHALL render its labels and units through localized strings.

Scenario: German labels

  • WHEN the UI locale is German
  • THEN the stat labels render in German