SovereignStrength uses local JSON files as its primary persistence model.
This is a deliberate design choice:
- simple to inspect
- easy to back up
- easy to repair
- no hidden state in external services
Stores program templates used by the planner as structured multi-day training frameworks.
The current implementation now supports lightweight program-classification metadata in addition to day definitions.
Common documented fields include:
idnamename_enkindrecommended_levelssupported_goalssupported_weekly_sessionsequipment_profilesdays
Strength programs may also include compact selector-oriented metadata such as:
training_stylesession_duration_minsession_duration_maxfatigue_profilecomplexitygood_for_reentrygood_for_concurrent_runningprogram_familyprogression_modeltagsprimary_goalssecondary_goalsrecovery_sensitivityhybrid_profilerecommended_use_casesexcluded_use_cases
Each days entry typically contains:
labelexercises
Each exercise entry typically contains:
exercise_idsetsreps
Purpose:
- define reusable multi-day program structures
- express which user profiles a program is meant to fit
- support later program-selection logic
- keep program templates human-readable and JSON-editable
Important clarification:
The program layer is no longer only a list of day labels with exercises. It now also carries lightweight metadata about who a program is for, which is intended to support deterministic program selection later.
This metadata should stay compact and practical. It is meant to improve program matching quality, not to turn the catalog into an overengineered ontology.
Practical interpretation:
training_styledescribes the broad session structuresession_duration_min/session_duration_maxdescribe realistic session demandfatigue_profileandcomplexityprovide practical fit signalsgood_for_reentryandgood_for_concurrent_runningsupport conservative matchingprogram_familygroups related templatesprogression_modeldescribes the intended progression pattern at a high leveltagssupport lightweight future filtering without making the core schema unreadableprimary_goalsnames the main training intent in taxonomy languagesecondary_goalsnames useful but non-primary outcomesrecovery_sensitivitydescribes how conservatively the template should react to poor recovery signalshybrid_profiledescribes how the strength template should coexist with running or mixed trainingrecommended_use_casesgives concise machine-readable reasons the template is a good fitexcluded_use_casesgives concise machine-readable reasons the template should not be recommended
These richer strength metadata fields are intentionally additive. They should support matching, explainability, and future UI copy without replacing the existing selector fields.
Running and hybrid programs may also include running-specific metadata such as:
run_structure_typeimpact_profilehybrid_profilerace_distance_supportevent_capabilitytaper_supportlong_run_supportprimary_goalssecondary_goalsrecommended_use_casesexcluded_use_cases
Practical interpretation:
run_structure_typedescribes the weekly/session shape of the running workimpact_profiledescribes expected mechanical impact and tissue-load costhybrid_profiledescribes how running should coexist with strength or mixed trainingrace_distance_supportlists distance contexts the template can supportevent_capabilitydescribes whether the template is generic, base-supporting, or event-orientedtaper_supportdescribes whether the template can support tapering toward an eventlong_run_supportdescribes whether long-run development is absent, optional, supportive, or centralprimary_goalsnames the main running or hybrid training intentsecondary_goalsnames useful but non-primary outcomesrecommended_use_casesgives concise machine-readable reasons the template is a good fitexcluded_use_casesgives concise machine-readable reasons the template should not be recommended
These richer running metadata fields are intentionally additive. They should support matching, explainability, race-aware planning, and hybrid coordination without replacing the existing selector fields.
Hybrid-relevant strength, running, and mixed programs may also include explicit cross-domain coordination metadata such as:
hybrid_enabledprimary_domainsecondary_domaincross_domain_fatigue_sensitivitykey_session_protection_needslower_body_conflict_sensitivityhybrid_progression_modelsupports_cross_domain_schedule_protectionsupports_cross_domain_reduced_day_logic
Practical interpretation:
hybrid_enabledmarks that the template can participate in cross-domain planningprimary_domaindescribes the domain that should receive priority protectionsecondary_domaindescribes the supporting or coordinated domaincross_domain_fatigue_sensitivitydescribes how strongly fatigue in one domain should affect the otherkey_session_protection_needslists the session qualities that future scheduling should protectlower_body_conflict_sensitivitydescribes how carefully lower-body strength and running stress should be coordinatedhybrid_progression_modeldescribes the template-level progression relationship between domainssupports_cross_domain_schedule_protectionmarks templates that can support future scheduling protection logicsupports_cross_domain_reduced_day_logicmarks templates that can support future reduced-day logic across domains
These hybrid metadata fields are intentionally additive. They should support future recommendation, scheduling, adaptation, and explanation logic without changing current runtime behavior.
Running, hybrid, and mixed programs may also include explicit event-capability metadata such as:
supports_event_targetsupported_event_typesevent_date_required_for_full_behaviorsupports_phase_shiftsupports_tapersupports_strength_adjustment_around_eventsupports_hybrid_event_coordinationevent_priority_behaviorrace_specificity_level
Practical interpretation:
supports_event_targetmarks whether the template should react to a user-specified race or event targetsupported_event_typeslists supported event distances such as5k,10k, orhalf_marathonevent_date_required_for_full_behaviormarks whether full behavior depends on a known event datesupports_phase_shiftmarks whether the template can support future build/peak/taper phase logicsupports_tapermarks whether taper behavior can be applied safelysupports_strength_adjustment_around_eventmarks whether strength work can be adjusted around a running eventsupports_hybrid_event_coordinationmarks whether cross-domain coordination can react to event proximityevent_priority_behaviordescribes how strongly event context should influence selection or adaptationrace_specificity_leveldescribes whether race-awareness isnone,optional, orstrong
These event-capability fields are intentionally additive. They should allow future race-aware behavior to apply selectively without leaking taper or event logic into general-purpose templates.
Stores user-specific equipment increments and related profile settings.
Typical structure:
user_idequipment_incrementsbarbelldumbbellmachinecablebodyweight
Purpose:
- translate ideal progression into realistic next loads
- calculate
actual_possible_next_load
Stores exercise definitions used by planning, substitution, progression, and review logic.
The current implementation uses richer metadata than the minimal early schema.
Common documented fields include:
idnamename_encategorycategory_enmovement_patterndifficulty_tierequipment_typedefault_unitinput_kindlocal_load_targets
local_load_targets is a compact protection-oriented metadata field.
It defines which local regions an exercise typically loads enough that local irritation or protection signals may matter later in planning logic.
It is intended as a practical mapping layer, not a medical model.
Current target keys include:
ankle_calfkneehiplow_backshoulderelbowwristprogression_modeprogression_styleprogression_steprecommended_stepload_incrementload_optionalsupports_bodyweightsupports_loadstart_weightnotesnotes_en
Optional configuration fields may include:
set_optionsrep_optionstime_optionsload_optionsprogression_channelsprogression_ladderimage_folderexternal_imagesrep_display_hint
Purpose:
- define exercise identity
- group related exercises by movement family
- support progression rules
- support substitution and variation
- support different review/input modes
- support media-backed exercise display where available
Important clarification:
The exercise layer is no longer just a minimal list of names and load steps. It now provides the identity metadata used by family-aware planning logic.
Stores workout history.
Documented structure includes fields such as:
dateentries[]exercise_idsetsrepsachieved_repsloadnotes
Purpose:
- preserve workout history
- drive progression decisions
- support fatigue-aware planning
- support family-aware training interpretation
Stores daily check-in data.
Documented fields include:
datesleep_scoreenergy_scoresoreness_scorereadiness_scorenotes
Purpose:
- record readiness inputs
- influence plan type
- influence session intensity
Current limitation:
The documented and observed model does not yet expose a mature local irritation or injury-specific input layer such as:
knee_painback_painlocal_soreness- side-specific pain tracking
That remains a future extension if implemented explicitly.
Stores recent recovery-oriented context used by the planning engine.
Purpose may include:
- recent readiness context
- multi-session fatigue pressure
- short-term recovery interpretation
Stores running/cardio-related session history where relevant.
Purpose:
- preserve running session continuity
- support simple cardio-aware planning
- support running-related review and forecasting where implemented
The current documented engine uses several computed concepts.
Derived from:
- sleep
- energy
- soreness
Used for:
- plan type
- session intensity
- lighter-session bias
Derived from signals such as:
- failure
- load drop between sets
- recent training history
Documented interpretation:
0= fresh1= light fatigue2= moderate fatigue3= high fatigue
The implementation also uses exercise identity metadata to derive related concepts such as:
- movement family
- family fatigue state
- related exercise clusters
- variation readiness
- substitution candidates
Family keys may be based on:
fatigue_groupwhere present- otherwise
movement_pattern - otherwise
category
The system distinguishes between:
recommended_next_loadactual_possible_next_load
If the available equipment forces a larger jump than the ideal progression step, the system flags:
equipment_constraint = true
The implementation now includes a compact rolling local_state structure inside adaptation-oriented user state.
Its purpose is to provide a small protection-oriented regional view that combines:
- recent local check-in signals
- recent exercise loading
- recent cardio loading
- explicit
local_load_targetsmetadata
This is not a diagnosis layer. It is a short-horizon protection context.
local_state is keyed by compact region names such as:
ankle_calfkneehiplow_backshoulderelbowwrist
Each region contains a compact state object with fields such as:
latest_signalsignal_persistencerecent_load_countstatereasons
Represents the latest recent local signal seen in check-in input for that region.
Current values include:
nonecautionirritated
Counts how many recent check-ins included a local signal for that region within the short rolling window.
This is intended as a compact persistence hint, not a clinical severity scale.
Counts how often recent training history loaded that region through:
- exercise
local_load_targets - cardio mode local target mapping
This is a simple rolling pressure signal. It is not a biomechanical quantity.
Current compact local protection state.
Current values include:
readycautionprotect
This field is intended to be conservative and explainable.
A short list of explanation strings describing why a region currently has its local state.
This exists for debugging and future planning transparency.
The rolling local_state model is still intentionally small.
It should not be confused with:
- diagnosis logic
- injury prediction
- side-specific pathology tracking
- long-horizon health modeling
- detailed tissue simulation
It is a deterministic protection-oriented state, not sports medicine cosplay.
The current model is richer than the original minimal documentation, but it still does not claim to fully implement:
- explicit local tissue tolerance tracking
- side-specific injury history
- persistent local vulnerability profiles
- detailed biomechanical load accounting per structure
Do not confuse movement-family-aware planning with a full tissue model. That would be documentation fraud with extra steps.
As the repository matures, the data model may be documented more explicitly around:
- exercise identity and family metadata
- session history
- running/cardio history
- user settings
- optional vulnerability or limitation signals
That split should only be committed as canonical once implementation and documentation stay aligned.
Do not let documentation become fan fiction.