kinemotion 0.47.1__tar.gz → 0.47.2__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.47.1 → kinemotion-0.47.2}/.claude/settings.local.json +3 -1
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.mcp.json +13 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/CHANGELOG.md +18 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/CLAUDE.md +24 -13
- {kinemotion-0.47.1 → kinemotion-0.47.2}/PKG-INFO +1 -1
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/src/kinemotion_backend/telemetry.py +3 -2
- {kinemotion-0.47.1 → kinemotion-0.47.2}/pyproject.toml +1 -1
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/api.py +161 -94
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/cmj/analysis.py +2 -2
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/cmj/kinematics.py +165 -79
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/cmj/metrics_validator.py +2 -2
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/timing.py +2 -1
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/dropjump/validation_bounds.py +58 -39
- {kinemotion-0.47.1 → kinemotion-0.47.2}/uv.lock +1 -1
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/api/api-reference-quick-commands.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/api/cloud-run-cpu-specifications-investigation.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/comprehensive-timing-instrumentation.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/development-standards-quality-gates.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/hook-configuration-audit.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/hook-quick-reference.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/optimal-timing-implementation-summary.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/structured-logging-implementation.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.claude/agents/biomechanics-specialist.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.claude/agents/computer-vision-engineer.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.claude/agents/devops-cicd-engineer.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.claude/agents/frontend-developer.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.claude/agents/ml-data-scientist.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.claude/agents/project-manager.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.claude/agents/python-backend-developer.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.claude/agents/qa-test-engineer.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.claude/agents/technical-writer.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.cursor/mcp.json +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.dockerignore +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.envrc +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.gitattributes +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.github/dependabot.yml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.github/pull_request_template.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.github/workflows/deploy-backend.yml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.github/workflows/release.yml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.github/workflows/test.yml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.gitignore +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.readthedocs.yml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.serena/.gitignore +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.serena/memories/camera-perspective-validation-study.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.serena/memories/code_style_and_conventions.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.serena/memories/current-project-architecture.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.serena/memories/deployment-setup-complete.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.serena/memories/github-project-setup-summary.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.serena/memories/mvp-first-strategy.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.serena/memories/project_overview.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.serena/memories/specialist-agents-routing.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.serena/memories/suggested_commands.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.serena/project.yml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.tool-versions +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/.vercelignore +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/CONTRIBUTING.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/Dockerfile +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/GEMINI.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/LICENSE +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/SECURITY.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/.dockerignore +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/.env.example +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/Dockerfile +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/docs/fly-deployment.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/docs/implementation-summary.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/docs/setup.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/docs/tests.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/pyproject.toml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/src/kinemotion_backend/__init__.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/src/kinemotion_backend/app.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/src/kinemotion_backend/auth.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/src/kinemotion_backend/logging_config.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/src/kinemotion_backend/middleware.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/tests/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/tests/__init__.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/tests/conftest.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/tests/test_api_endpoints.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/tests/test_error_handling.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/tests/test_health.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/tests/test_r2_integration.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/backend/tests/test_validation.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/api/cmj.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/api/core.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/api/dropjump.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/api/overview.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/development/agents-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/development/test-suite-review-december-2025.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/development/testing-standards.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/development/testing.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/development/type-hints.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/development/validation-roadmap.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/guides/cloud-run-deployment.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/guides/cmj-recording-protocol-es.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/guides/cmj-recording-protocol.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/guides/deployment-checklist.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/guides/local-testing.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/guides/setup-issue-12.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/index.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/quick-start.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/reference/cloud-run-quick-reference.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/reference/json-output-format.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/reference/json-structure-comparison.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/reference/parameters.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/paper-downloader/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/paper-downloader/dois.txt +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/paper-downloader/download.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/paper-downloader/pyproject.toml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/paper-downloader/uv.lock +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/convert_pdfs.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/online-references-for-papers.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/STYLE_GUIDE.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/technical/framerate.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/technical/implementation-details.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/validation/determinism-test.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/validation/known-height-validation.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/docs/validation-status.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/examples/bulk/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/.editorconfig +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/.env.example +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/.gitattributes +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/.gitignore +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/.yarnrc.yml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/index.html +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/package.json +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/App.test.tsx +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/App.tsx +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/components/Auth.tsx +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/components/ErrorBoundary.tsx +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/components/ErrorDisplay.tsx +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/components/LoadingSpinner.tsx +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/components/RecentUploads.tsx +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/components/ResultsDisplay.test.tsx +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/components/ResultsDisplay.tsx +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/components/ResultsSkeleton.tsx +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/components/UploadForm.test.tsx +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/components/UploadForm.tsx +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/hooks/useAnalysis.test.ts +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/hooks/useAnalysis.ts +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/hooks/useAuth.ts +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/hooks/useBackendVersion.ts +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/hooks/useRecentUploads.ts +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/index.css +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/lib/supabase.ts +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/main.tsx +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/test/setup.ts +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/types/api.ts +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/src/vite-env.d.ts +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/vercel.json +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/vite.config.ts +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/frontend/yarn.lock +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/justfile +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/local_dev.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/mkdocs.yml +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/presentation/.gitignore +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/presentation/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/presentation/demos/.gitignore +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/presentation/demos/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/presentation/demos/api_demo.ipynb +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/presentation/demos/batch_processing_demo.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/presentation/demos/sample_data/.gitkeep +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/presentation/presentation_guide.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/presentation/revealjs/.gitignore +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/presentation/revealjs/Makefile +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/presentation/revealjs/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/presentation/revealjs/slides.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/presentation/speaker_script.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/requirements-docs.txt +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/samples/cmjs/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/SCRIPTS_QUICKREF.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/analyze_determinism_variance.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/basic-memory-utils.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/debug_contact_states.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/debug_detection.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/find_unused_features.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/generate_test_data.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/optimize_detection_params.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/plot_cmj_velocities.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/plot_validation_results.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/plot_velocities.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/prepare_ground_truth.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/project/README.md +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/project/add-issue.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/project/batch-set-fields.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/project/helpers.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/project/list.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/project/set-field.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/project/set-status.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/project/summary.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/project.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/setup-github-deploy.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/setup-google-oauth.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/setup-supabase-local.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/setup-supabase-production.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/test_acceleration_standing.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/test_determinism.sh +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/test_drop_start_debug.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/scripts/validate_known_heights.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/sonar-project.properties +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/cmj/validation_bounds.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/debug_overlay_utils.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/determinism.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/experimental.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/formatting.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/metadata.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/pipeline_utils.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/quality.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/validation.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/core/video_io.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/dropjump/kinematics.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/dropjump/metrics_validator.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/__init__.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/cli/__init__.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/cli/test_cmj.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/cli/test_dropjump.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/cli/test_imports.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/cmj/__init__.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/cmj/test_analysis.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/cmj/test_api.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/cmj/test_cli.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/cmj/test_joint_angles.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/cmj/test_kinematics.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/cmj/test_physiological_bounds.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/conftest.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/core/__init__.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/core/test_auto_tuning.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/core/test_cli_utils.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/core/test_filtering.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/core/test_formatting.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/core/test_metadata.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/core/test_otel_timing.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/core/test_pipeline_utils.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/core/test_pose.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/core/test_quality.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/core/test_smoothing.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/core/test_timing.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/core/test_validation.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/core/test_video_io.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/dropjump/__init__.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/dropjump/test_adaptive_threshold.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/dropjump/test_analysis.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/dropjump/test_api.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/dropjump/test_cli.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/dropjump/test_contact_detection.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/dropjump/test_kinematics.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/dropjump/test_physiological_bounds.py +0 -0
- {kinemotion-0.47.1 → kinemotion-0.47.2}/tests/dropjump/test_validation_integration.py +0 -0
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"WebFetch(domain:realpython.com)",
|
|
66
66
|
"WebFetch(domain:sonarcloud.io)",
|
|
67
67
|
"WebFetch(domain:www.pyopensci.org)",
|
|
68
|
-
"WebFetch(domain:www.sonarsource.com)"
|
|
68
|
+
"WebFetch(domain:www.sonarsource.com)",
|
|
69
|
+
"mcp__sonarqube__search_sonar_issues_in_projects",
|
|
70
|
+
"mcp__sonarqube__show_rule"
|
|
69
71
|
]
|
|
70
72
|
},
|
|
71
73
|
"enableAllProjectMcpServers": true
|
|
@@ -27,6 +27,19 @@
|
|
|
27
27
|
"BASIC_MEMORY_KEBAB_FILENAMES": "true"
|
|
28
28
|
}
|
|
29
29
|
},
|
|
30
|
+
"sonarqube": {
|
|
31
|
+
"command": "direnv",
|
|
32
|
+
"args": [
|
|
33
|
+
"exec",
|
|
34
|
+
"/Users/feniix/src/personal/cursor/kinemotion",
|
|
35
|
+
"java",
|
|
36
|
+
"-jar",
|
|
37
|
+
"/tmp/sonarqube-mcp-server-1.4.0.1666.jar"
|
|
38
|
+
],
|
|
39
|
+
"env": {
|
|
40
|
+
"STORAGE_PATH": "/tmp/sonarqube"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
30
43
|
"sequential-thinking": {
|
|
31
44
|
"command": "uvx",
|
|
32
45
|
"args": [
|
|
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
<!-- version list -->
|
|
9
9
|
|
|
10
|
+
## v0.47.2 (2025-12-12)
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- **telemetry**: Use structlog for robust error handling
|
|
15
|
+
([`0c66c5f`](https://github.com/feniix/kinemotion/commit/0c66c5f486c4f034e5833ee0016d37fc31e9240d))
|
|
16
|
+
|
|
17
|
+
### Documentation
|
|
18
|
+
|
|
19
|
+
- Update CLAUDE.md with test count and coverage improvements
|
|
20
|
+
([`1132324`](https://github.com/feniix/kinemotion/commit/1132324fe9bfe907bc6850397fd5370668b1bfa6))
|
|
21
|
+
|
|
22
|
+
### Refactoring
|
|
23
|
+
|
|
24
|
+
- Reduce cognitive complexity across validation, kinematics, and API
|
|
25
|
+
([`04a88cb`](https://github.com/feniix/kinemotion/commit/04a88cbcec3b52bf1767e9647627b839ca842ecf))
|
|
26
|
+
|
|
27
|
+
|
|
10
28
|
## v0.47.1 (2025-12-12)
|
|
11
29
|
|
|
12
30
|
### Bug Fixes
|
|
@@ -45,7 +45,7 @@ uv run pytest --cov-report=html # Generate HTML coverage report
|
|
|
45
45
|
uv run ruff check --fix && uv run pyright # Lint + type check
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
**Note**: Test count reflects
|
|
48
|
+
**Note**: Test count reflects 620 passing tests across 24 test files. Parameterized tests generate additional test instances at runtime. Total coverage: 80.86%.
|
|
49
49
|
|
|
50
50
|
**Coverage Reports:**
|
|
51
51
|
|
|
@@ -98,7 +98,7 @@ src/kinemotion/
|
|
|
98
98
|
│ └── validation_bounds.py # Drop jump bounds (DropJumpBounds)
|
|
99
99
|
└── [other modules]
|
|
100
100
|
|
|
101
|
-
tests/ #
|
|
101
|
+
tests/ # 620 tests (comprehensive coverage across all modules)
|
|
102
102
|
├── conftest.py # Shared fixtures (cli_runner, minimal_video, sample_video_path)
|
|
103
103
|
├── core/ # Core module tests (9 files)
|
|
104
104
|
├── dropjump/ # Drop jump tests (6 files)
|
|
@@ -128,7 +128,7 @@ The project has evolved into a complete platform with three main components:
|
|
|
128
128
|
│ ├── cli.py # Main CLI commands
|
|
129
129
|
│ ├── api.py # Python API (used by backend)
|
|
130
130
|
│ └── [modules] # Core, dropjump, cmj
|
|
131
|
-
└── tests/ #
|
|
131
|
+
└── tests/ # 620 comprehensive tests (80.86% coverage)
|
|
132
132
|
```
|
|
133
133
|
|
|
134
134
|
**Data Flow:**
|
|
@@ -186,27 +186,29 @@ uv run pytest # All tests (207 test functions)
|
|
|
186
186
|
- Ruff (88 char lines, both linting and formatting)
|
|
187
187
|
- Conventional Commits (see below)
|
|
188
188
|
- **Code duplication target: < 3%**
|
|
189
|
-
- **Test coverage: ≥ 50% (current:
|
|
190
|
-
- **Test count:
|
|
189
|
+
- **Test coverage: ≥ 50% (current: 80.86% with branch coverage)**
|
|
190
|
+
- **Test count: 620 tests across 24 test files**
|
|
191
|
+
- **SonarQube maintainability: 86% of issues resolved (6/7)**
|
|
191
192
|
|
|
192
193
|
### Coverage Summary
|
|
193
194
|
|
|
194
|
-
**Current:**
|
|
195
|
+
**Current:** 80.86% (620 tests, 3296 statements, 1088 branches)
|
|
195
196
|
|
|
196
197
|
**Coverage by tier:**
|
|
197
198
|
|
|
198
199
|
- Core algorithms: 89-100% ✅ (smoothing: 100%, filtering: 89%, analysis: 88-94%)
|
|
199
|
-
- API/Integration:
|
|
200
|
-
- CLI modules:
|
|
200
|
+
- API/Integration: 66% ✅ (api.py - improved with helper extraction)
|
|
201
|
+
- CLI modules: 90-91% ✅ (dropjump: 90.24%, cmj: 91.26%)
|
|
201
202
|
- Validation: 80-100% ✅ (validators, bounds)
|
|
202
|
-
-
|
|
203
|
+
- Kinematics: 92-93% ✅ (cmj: 92.25%, dropjump: 93.03%)
|
|
204
|
+
- Visualization: 10-40% ✅ (debug overlays - appropriate)
|
|
203
205
|
|
|
204
206
|
**Key metrics:**
|
|
205
207
|
|
|
206
|
-
- All
|
|
207
|
-
- 0 type errors (pyright strict)
|
|
208
|
-
- 0 linting errors (ruff)
|
|
209
|
-
- 100% coverage on critical modules (smoothing, formatting, validation_bounds)
|
|
208
|
+
- All 620 tests pass ✅
|
|
209
|
+
- 0 type errors (pyright strict) ✅
|
|
210
|
+
- 0 linting errors (ruff) ✅
|
|
211
|
+
- 100% coverage on critical modules (smoothing, formatting, validation_bounds) ✅
|
|
210
212
|
|
|
211
213
|
**Test Organization:**
|
|
212
214
|
|
|
@@ -227,6 +229,8 @@ View HTML report: `uv run pytest --cov-report=html && open htmlcov/index.html`
|
|
|
227
229
|
### Code Quality
|
|
228
230
|
|
|
229
231
|
- **Duplication target:** < 3% (current: 2.96%)
|
|
232
|
+
- **SonarQube maintainability:** 86% issues resolved
|
|
233
|
+
- **Cognitive complexity:** Target ≤15 per function
|
|
230
234
|
- **Check:** `npx jscpd src/kinemotion`
|
|
231
235
|
|
|
232
236
|
**Principles:**
|
|
@@ -235,6 +239,13 @@ View HTML report: `uv run pytest --cov-report=html && open htmlcov/index.html`
|
|
|
235
239
|
2. Use inheritance for shared behavior
|
|
236
240
|
3. Create helper functions (testable, reusable)
|
|
237
241
|
4. Use function composition (pass functions as parameters)
|
|
242
|
+
5. Apply Extract Method pattern for complex functions (see recent refactoring)
|
|
243
|
+
|
|
244
|
+
**Maintainability Patterns:**
|
|
245
|
+
- Extract Method: Break down functions with complexity >15
|
|
246
|
+
- Parameter Object: Bundle related parameters into dataclasses
|
|
247
|
+
- Early Return: Reduce nesting by handling edge cases first
|
|
248
|
+
- Helper Functions: Single Responsibility Principle for all helpers
|
|
238
249
|
|
|
239
250
|
See [Testing Guide](docs/development/testing.md) for detailed duplication avoidance strategies.
|
|
240
251
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.47.
|
|
3
|
+
Version: 0.47.2
|
|
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
|
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
Enables OpenTelemetry tracing and logging if OTEL_EXPORTER_OTLP_ENDPOINT is set.
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
-
import logging
|
|
7
6
|
import os
|
|
8
7
|
|
|
9
8
|
from fastapi import FastAPI
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
from kinemotion_backend.logging_config import get_logger
|
|
11
|
+
|
|
12
|
+
logger = get_logger(__name__)
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
def setup_telemetry(app: FastAPI) -> bool:
|
|
@@ -5,12 +5,18 @@ import time
|
|
|
5
5
|
from collections.abc import Callable
|
|
6
6
|
from dataclasses import dataclass
|
|
7
7
|
from pathlib import Path
|
|
8
|
+
from typing import TYPE_CHECKING
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from numpy.typing import NDArray
|
|
8
12
|
|
|
9
13
|
from .cmj.analysis import detect_cmj_phases
|
|
10
14
|
from .cmj.debug_overlay import CMJDebugOverlayRenderer
|
|
11
15
|
from .cmj.kinematics import CMJMetrics, calculate_cmj_metrics
|
|
12
16
|
from .cmj.metrics_validator import CMJMetricsValidator
|
|
13
17
|
from .core.auto_tuning import (
|
|
18
|
+
AnalysisParameters,
|
|
19
|
+
QualityPreset,
|
|
14
20
|
analyze_video_sample,
|
|
15
21
|
auto_tune_parameters,
|
|
16
22
|
)
|
|
@@ -38,7 +44,7 @@ from .core.pipeline_utils import (
|
|
|
38
44
|
process_videos_bulk_generic,
|
|
39
45
|
)
|
|
40
46
|
from .core.pose import PoseTracker
|
|
41
|
-
from .core.quality import assess_jump_quality
|
|
47
|
+
from .core.quality import QualityAssessment, assess_jump_quality
|
|
42
48
|
from .core.timing import NULL_TIMER, PerformanceTimer, Timer
|
|
43
49
|
from .core.video_io import VideoProcessor
|
|
44
50
|
from .dropjump.analysis import (
|
|
@@ -78,6 +84,146 @@ class DropJumpVideoConfig:
|
|
|
78
84
|
tracking_confidence: float | None = None
|
|
79
85
|
|
|
80
86
|
|
|
87
|
+
def _assess_dropjump_quality(
|
|
88
|
+
vertical_positions: "NDArray",
|
|
89
|
+
visibilities: "NDArray",
|
|
90
|
+
contact_states: list,
|
|
91
|
+
fps: float,
|
|
92
|
+
timer: Timer,
|
|
93
|
+
) -> tuple:
|
|
94
|
+
"""Assess tracking quality and detect phases.
|
|
95
|
+
|
|
96
|
+
Returns:
|
|
97
|
+
Tuple of (quality_result, outlier_mask, phases_detected, phase_count)
|
|
98
|
+
"""
|
|
99
|
+
_, outlier_mask = reject_outliers(
|
|
100
|
+
vertical_positions,
|
|
101
|
+
use_ransac=True,
|
|
102
|
+
use_median=True,
|
|
103
|
+
interpolate=False,
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
phases = find_contact_phases(contact_states)
|
|
107
|
+
phases_detected = len(phases) > 0
|
|
108
|
+
phase_count = len(phases)
|
|
109
|
+
|
|
110
|
+
quality_result = assess_jump_quality(
|
|
111
|
+
visibilities=visibilities,
|
|
112
|
+
positions=vertical_positions,
|
|
113
|
+
outlier_mask=outlier_mask,
|
|
114
|
+
fps=fps,
|
|
115
|
+
phases_detected=phases_detected,
|
|
116
|
+
phase_count=phase_count,
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
return quality_result, outlier_mask, phases_detected, phase_count
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def _build_dropjump_metadata(
|
|
123
|
+
video_path: str,
|
|
124
|
+
video: "VideoProcessor",
|
|
125
|
+
params: "AnalysisParameters",
|
|
126
|
+
quality_result: QualityAssessment,
|
|
127
|
+
drop_start_frame: int | None,
|
|
128
|
+
metrics: DropJumpMetrics,
|
|
129
|
+
processing_time: float,
|
|
130
|
+
quality_preset: "QualityPreset",
|
|
131
|
+
timer: Timer,
|
|
132
|
+
) -> ResultMetadata:
|
|
133
|
+
"""Build complete result metadata."""
|
|
134
|
+
drop_frame = None
|
|
135
|
+
if drop_start_frame is None and metrics.drop_start_frame is not None:
|
|
136
|
+
drop_frame = metrics.drop_start_frame
|
|
137
|
+
elif drop_start_frame is not None:
|
|
138
|
+
drop_frame = drop_start_frame
|
|
139
|
+
|
|
140
|
+
algorithm_config = AlgorithmConfig(
|
|
141
|
+
detection_method="forward_search",
|
|
142
|
+
tracking_method="mediapipe_pose",
|
|
143
|
+
model_complexity=1,
|
|
144
|
+
smoothing=SmoothingConfig(
|
|
145
|
+
window_size=params.smoothing_window,
|
|
146
|
+
polynomial_order=params.polyorder,
|
|
147
|
+
use_bilateral_filter=params.bilateral_filter,
|
|
148
|
+
use_outlier_rejection=params.outlier_rejection,
|
|
149
|
+
),
|
|
150
|
+
detection=DetectionConfig(
|
|
151
|
+
velocity_threshold=params.velocity_threshold,
|
|
152
|
+
min_contact_frames=params.min_contact_frames,
|
|
153
|
+
visibility_threshold=params.visibility_threshold,
|
|
154
|
+
use_curvature_refinement=params.use_curvature,
|
|
155
|
+
),
|
|
156
|
+
drop_detection=DropDetectionConfig(
|
|
157
|
+
auto_detect_drop_start=(drop_start_frame is None),
|
|
158
|
+
detected_drop_frame=drop_frame,
|
|
159
|
+
min_stationary_duration_s=0.5,
|
|
160
|
+
),
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
video_info = VideoInfo(
|
|
164
|
+
source_path=video_path,
|
|
165
|
+
fps=video.fps,
|
|
166
|
+
width=video.width,
|
|
167
|
+
height=video.height,
|
|
168
|
+
duration_s=video.frame_count / video.fps,
|
|
169
|
+
frame_count=video.frame_count,
|
|
170
|
+
codec=video.codec,
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
stage_times = convert_timer_to_stage_names(timer.get_metrics())
|
|
174
|
+
|
|
175
|
+
processing_info = ProcessingInfo(
|
|
176
|
+
version=get_kinemotion_version(),
|
|
177
|
+
timestamp=create_timestamp(),
|
|
178
|
+
quality_preset=quality_preset.value,
|
|
179
|
+
processing_time_s=processing_time,
|
|
180
|
+
timing_breakdown=stage_times,
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
return ResultMetadata(
|
|
184
|
+
quality=quality_result,
|
|
185
|
+
video=video_info,
|
|
186
|
+
processing=processing_info,
|
|
187
|
+
algorithm=algorithm_config,
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def _save_dropjump_json(
|
|
192
|
+
json_output: str,
|
|
193
|
+
metrics: DropJumpMetrics,
|
|
194
|
+
timer: Timer,
|
|
195
|
+
verbose: bool,
|
|
196
|
+
) -> None:
|
|
197
|
+
"""Save metrics to JSON file."""
|
|
198
|
+
with timer.measure("json_serialization"):
|
|
199
|
+
output_path = Path(json_output)
|
|
200
|
+
metrics_dict = metrics.to_dict()
|
|
201
|
+
json_str = json.dumps(metrics_dict, indent=2)
|
|
202
|
+
output_path.write_text(json_str)
|
|
203
|
+
|
|
204
|
+
if verbose:
|
|
205
|
+
print(f"Metrics written to: {json_output}")
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def _print_dropjump_summary(
|
|
209
|
+
start_time: float,
|
|
210
|
+
timer: Timer,
|
|
211
|
+
) -> None:
|
|
212
|
+
"""Print verbose timing summary."""
|
|
213
|
+
total_time = time.time() - start_time
|
|
214
|
+
stage_times = convert_timer_to_stage_names(timer.get_metrics())
|
|
215
|
+
|
|
216
|
+
print("\n=== Timing Summary ===")
|
|
217
|
+
for stage, duration in stage_times.items():
|
|
218
|
+
percentage = (duration / total_time) * 100
|
|
219
|
+
dur_ms = duration * 1000
|
|
220
|
+
print(f"{stage:.<40} {dur_ms:>6.0f}ms ({percentage:>5.1f}%)")
|
|
221
|
+
total_ms = total_time * 1000
|
|
222
|
+
print(f"{('Total'):.>40} {total_ms:>6.0f}ms (100.0%)")
|
|
223
|
+
print()
|
|
224
|
+
print("Analysis complete!")
|
|
225
|
+
|
|
226
|
+
|
|
81
227
|
def _generate_debug_video(
|
|
82
228
|
output_video: str,
|
|
83
229
|
frames: list,
|
|
@@ -281,65 +427,10 @@ def process_dropjump_video(
|
|
|
281
427
|
if verbose:
|
|
282
428
|
print("Assessing tracking quality...")
|
|
283
429
|
with timer.measure("quality_assessment"):
|
|
284
|
-
_,
|
|
285
|
-
vertical_positions,
|
|
286
|
-
use_ransac=True,
|
|
287
|
-
use_median=True,
|
|
288
|
-
interpolate=False,
|
|
289
|
-
)
|
|
290
|
-
|
|
291
|
-
phases = find_contact_phases(contact_states)
|
|
292
|
-
phases_detected = len(phases) > 0
|
|
293
|
-
phase_count = len(phases)
|
|
294
|
-
|
|
295
|
-
quality_result = assess_jump_quality(
|
|
296
|
-
visibilities=visibilities,
|
|
297
|
-
positions=vertical_positions,
|
|
298
|
-
outlier_mask=outlier_mask,
|
|
299
|
-
fps=video.fps,
|
|
300
|
-
phases_detected=phases_detected,
|
|
301
|
-
phase_count=phase_count,
|
|
430
|
+
quality_result, _, _, _ = _assess_dropjump_quality(
|
|
431
|
+
vertical_positions, visibilities, contact_states, video.fps, timer
|
|
302
432
|
)
|
|
303
433
|
|
|
304
|
-
drop_frame = None
|
|
305
|
-
if drop_start_frame is None and metrics.drop_start_frame is not None:
|
|
306
|
-
drop_frame = metrics.drop_start_frame
|
|
307
|
-
elif drop_start_frame is not None:
|
|
308
|
-
drop_frame = drop_start_frame
|
|
309
|
-
|
|
310
|
-
algorithm_config = AlgorithmConfig(
|
|
311
|
-
detection_method="forward_search",
|
|
312
|
-
tracking_method="mediapipe_pose",
|
|
313
|
-
model_complexity=1,
|
|
314
|
-
smoothing=SmoothingConfig(
|
|
315
|
-
window_size=params.smoothing_window,
|
|
316
|
-
polynomial_order=params.polyorder,
|
|
317
|
-
use_bilateral_filter=params.bilateral_filter,
|
|
318
|
-
use_outlier_rejection=params.outlier_rejection,
|
|
319
|
-
),
|
|
320
|
-
detection=DetectionConfig(
|
|
321
|
-
velocity_threshold=params.velocity_threshold,
|
|
322
|
-
min_contact_frames=params.min_contact_frames,
|
|
323
|
-
visibility_threshold=params.visibility_threshold,
|
|
324
|
-
use_curvature_refinement=params.use_curvature,
|
|
325
|
-
),
|
|
326
|
-
drop_detection=DropDetectionConfig(
|
|
327
|
-
auto_detect_drop_start=(drop_start_frame is None),
|
|
328
|
-
detected_drop_frame=drop_frame,
|
|
329
|
-
min_stationary_duration_s=0.5,
|
|
330
|
-
),
|
|
331
|
-
)
|
|
332
|
-
|
|
333
|
-
video_info = VideoInfo(
|
|
334
|
-
source_path=video_path,
|
|
335
|
-
fps=video.fps,
|
|
336
|
-
width=video.width,
|
|
337
|
-
height=video.height,
|
|
338
|
-
duration_s=video.frame_count / video.fps,
|
|
339
|
-
frame_count=video.frame_count,
|
|
340
|
-
codec=video.codec,
|
|
341
|
-
)
|
|
342
|
-
|
|
343
434
|
if verbose and quality_result.warnings:
|
|
344
435
|
print("\n⚠️ Quality Warnings:")
|
|
345
436
|
for warning in quality_result.warnings:
|
|
@@ -370,48 +461,24 @@ def process_dropjump_video(
|
|
|
370
461
|
print(f" [{issue.severity.value}] {issue.metric}: {issue.message}")
|
|
371
462
|
|
|
372
463
|
processing_time = time.time() - start_time
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
result_metadata = ResultMetadata(
|
|
384
|
-
quality=quality_result,
|
|
385
|
-
video=video_info,
|
|
386
|
-
processing=processing_info,
|
|
387
|
-
algorithm=algorithm_config,
|
|
464
|
+
result_metadata = _build_dropjump_metadata(
|
|
465
|
+
video_path,
|
|
466
|
+
video,
|
|
467
|
+
params,
|
|
468
|
+
quality_result,
|
|
469
|
+
drop_start_frame,
|
|
470
|
+
metrics,
|
|
471
|
+
processing_time,
|
|
472
|
+
quality_preset,
|
|
473
|
+
timer,
|
|
388
474
|
)
|
|
389
|
-
|
|
390
475
|
metrics.result_metadata = result_metadata
|
|
391
476
|
|
|
392
477
|
if json_output:
|
|
393
|
-
|
|
394
|
-
output_path = Path(json_output)
|
|
395
|
-
metrics_dict = metrics.to_dict()
|
|
396
|
-
json_str = json.dumps(metrics_dict, indent=2)
|
|
397
|
-
output_path.write_text(json_str)
|
|
398
|
-
|
|
399
|
-
if verbose:
|
|
400
|
-
print(f"Metrics written to: {json_output}")
|
|
478
|
+
_save_dropjump_json(json_output, metrics, timer, verbose)
|
|
401
479
|
|
|
402
480
|
if verbose:
|
|
403
|
-
|
|
404
|
-
stage_times_verbose = convert_timer_to_stage_names(timer.get_metrics())
|
|
405
|
-
|
|
406
|
-
print("\n=== Timing Summary ===")
|
|
407
|
-
for stage, duration in stage_times_verbose.items():
|
|
408
|
-
percentage = (duration / total_time) * 100
|
|
409
|
-
dur_ms = duration * 1000
|
|
410
|
-
print(f"{stage:.<40} {dur_ms:>6.0f}ms ({percentage:>5.1f}%)")
|
|
411
|
-
total_ms = total_time * 1000
|
|
412
|
-
print(f"{('Total'):.>40} {total_ms:>6.0f}ms (100.0%)")
|
|
413
|
-
print()
|
|
414
|
-
print("Analysis complete!")
|
|
481
|
+
_print_dropjump_summary(start_time, timer)
|
|
415
482
|
|
|
416
483
|
return metrics
|
|
417
484
|
|
|
@@ -480,7 +480,7 @@ def compute_average_hip_position(
|
|
|
480
480
|
def find_standing_end(
|
|
481
481
|
velocities: np.ndarray,
|
|
482
482
|
lowest_point: float,
|
|
483
|
-
|
|
483
|
+
_positions: np.ndarray | None = None,
|
|
484
484
|
accelerations: np.ndarray | None = None,
|
|
485
485
|
) -> float | None:
|
|
486
486
|
"""
|
|
@@ -493,7 +493,7 @@ def find_standing_end(
|
|
|
493
493
|
Args:
|
|
494
494
|
velocities: Signed velocity array (for backward compatibility)
|
|
495
495
|
lowest_point: Frame index of lowest point
|
|
496
|
-
|
|
496
|
+
_positions: Intentionally unused - kept for backward compatibility
|
|
497
497
|
accelerations: Acceleration array (if provided, uses
|
|
498
498
|
acceleration-based detection)
|
|
499
499
|
|