Conversation
|
Thanks @jhoblitt I'll be honest I saw the discussion but did not read it fully as I noticed it was written by AI. This is not inherently bad, I use claude myself but what tends to happen is that rather than coming with a problem statement which can be worked into the app, claude is so eager to do the thing it will just come up with a solution that will work at any cost. I should have replied then I'm sorry about that. I'm still ironing out LiftLog's AI policy, but the main thing I want to instill is:
I'd love any feedback on these policies, and they are currently being outlined in https://github.com/LiamMorrow/LiftLog/blob/main/CONTRIBUTING.md. I don't mean to single you out, you just happen to be the first PR since the policy. This isn't a criticism of the work or you! I just immediately get put off when I start reading someone else's AI output. I read this blog post once and it did a great job of describing how I feel https://www.seangoedecke.com/dont-feed-me-slop/ Apologies, now with that all out of the way! You did start on this before that policy was uploaded. There's a few things here:
Philosophically this change brings in another question as well. Is it valid to track power, without weight? |
Records peak power (watts) per completed set for equipment with a power readout (e.g. Keiser trainers). Adds an optional power field on RecordedSet and an opt-in trackPower flag on the weighted exercise blueprint, both additive within schema v3. Propagates the toggle through the plan diff, preserves it when filling AI-generated plans, and adds a max-power-per-session stat series. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
A Track Power toggle in the weighted exercise editor; a skippable watts dialog on set completion (and via the long-press rep dialog); watts shown on set tiles and summary chips; and a Max Power chart on the exercise stats page. All gated on the per-exercise trackPower flag. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
The human subagent acknowledges and will respond soon. ;) |
Implements optional per-set power (watts) tracking for weighted exercises.
Discussion: #904.
Why
Some strength equipment reports the peak power produced during a set — e.g.
Keiser functional trainers show max watts per set. LiftLog has no concept of
power today, so the only workaround is a parallel "Chest Press power" exercise
whose "weight" is really watts, which distorts total-weight-lifted stats and
graphs the value in the wrong unit.
What
All of this is opt-in per exercise and defaults off — nothing changes for
users who don't enable it:
superset toggle.
asks for the max power (whole watts). Also captured when a set is completed
via the long-press rep dialog; editable there afterward.
312 W) and inhistory/summary chips.
mid-workout persists to the program (otherwise it would produce a phantom
empty diff).
for exercises that have recorded power.
Data model
RecordedSetJSONgains optionalpower?: number(integer watts); power livesonly on a completed set.
WeightedExerciseBlueprintJSONgains optionaltrackPower?: boolean.unchanged (
fromJSONdefaultstrackPowertofalse). Regenerateddocs/schemas/**(and the plan-builder schema/validator) are included.include recorded sessions).
trackPowerreturned bythe planner survives ingest.
Compatibility caveat: older clients read newer data fine (unknown fields
drop at parse), but an older client that loads-then-saves newer data (e.g. a
downgrade) rewrites it without the new fields, dropping recorded power in its
local copy. This is the app's existing behavior for every additive schema
change; flagging it in case you'd want a different policy.
Testing
round-trip, equality,
maxPower/latestRecordedPower, the trackPowerplan-diff round-trip, AI-plan fill preservation, max-power stats). Full suite
green (774 tests); oxlint/oxfmt and typecheck clean.
set-tile watts → long-press entry → plan-diff prompt → history chips →
Max Power chart → mid-workout persistence.
Checklist
area; the generated schema JSON is regenerated and included.
AI assistance: developed with AI help (locating change sites, drafting the
edits and this description); design decisions and review are mine.
🤖 Generated with Claude Code