kinemotion 0.35.1__tar.gz → 0.36.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kinemotion might be problematic. Click here for more details.
- {kinemotion-0.35.1 → kinemotion-0.36.0}/CHANGELOG.md +26 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/PKG-INFO +1 -1
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/pyproject.toml +1 -1
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/src/kinemotion_backend/app.py +8 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/development/agents-guide.md +2 -2
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/App.tsx +6 -0
- kinemotion-0.36.0/frontend/src/hooks/useBackendVersion.ts +40 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/pyproject.toml +1 -1
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/api.py +1 -1
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/cmj/metrics_validator.py +107 -37
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/cmj/validation_bounds.py +4 -1
- {kinemotion-0.35.1 → kinemotion-0.36.0}/uv.lock +1 -1
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/api/api-reference-quick-commands.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/development-standards-quality-gates.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/hook-configuration-audit.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/hook-quick-reference.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/structured-logging-implementation.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.claude/agents/biomechanics-specialist.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.claude/agents/computer-vision-engineer.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.claude/agents/devops-cicd-engineer.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.claude/agents/frontend-developer.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.claude/agents/ml-data-scientist.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.claude/agents/project-manager.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.claude/agents/python-backend-developer.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.claude/agents/qa-test-engineer.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.claude/agents/technical-writer.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.claude/hooks/fix-basic-memory-names.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.claude/settings.local.json +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.cursor/mcp.json +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.dockerignore +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.gitattributes +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.github/dependabot.yml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.github/pull_request_template.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.github/workflows/deploy-backend.yml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.github/workflows/release.yml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.github/workflows/security.yml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.github/workflows/test.yml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.gitignore +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.mcp.json +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.readthedocs.yml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.serena/.gitignore +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.serena/memories/camera-perspective-validation-study.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.serena/memories/code_style_and_conventions.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.serena/memories/current-project-architecture.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.serena/memories/deployment-setup-complete.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.serena/memories/github-project-setup-summary.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.serena/memories/mvp-first-strategy.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.serena/memories/project_overview.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.serena/memories/specialist-agents-routing.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.serena/memories/suggested_commands.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.serena/project.yml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.tool-versions +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/.vercelignore +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/CLAUDE.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/CONTRIBUTING.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/Dockerfile +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/GEMINI.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/LICENSE +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/SECURITY.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/.dockerignore +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/.env.example +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/Dockerfile +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/docs/fly-deployment.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/docs/implementation-summary.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/docs/setup.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/docs/tests.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/src/kinemotion_backend/__init__.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/src/kinemotion_backend/auth.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/src/kinemotion_backend/logging_config.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/src/kinemotion_backend/middleware.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/tests/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/tests/__init__.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/tests/conftest.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/tests/test_api_endpoints.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/tests/test_error_handling.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/tests/test_health.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/tests/test_r2_integration.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/tests/test_validation.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/backend/uv.lock +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/api/cmj.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/api/core.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/api/dropjump.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/api/overview.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/development/test-suite-review-december-2025.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/development/testing-standards.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/development/testing.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/development/type-hints.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/development/validation-roadmap.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/guides/cloud-run-deployment.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/guides/cmj-recording-protocol-es.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/guides/cmj-recording-protocol.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/guides/deployment-checklist.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/guides/local-testing.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/guides/setup-issue-12.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/index.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/quick-start.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/reference/cloud-run-quick-reference.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/reference/json-output-format.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/reference/json-structure-comparison.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/reference/parameters.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/paper-downloader/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/paper-downloader/dois.txt +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/paper-downloader/download.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/paper-downloader/pyproject.toml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/paper-downloader/uv.lock +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/STYLE_GUIDE.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/technical/framerate.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/technical/implementation-details.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/validation/determinism-test.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/validation/known-height-validation.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/docs/validation-status.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/examples/bulk/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/.editorconfig +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/.env.example +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/.gitattributes +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/.gitignore +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/.yarnrc.yml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/index.html +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/package.json +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/components/Auth.tsx +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/components/ErrorBoundary.tsx +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/components/ErrorDisplay.tsx +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/components/LoadingSpinner.tsx +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/components/RecentUploads.tsx +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/components/ResultsDisplay.tsx +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/components/ResultsSkeleton.tsx +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/components/UploadForm.tsx +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/hooks/useAnalysis.ts +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/hooks/useAuth.ts +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/hooks/useRecentUploads.ts +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/index.css +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/lib/supabase.ts +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/main.tsx +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/types/api.ts +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/src/vite-env.d.ts +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/vercel.json +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/vite.config.ts +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/frontend/yarn.lock +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/justfile +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/local_dev.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/mkdocs.yml +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/presentation/.gitignore +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/presentation/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/presentation/demos/.gitignore +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/presentation/demos/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/presentation/demos/api_demo.ipynb +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/presentation/demos/batch_processing_demo.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/presentation/demos/sample_data/.gitkeep +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/presentation/presentation_guide.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/presentation/revealjs/.gitignore +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/presentation/revealjs/Makefile +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/presentation/revealjs/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/presentation/revealjs/slides.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/presentation/speaker_script.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/requirements-docs.txt +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/samples/cmjs/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/SCRIPTS_QUICKREF.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/analyze_determinism_variance.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/basic-memory-utils.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/debug_contact_states.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/debug_detection.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/find_unused_features.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/generate_test_data.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/optimize_detection_params.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/plot_cmj_velocities.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/plot_validation_results.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/plot_velocities.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/prepare_ground_truth.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/project/README.md +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/project/add-issue.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/project/batch-set-fields.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/project/helpers.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/project/list.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/project/set-field.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/project/set-status.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/project/summary.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/project.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/setup-github-deploy.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/setup-google-oauth.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/setup-supabase-local.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/setup-supabase-production.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/test_acceleration_standing.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/test_determinism.sh +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/test_drop_start_debug.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/scripts/validate_known_heights.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/sonar-project.properties +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/cmj/analysis.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/core/debug_overlay_utils.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/core/experimental.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/core/formatting.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/core/metadata.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/core/quality.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/core/validation.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/core/video_io.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/dropjump/kinematics.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/dropjump/metrics_validator.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/dropjump/validation_bounds.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/__init__.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/cli/__init__.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/cli/test_cmj.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/cli/test_dropjump.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/cli/test_imports.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/cmj/__init__.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/cmj/test_analysis.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/cmj/test_api.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/cmj/test_joint_angles.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/cmj/test_kinematics.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/cmj/test_physiological_bounds.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/conftest.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/core/__init__.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/core/test_auto_tuning.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/core/test_filtering.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/core/test_formatting.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/core/test_metadata.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/core/test_pose.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/core/test_quality.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/core/test_smoothing.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/core/test_validation.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/core/test_video_io.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/dropjump/__init__.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/dropjump/test_adaptive_threshold.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/dropjump/test_analysis.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/dropjump/test_api.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/dropjump/test_contact_detection.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/dropjump/test_kinematics.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/dropjump/test_physiological_bounds.py +0 -0
- {kinemotion-0.35.1 → kinemotion-0.36.0}/tests/dropjump/test_validation_integration.py +0 -0
|
@@ -7,6 +7,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
<!-- version list -->
|
|
9
9
|
|
|
10
|
+
## v0.36.0 (2025-12-07)
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- **backend**: Upgrade kinemotion to v0.35.1 to fix negative metrics bug
|
|
15
|
+
([`492dfaa`](https://github.com/feniix/kinemotion/commit/492dfaa87251e527bef0c85822314b7d57ecd48c))
|
|
16
|
+
|
|
17
|
+
### Documentation
|
|
18
|
+
|
|
19
|
+
- Fix broken links in agents-guide
|
|
20
|
+
([`1daaffb`](https://github.com/feniix/kinemotion/commit/1daaffb43de1db48c0decba66f1f73a28b56c124))
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
- Add version display in frontend footer
|
|
25
|
+
([`cb4ed66`](https://github.com/feniix/kinemotion/commit/cb4ed669f642430f5bad4b900489d6858235eb43))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## v0.35.2 (2025-12-07)
|
|
29
|
+
|
|
30
|
+
### Bug Fixes
|
|
31
|
+
|
|
32
|
+
- **validation**: Resolve CMJ athlete profile misclassification
|
|
33
|
+
([`1565514`](https://github.com/feniix/kinemotion/commit/156551412c50090c589bda9cacc8e62a542db19f))
|
|
34
|
+
|
|
35
|
+
|
|
10
36
|
## v0.35.1 (2025-12-07)
|
|
11
37
|
|
|
12
38
|
### Bug Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.36.0
|
|
4
4
|
Summary: Video-based kinematic analysis for athletic performance
|
|
5
5
|
Project-URL: Homepage, https://github.com/feniix/kinemotion
|
|
6
6
|
Project-URL: Repository, https://github.com/feniix/kinemotion
|
|
@@ -6,6 +6,7 @@ Real metrics integration with Cloudflare R2 storage for video and results manage
|
|
|
6
6
|
import os
|
|
7
7
|
import tempfile
|
|
8
8
|
from datetime import datetime, timezone
|
|
9
|
+
from importlib.metadata import version
|
|
9
10
|
from pathlib import Path
|
|
10
11
|
from typing import Any, Literal, cast
|
|
11
12
|
|
|
@@ -397,10 +398,17 @@ async def health_check() -> dict[str, Any]:
|
|
|
397
398
|
Returns:
|
|
398
399
|
Status dictionary with service health information
|
|
399
400
|
"""
|
|
401
|
+
# Get kinemotion version safely
|
|
402
|
+
try:
|
|
403
|
+
kinemotion_version = version("kinemotion")
|
|
404
|
+
except Exception:
|
|
405
|
+
kinemotion_version = "unknown"
|
|
406
|
+
|
|
400
407
|
return {
|
|
401
408
|
"status": "ok",
|
|
402
409
|
"service": "kinemotion-backend",
|
|
403
410
|
"version": "0.1.0",
|
|
411
|
+
"kinemotion_version": kinemotion_version,
|
|
404
412
|
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
405
413
|
"r2_configured": r2_client is not None,
|
|
406
414
|
}
|
|
@@ -391,6 +391,6 @@ When creating new agents:
|
|
|
391
391
|
## Resources
|
|
392
392
|
|
|
393
393
|
- **Agent Configuration Files**: `.claude/agents/*.md`
|
|
394
|
-
- **Project Instructions**: [CLAUDE.md](
|
|
395
|
-
- **Development Guides**: [
|
|
394
|
+
- **Project Instructions**: [CLAUDE.md](https://github.com/feniix/kinemotion/blob/main/CLAUDE.md)
|
|
395
|
+
- **Development Guides**: [Testing Guide](testing.md), [Type Hints Guide](type-hints.md)
|
|
396
396
|
- **Official Docs**: [Claude Code Subagents Documentation](https://docs.claude.com/en/docs/claude-code/sub-agents)
|
|
@@ -7,11 +7,13 @@ import Auth from './components/Auth'
|
|
|
7
7
|
import { useRecentUploads } from './hooks/useRecentUploads'
|
|
8
8
|
import { useAnalysis } from './hooks/useAnalysis'
|
|
9
9
|
import { useAuth } from './hooks/useAuth'
|
|
10
|
+
import { useBackendVersion } from './hooks/useBackendVersion'
|
|
10
11
|
|
|
11
12
|
function App() {
|
|
12
13
|
const { user, loading: authLoading, signOut } = useAuth()
|
|
13
14
|
const { file, jumpType, loading, uploadProgress, metrics, error, setFile, setJumpType, analyze, retry } = useAnalysis()
|
|
14
15
|
const { recentUploads, addRecentUpload, clearRecentUploads } = useRecentUploads()
|
|
16
|
+
const { backendVersion, kinemotionVersion } = useBackendVersion()
|
|
15
17
|
|
|
16
18
|
const handleAnalyze = async () => {
|
|
17
19
|
await analyze()
|
|
@@ -87,6 +89,10 @@ function App() {
|
|
|
87
89
|
<a href="https://github.com/feniix/kinemotion" target="_blank" rel="noopener noreferrer">
|
|
88
90
|
GitHub
|
|
89
91
|
</a>
|
|
92
|
+
{' | '}
|
|
93
|
+
<span style={{ fontSize: '0.85em', opacity: 0.8 }}>
|
|
94
|
+
Backend v{backendVersion} | Analysis v{kinemotionVersion}
|
|
95
|
+
</span>
|
|
90
96
|
</p>
|
|
91
97
|
</footer>
|
|
92
98
|
</div>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react'
|
|
2
|
+
|
|
3
|
+
interface HealthResponse {
|
|
4
|
+
status: string
|
|
5
|
+
service: string
|
|
6
|
+
version: string
|
|
7
|
+
kinemotion_version: string
|
|
8
|
+
timestamp: string
|
|
9
|
+
r2_configured: boolean
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function useBackendVersion() {
|
|
13
|
+
const [backendVersion, setBackendVersion] = useState<string>('...')
|
|
14
|
+
const [kinemotionVersion, setKinemotionVersion] = useState<string>('...')
|
|
15
|
+
const [loading, setLoading] = useState(true)
|
|
16
|
+
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
const fetchVersion = async () => {
|
|
19
|
+
try {
|
|
20
|
+
const baseApiUrl = import.meta.env.VITE_API_URL || ''
|
|
21
|
+
const response = await fetch(`${baseApiUrl}/health`)
|
|
22
|
+
|
|
23
|
+
if (response.ok) {
|
|
24
|
+
const data: HealthResponse = await response.json()
|
|
25
|
+
setBackendVersion(data.version)
|
|
26
|
+
setKinemotionVersion(data.kinemotion_version)
|
|
27
|
+
}
|
|
28
|
+
} catch (error) {
|
|
29
|
+
console.error('Failed to fetch backend version:', error)
|
|
30
|
+
// Keep default '...' values on error
|
|
31
|
+
} finally {
|
|
32
|
+
setLoading(false)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
fetchVersion()
|
|
37
|
+
}, [])
|
|
38
|
+
|
|
39
|
+
return { backendVersion, kinemotionVersion, loading }
|
|
40
|
+
}
|
|
@@ -1060,7 +1060,7 @@ def process_cmj_video(
|
|
|
1060
1060
|
|
|
1061
1061
|
# Validate metrics against physiological bounds
|
|
1062
1062
|
validator = CMJMetricsValidator()
|
|
1063
|
-
validation_result = validator.validate(metrics.to_dict()
|
|
1063
|
+
validation_result = validator.validate(metrics.to_dict()) # type: ignore[arg-type]
|
|
1064
1064
|
metrics.validation_result = validation_result
|
|
1065
1065
|
|
|
1066
1066
|
if verbose and validation_result.issues:
|
|
@@ -68,6 +68,22 @@ class CMJValidationResult(ValidationResult):
|
|
|
68
68
|
class CMJMetricsValidator(MetricsValidator):
|
|
69
69
|
"""Comprehensive CMJ metrics validator."""
|
|
70
70
|
|
|
71
|
+
@staticmethod
|
|
72
|
+
def _get_metric_value(
|
|
73
|
+
data: dict, key_with_suffix: str, key_without_suffix: str
|
|
74
|
+
) -> float | None:
|
|
75
|
+
"""Get metric value, supporting both suffixed and legacy key formats.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
data: Dictionary containing metrics
|
|
79
|
+
key_with_suffix: Key with unit suffix (e.g., "flight_time_ms")
|
|
80
|
+
key_without_suffix: Legacy key without suffix (e.g., "flight_time")
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
Metric value or None if not found
|
|
84
|
+
"""
|
|
85
|
+
return data.get(key_with_suffix) or data.get(key_without_suffix)
|
|
86
|
+
|
|
71
87
|
def validate(self, metrics: dict) -> CMJValidationResult:
|
|
72
88
|
"""Validate CMJ metrics comprehensively.
|
|
73
89
|
|
|
@@ -87,25 +103,28 @@ class CMJMetricsValidator(MetricsValidator):
|
|
|
87
103
|
|
|
88
104
|
profile = result.athlete_profile
|
|
89
105
|
|
|
106
|
+
# Extract metric values (handle nested "data" structure)
|
|
107
|
+
data = metrics.get("data", metrics) # Support both structures
|
|
108
|
+
|
|
90
109
|
# PRIMARY BOUNDS CHECKS
|
|
91
|
-
self._check_flight_time(
|
|
92
|
-
self._check_jump_height(
|
|
93
|
-
self._check_countermovement_depth(
|
|
94
|
-
self._check_concentric_duration(
|
|
95
|
-
self._check_eccentric_duration(
|
|
96
|
-
self._check_peak_velocities(
|
|
110
|
+
self._check_flight_time(data, result, profile)
|
|
111
|
+
self._check_jump_height(data, result, profile)
|
|
112
|
+
self._check_countermovement_depth(data, result, profile)
|
|
113
|
+
self._check_concentric_duration(data, result, profile)
|
|
114
|
+
self._check_eccentric_duration(data, result, profile)
|
|
115
|
+
self._check_peak_velocities(data, result, profile)
|
|
97
116
|
|
|
98
117
|
# CROSS-VALIDATION CHECKS
|
|
99
|
-
self._check_flight_time_height_consistency(
|
|
100
|
-
self._check_velocity_height_consistency(
|
|
101
|
-
self._check_rsi_validity(
|
|
118
|
+
self._check_flight_time_height_consistency(data, result)
|
|
119
|
+
self._check_velocity_height_consistency(data, result)
|
|
120
|
+
self._check_rsi_validity(data, result, profile)
|
|
102
121
|
|
|
103
122
|
# CONSISTENCY CHECKS
|
|
104
|
-
self._check_depth_height_ratio(
|
|
105
|
-
self._check_contact_depth_ratio(
|
|
123
|
+
self._check_depth_height_ratio(data, result)
|
|
124
|
+
self._check_contact_depth_ratio(data, result)
|
|
106
125
|
|
|
107
126
|
# TRIPLE EXTENSION ANGLES
|
|
108
|
-
self._check_triple_extension(
|
|
127
|
+
self._check_triple_extension(data, result, profile)
|
|
109
128
|
|
|
110
129
|
# Finalize status
|
|
111
130
|
result.finalize_status()
|
|
@@ -116,10 +135,18 @@ class CMJMetricsValidator(MetricsValidator):
|
|
|
116
135
|
self, metrics: dict, result: CMJValidationResult, profile: AthleteProfile
|
|
117
136
|
) -> None:
|
|
118
137
|
"""Validate flight time."""
|
|
119
|
-
|
|
120
|
-
|
|
138
|
+
flight_time_raw = self._get_metric_value(
|
|
139
|
+
metrics, "flight_time_ms", "flight_time"
|
|
140
|
+
)
|
|
141
|
+
if flight_time_raw is None:
|
|
121
142
|
return
|
|
122
143
|
|
|
144
|
+
# If value is in seconds (legacy), use as-is; if in ms, convert
|
|
145
|
+
if flight_time_raw < 10: # Likely in seconds
|
|
146
|
+
flight_time = flight_time_raw
|
|
147
|
+
else: # In milliseconds
|
|
148
|
+
flight_time = flight_time_raw / 1000.0
|
|
149
|
+
|
|
123
150
|
bounds = CMJBounds.FLIGHT_TIME
|
|
124
151
|
|
|
125
152
|
if not bounds.is_physically_possible(flight_time):
|
|
@@ -159,7 +186,7 @@ class CMJMetricsValidator(MetricsValidator):
|
|
|
159
186
|
self, metrics: dict, result: CMJValidationResult, profile: AthleteProfile
|
|
160
187
|
) -> None:
|
|
161
188
|
"""Validate jump height."""
|
|
162
|
-
jump_height =
|
|
189
|
+
jump_height = self._get_metric_value(metrics, "jump_height_m", "jump_height")
|
|
163
190
|
if jump_height is None:
|
|
164
191
|
return
|
|
165
192
|
|
|
@@ -201,7 +228,9 @@ class CMJMetricsValidator(MetricsValidator):
|
|
|
201
228
|
self, metrics: dict, result: CMJValidationResult, profile: AthleteProfile
|
|
202
229
|
) -> None:
|
|
203
230
|
"""Validate countermovement depth."""
|
|
204
|
-
depth =
|
|
231
|
+
depth = self._get_metric_value(
|
|
232
|
+
metrics, "countermovement_depth_m", "countermovement_depth"
|
|
233
|
+
)
|
|
205
234
|
if depth is None:
|
|
206
235
|
return
|
|
207
236
|
|
|
@@ -243,10 +272,19 @@ class CMJMetricsValidator(MetricsValidator):
|
|
|
243
272
|
self, metrics: dict, result: CMJValidationResult, profile: AthleteProfile
|
|
244
273
|
) -> None:
|
|
245
274
|
"""Validate concentric duration (contact time)."""
|
|
246
|
-
|
|
247
|
-
|
|
275
|
+
duration_raw = self._get_metric_value(
|
|
276
|
+
metrics, "concentric_duration_ms", "concentric_duration"
|
|
277
|
+
)
|
|
278
|
+
if duration_raw is None:
|
|
248
279
|
return
|
|
249
280
|
|
|
281
|
+
# If value is in seconds (legacy), convert to ms first
|
|
282
|
+
# Values >10 are assumed to be in ms, <10 assumed to be in seconds
|
|
283
|
+
if duration_raw < 10: # Likely in seconds
|
|
284
|
+
duration = duration_raw
|
|
285
|
+
else: # In milliseconds
|
|
286
|
+
duration = duration_raw / 1000.0
|
|
287
|
+
|
|
250
288
|
bounds = CMJBounds.CONCENTRIC_DURATION
|
|
251
289
|
|
|
252
290
|
if not bounds.is_physically_possible(duration):
|
|
@@ -286,10 +324,18 @@ class CMJMetricsValidator(MetricsValidator):
|
|
|
286
324
|
self, metrics: dict, result: CMJValidationResult, profile: AthleteProfile
|
|
287
325
|
) -> None:
|
|
288
326
|
"""Validate eccentric duration."""
|
|
289
|
-
|
|
290
|
-
|
|
327
|
+
duration_raw = self._get_metric_value(
|
|
328
|
+
metrics, "eccentric_duration_ms", "eccentric_duration"
|
|
329
|
+
)
|
|
330
|
+
if duration_raw is None:
|
|
291
331
|
return
|
|
292
332
|
|
|
333
|
+
# If value is in seconds (legacy), use as-is; if in ms, convert
|
|
334
|
+
if duration_raw < 10: # Likely in seconds
|
|
335
|
+
duration = duration_raw
|
|
336
|
+
else: # In milliseconds
|
|
337
|
+
duration = duration_raw / 1000.0
|
|
338
|
+
|
|
293
339
|
bounds = CMJBounds.ECCENTRIC_DURATION
|
|
294
340
|
|
|
295
341
|
if not bounds.is_physically_possible(duration):
|
|
@@ -321,7 +367,9 @@ class CMJMetricsValidator(MetricsValidator):
|
|
|
321
367
|
) -> None:
|
|
322
368
|
"""Validate peak eccentric and concentric velocities."""
|
|
323
369
|
# Eccentric
|
|
324
|
-
ecc_vel =
|
|
370
|
+
ecc_vel = self._get_metric_value(
|
|
371
|
+
metrics, "peak_eccentric_velocity_m_s", "peak_eccentric_velocity"
|
|
372
|
+
)
|
|
325
373
|
if ecc_vel is not None:
|
|
326
374
|
bounds = CMJBounds.PEAK_ECCENTRIC_VELOCITY
|
|
327
375
|
if not bounds.is_physically_possible(ecc_vel):
|
|
@@ -349,7 +397,9 @@ class CMJMetricsValidator(MetricsValidator):
|
|
|
349
397
|
)
|
|
350
398
|
|
|
351
399
|
# Concentric
|
|
352
|
-
con_vel =
|
|
400
|
+
con_vel = self._get_metric_value(
|
|
401
|
+
metrics, "peak_concentric_velocity_m_s", "peak_concentric_velocity"
|
|
402
|
+
)
|
|
353
403
|
if con_vel is not None:
|
|
354
404
|
bounds = CMJBounds.PEAK_CONCENTRIC_VELOCITY
|
|
355
405
|
if not bounds.is_physically_possible(con_vel):
|
|
@@ -390,12 +440,15 @@ class CMJMetricsValidator(MetricsValidator):
|
|
|
390
440
|
self, metrics: dict, result: CMJValidationResult
|
|
391
441
|
) -> None:
|
|
392
442
|
"""Verify jump height is consistent with flight time."""
|
|
393
|
-
|
|
394
|
-
jump_height = metrics.get("
|
|
443
|
+
flight_time_ms = metrics.get("flight_time_ms")
|
|
444
|
+
jump_height = metrics.get("jump_height_m")
|
|
395
445
|
|
|
396
|
-
if
|
|
446
|
+
if flight_time_ms is None or jump_height is None:
|
|
397
447
|
return
|
|
398
448
|
|
|
449
|
+
# Convert ms to seconds
|
|
450
|
+
flight_time = flight_time_ms / 1000.0
|
|
451
|
+
|
|
399
452
|
# h = g * t^2 / 8
|
|
400
453
|
g = 9.81
|
|
401
454
|
expected_height = (g * flight_time**2) / 8
|
|
@@ -424,8 +477,8 @@ class CMJMetricsValidator(MetricsValidator):
|
|
|
424
477
|
self, metrics: dict, result: CMJValidationResult
|
|
425
478
|
) -> None:
|
|
426
479
|
"""Verify peak velocity is consistent with jump height."""
|
|
427
|
-
velocity = metrics.get("
|
|
428
|
-
jump_height = metrics.get("
|
|
480
|
+
velocity = metrics.get("peak_concentric_velocity_m_s")
|
|
481
|
+
jump_height = metrics.get("jump_height_m")
|
|
429
482
|
|
|
430
483
|
if velocity is None or jump_height is None:
|
|
431
484
|
return
|
|
@@ -461,16 +514,31 @@ class CMJMetricsValidator(MetricsValidator):
|
|
|
461
514
|
self, metrics: dict, result: CMJValidationResult, profile: AthleteProfile
|
|
462
515
|
) -> None:
|
|
463
516
|
"""Validate Reactive Strength Index."""
|
|
464
|
-
|
|
465
|
-
|
|
517
|
+
flight_time_raw = self._get_metric_value(
|
|
518
|
+
metrics, "flight_time_ms", "flight_time"
|
|
519
|
+
)
|
|
520
|
+
concentric_duration_raw = self._get_metric_value(
|
|
521
|
+
metrics, "concentric_duration_ms", "concentric_duration"
|
|
522
|
+
)
|
|
466
523
|
|
|
467
524
|
if (
|
|
468
|
-
|
|
469
|
-
or
|
|
470
|
-
or
|
|
525
|
+
flight_time_raw is None
|
|
526
|
+
or concentric_duration_raw is None
|
|
527
|
+
or concentric_duration_raw == 0
|
|
471
528
|
):
|
|
472
529
|
return
|
|
473
530
|
|
|
531
|
+
# Convert to seconds if needed
|
|
532
|
+
if flight_time_raw < 10: # Likely in seconds
|
|
533
|
+
flight_time = flight_time_raw
|
|
534
|
+
else: # In milliseconds
|
|
535
|
+
flight_time = flight_time_raw / 1000.0
|
|
536
|
+
|
|
537
|
+
if concentric_duration_raw < 10: # Likely in seconds
|
|
538
|
+
concentric_duration = concentric_duration_raw
|
|
539
|
+
else: # In milliseconds
|
|
540
|
+
concentric_duration = concentric_duration_raw / 1000.0
|
|
541
|
+
|
|
474
542
|
rsi = flight_time / concentric_duration
|
|
475
543
|
result.rsi = rsi
|
|
476
544
|
|
|
@@ -513,8 +581,8 @@ class CMJMetricsValidator(MetricsValidator):
|
|
|
513
581
|
self, metrics: dict, result: CMJValidationResult
|
|
514
582
|
) -> None:
|
|
515
583
|
"""Check countermovement depth to jump height ratio."""
|
|
516
|
-
depth = metrics.get("
|
|
517
|
-
jump_height = metrics.get("
|
|
584
|
+
depth = metrics.get("countermovement_depth_m")
|
|
585
|
+
jump_height = metrics.get("jump_height_m")
|
|
518
586
|
|
|
519
587
|
if (
|
|
520
588
|
depth is None or jump_height is None or depth < 0.05
|
|
@@ -557,12 +625,14 @@ class CMJMetricsValidator(MetricsValidator):
|
|
|
557
625
|
self, metrics: dict, result: CMJValidationResult
|
|
558
626
|
) -> None:
|
|
559
627
|
"""Check contact time to countermovement depth ratio."""
|
|
560
|
-
|
|
561
|
-
depth = metrics.get("
|
|
628
|
+
contact_ms = metrics.get("concentric_duration_ms")
|
|
629
|
+
depth = metrics.get("countermovement_depth_m")
|
|
562
630
|
|
|
563
|
-
if
|
|
631
|
+
if contact_ms is None or depth is None or depth < 0.05:
|
|
564
632
|
return
|
|
565
633
|
|
|
634
|
+
# Convert ms to seconds for ratio calculation
|
|
635
|
+
contact = contact_ms / 1000.0
|
|
566
636
|
ratio = contact / depth
|
|
567
637
|
result.contact_depth_ratio = ratio
|
|
568
638
|
|
|
@@ -323,7 +323,10 @@ def estimate_athlete_profile(
|
|
|
323
323
|
Returns:
|
|
324
324
|
Estimated AthleteProfile
|
|
325
325
|
"""
|
|
326
|
-
|
|
326
|
+
# Support both nested "data" structure and flat structure
|
|
327
|
+
# Extract with unit suffix as used in serialization, or without suffix (legacy)
|
|
328
|
+
data = metrics_dict.get("data", metrics_dict)
|
|
329
|
+
jump_height = data.get("jump_height_m") or data.get("jump_height", 0)
|
|
327
330
|
|
|
328
331
|
if jump_height < 0.20:
|
|
329
332
|
return AthleteProfile.ELDERLY
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/api/supabase-authentication-setup-guide.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/authentication/supabase-quick-start-guide.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/codebase/codebase-architecture-overview.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/backend-code-coverage-analysis.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/claude-code-hook-configuration.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/hook-complete-audit-summary.md
RENAMED
|
File without changes
|
{kinemotion-0.35.1 → kinemotion-0.36.0}/.basic-memory/development/hook-configuration-audit.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|