fix(training): neutralize volume trends
Summary
- replace the unsupported
isProgressingjudgment with server-owned descriptive volume direction - render increasing, decreasing, and stable exercise-volume trends with explicit neutral text and one neutral chart color
- rename the Strength section to describe exercise volume rather than imply that more load is inherently desirable
Validation
pnpm vitest run --project unit packages/server/src/repositories/strength-repository.test.ts packages/server/src/routers/strength-stress.test.ts packages/web/src/components/ProgressiveOverloadCards.test.tsx(59 passed)pnpm --dir packages/server exec tsc --noEmitpnpm --dir packages/web exec tsc --noEmitpnpm exec tsc --noEmitpnpm --dir packages/web exec storybook build- targeted Biome and cspell checks
Platform parity
Mobile has no progressive-overload query or rendering surface, so there is no native production behavior to change. The descriptive contract remains available to any future consumer.
Local environment evidence
The broad pnpm test run passed the changed tests and produced no assertion failure before an unrelated Compose wrapper test stalled for 3:05 in docker compose ... port db 5432. The runner was stopped with exit 130 without retry or workaround; the unresolved local daemon evidence is recorded in docs/production-incident-baseline.md. Exact-head CI is authoritative for the full suite and DB shards.
Fixes #2113
Summary by Sourcery
Neutralize strength progressive-overload volume trends by replacing the boolean progression judgment with a descriptive server-owned trend and updating the web UI to present volume direction neutrally.
New Features:
- Expose an explicit
trendfield (increasing,decreasing,stable) in the progressive overload server response for each exercise. - Display exercise weekly volume direction in the Strength training tab using neutral text labels and a single chart color instead of positive/negative indicators.
Enhancements:
- Rename the Strength progressive overload section and empty-state copy to describe exercise volume trends rather than imply desirability of load changes.
- Add a TDD plan document outlining the neutral strength volume trends change and its validation strategy.
Documentation:
- Document the neutral strength volume trend behavior and scope in a new superpowers plan file.
- Record a local Docker daemon Compose-port stall as unresolved evidence in the production incident baseline, clarifying CI as the authoritative validation gate.
Tests:
- Expand server unit, router, and stress tests to assert the new descriptive trend contract and serialization.
- Add web component tests for ProgressiveOverloadCards to verify neutral styling, explicit trend text, and consistent chart coloring.
- Update Storybook fixtures to match the new progressive overload trend contract.
Chores:
- Adjust type definitions and interfaces across server and web to remove the
isProgressingflag in favor of the newtrendtype.
Summary by cubic
Replaces the boolean progression judgment with a server-owned trend and updates the Strength UI to neutral text and a single blue chart color, with slopes formatted in the user’s units. Fixes #2113.
-
Refactors
- Server:
ProgressiveOverloadnow exposestrend(increasing|decreasing|stable) and removesisProgressing;strength.progressiveOverloadreturnstrendand exportsProgressiveOverloadTrend. - Web:
ProgressiveOverloadCardsshows “Increasing/Decreasing/Stable X kg/lb/week” with an absolute slope in the selected units, one neutral sparkline color, and no arrows; section retitled to “Exercise Volume Trends” with neutral empty-state copy. - Tests and Storybook updated; router and stress tests expect
trend; new component test verifies neutral styling and unit formatting.
- Server:
-
Migration
- Replace uses of
isProgressingwithtrend. - Show the absolute
slopeKgPerWeekwith a direction label, formatted in the selected weight units; do not infer desirability from color or icons.
- Replace uses of