kinemotion 0.35.0__tar.gz → 0.35.1__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.

Files changed (481) hide show
  1. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +1 -1
  2. {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/settings.local.json +49 -49
  3. {kinemotion-0.35.0 → kinemotion-0.35.1}/.cursor/mcp.json +3 -3
  4. {kinemotion-0.35.0 → kinemotion-0.35.1}/.mcp.json +3 -3
  5. {kinemotion-0.35.0 → kinemotion-0.35.1}/CHANGELOG.md +21 -0
  6. {kinemotion-0.35.0 → kinemotion-0.35.1}/CLAUDE.md +4 -2
  7. {kinemotion-0.35.0 → kinemotion-0.35.1}/PKG-INFO +1 -1
  8. kinemotion-0.35.1/docs/guides/cmj-recording-protocol-es.md +147 -0
  9. kinemotion-0.35.1/docs/guides/cmj-recording-protocol.md +147 -0
  10. {kinemotion-0.35.0 → kinemotion-0.35.1}/pyproject.toml +1 -1
  11. kinemotion-0.35.1/scripts/debug_contact_states.py +90 -0
  12. kinemotion-0.35.1/scripts/debug_detection.py +262 -0
  13. kinemotion-0.35.1/scripts/optimize_detection_params.py +380 -0
  14. kinemotion-0.35.1/scripts/plot_cmj_velocities.py +150 -0
  15. kinemotion-0.35.1/scripts/plot_velocities.py +127 -0
  16. kinemotion-0.35.1/scripts/prepare_ground_truth.py +101 -0
  17. kinemotion-0.35.1/scripts/test_acceleration_standing.py +77 -0
  18. kinemotion-0.35.1/scripts/test_drop_start_debug.py +75 -0
  19. {kinemotion-0.35.0 → kinemotion-0.35.1}/sonar-project.properties +1 -1
  20. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/api.py +6 -3
  21. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/analysis.py +51 -3
  22. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/auto_tuning.py +6 -4
  23. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/dropjump/kinematics.py +7 -1
  24. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cmj/test_analysis.py +3 -1
  25. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_auto_tuning.py +3 -1
  26. {kinemotion-0.35.0 → kinemotion-0.35.1}/uv.lock +1 -1
  27. kinemotion-0.35.0/docs/guides/cmj-recording-protocol-es.md +0 -125
  28. kinemotion-0.35.0/docs/guides/cmj-recording-protocol.md +0 -125
  29. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/README.md +0 -0
  30. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/api/api-reference-quick-commands.md +0 -0
  31. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
  32. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
  33. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
  34. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
  35. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
  36. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
  37. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
  38. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
  39. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
  40. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
  41. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
  42. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
  43. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
  44. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
  45. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
  46. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
  47. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
  48. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
  49. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
  50. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
  51. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
  52. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
  53. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
  54. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
  55. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
  56. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
  57. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
  58. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
  59. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
  60. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
  61. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
  62. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
  63. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
  64. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
  65. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
  66. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
  67. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
  68. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
  69. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
  70. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
  71. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
  72. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/development-standards-quality-gates.md +0 -0
  73. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
  74. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
  75. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
  76. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
  77. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/hook-configuration-audit.md +0 -0
  78. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/hook-quick-reference.md +0 -0
  79. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
  80. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
  81. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
  82. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/structured-logging-implementation.md +0 -0
  83. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
  84. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
  85. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
  86. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
  87. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
  88. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
  89. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
  90. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
  91. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
  92. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
  93. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
  94. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
  95. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
  96. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
  97. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
  98. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
  99. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
  100. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
  101. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
  102. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
  103. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
  104. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
  105. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
  106. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
  107. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
  108. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
  109. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
  110. {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
  111. {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/biomechanics-specialist.md +0 -0
  112. {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/computer-vision-engineer.md +0 -0
  113. {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/devops-cicd-engineer.md +0 -0
  114. {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/frontend-developer.md +0 -0
  115. {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/ml-data-scientist.md +0 -0
  116. {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/project-manager.md +0 -0
  117. {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/python-backend-developer.md +0 -0
  118. {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/qa-test-engineer.md +0 -0
  119. {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/technical-writer.md +0 -0
  120. {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/hooks/fix-basic-memory-names.sh +0 -0
  121. {kinemotion-0.35.0 → kinemotion-0.35.1}/.dockerignore +0 -0
  122. {kinemotion-0.35.0 → kinemotion-0.35.1}/.gitattributes +0 -0
  123. {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  124. {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  125. {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  126. {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/dependabot.yml +0 -0
  127. {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/pull_request_template.md +0 -0
  128. {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/workflows/deploy-backend.yml +0 -0
  129. {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/workflows/docs.yml +0 -0
  130. {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/workflows/release.yml +0 -0
  131. {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/workflows/security.yml +0 -0
  132. {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/workflows/test.yml +0 -0
  133. {kinemotion-0.35.0 → kinemotion-0.35.1}/.gitignore +0 -0
  134. {kinemotion-0.35.0 → kinemotion-0.35.1}/.pre-commit-config.yaml +0 -0
  135. {kinemotion-0.35.0 → kinemotion-0.35.1}/.readthedocs.yml +0 -0
  136. {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/.gitignore +0 -0
  137. {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
  138. {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/camera-perspective-validation-study.md +0 -0
  139. {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/code_style_and_conventions.md +0 -0
  140. {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/current-project-architecture.md +0 -0
  141. {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
  142. {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/deployment-setup-complete.md +0 -0
  143. {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/github-project-setup-summary.md +0 -0
  144. {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/mvp-first-strategy.md +0 -0
  145. {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
  146. {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/project_overview.md +0 -0
  147. {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/specialist-agents-routing.md +0 -0
  148. {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/suggested_commands.md +0 -0
  149. {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/project.yml +0 -0
  150. {kinemotion-0.35.0 → kinemotion-0.35.1}/.tool-versions +0 -0
  151. {kinemotion-0.35.0 → kinemotion-0.35.1}/.vercelignore +0 -0
  152. {kinemotion-0.35.0 → kinemotion-0.35.1}/CODE_OF_CONDUCT.md +0 -0
  153. {kinemotion-0.35.0 → kinemotion-0.35.1}/CONTRIBUTING.md +0 -0
  154. {kinemotion-0.35.0 → kinemotion-0.35.1}/Dockerfile +0 -0
  155. {kinemotion-0.35.0 → kinemotion-0.35.1}/GEMINI.md +0 -0
  156. {kinemotion-0.35.0 → kinemotion-0.35.1}/LICENSE +0 -0
  157. {kinemotion-0.35.0 → kinemotion-0.35.1}/README.md +0 -0
  158. {kinemotion-0.35.0 → kinemotion-0.35.1}/SECURITY.md +0 -0
  159. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/.dockerignore +0 -0
  160. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/.env.example +0 -0
  161. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/Dockerfile +0 -0
  162. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/README.md +0 -0
  163. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/docs/fly-deployment.md +0 -0
  164. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/docs/implementation-summary.md +0 -0
  165. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/docs/setup.md +0 -0
  166. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/docs/tests.md +0 -0
  167. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/pyproject.toml +0 -0
  168. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/src/kinemotion_backend/__init__.py +0 -0
  169. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/src/kinemotion_backend/app.py +0 -0
  170. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/src/kinemotion_backend/auth.py +0 -0
  171. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/src/kinemotion_backend/logging_config.py +0 -0
  172. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/src/kinemotion_backend/middleware.py +0 -0
  173. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/README.md +0 -0
  174. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/__init__.py +0 -0
  175. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/conftest.py +0 -0
  176. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/test_api_endpoints.py +0 -0
  177. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/test_error_handling.py +0 -0
  178. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/test_health.py +0 -0
  179. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/test_r2_integration.py +0 -0
  180. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/test_validation.py +0 -0
  181. {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/uv.lock +0 -0
  182. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/README.md +0 -0
  183. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/api/cmj.md +0 -0
  184. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/api/core.md +0 -0
  185. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/api/dropjump.md +0 -0
  186. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/api/overview.md +0 -0
  187. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/agents-guide.md +0 -0
  188. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/errors-findings.md +0 -0
  189. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/test-suite-review-december-2025.md +0 -0
  190. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/testing-standards.md +0 -0
  191. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/testing.md +0 -0
  192. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/type-hints.md +0 -0
  193. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/validation-plan.md +0 -0
  194. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/validation-roadmap.md +0 -0
  195. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/wallball-norep-detection.md +0 -0
  196. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/guides/bulk-processing.md +0 -0
  197. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/guides/camera-setup.md +0 -0
  198. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/guides/cloud-run-deployment.md +0 -0
  199. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/guides/cmj-guide.md +0 -0
  200. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/guides/deployment-checklist.md +0 -0
  201. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/guides/local-testing.md +0 -0
  202. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/guides/setup-issue-12.md +0 -0
  203. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/index.md +0 -0
  204. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/quick-start.md +0 -0
  205. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/reference/cloud-run-quick-reference.md +0 -0
  206. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/reference/json-output-format.md +0 -0
  207. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/reference/json-structure-comparison.md +0 -0
  208. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/reference/parameters.md +0 -0
  209. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/reference/pose-systems.md +0 -0
  210. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
  211. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/paper-downloader/README.md +0 -0
  212. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/paper-downloader/dois.txt +0 -0
  213. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/paper-downloader/download.py +0 -0
  214. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/paper-downloader/pyproject.toml +0 -0
  215. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/paper-downloader/uv.lock +0 -0
  216. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  217. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
  218. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/README.md +0 -0
  219. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/convert_pdfs.py +0 -0
  220. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
  221. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
  222. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
  223. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
  224. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
  225. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
  226. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
  227. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
  228. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
  229. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
  230. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
  231. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
  232. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
  233. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
  234. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
  235. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
  236. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
  237. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
  238. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
  239. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
  240. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
  241. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
  242. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
  243. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
  244. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
  245. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
  246. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
  247. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
  248. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
  249. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
  250. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
  251. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
  252. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
  253. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
  254. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
  255. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
  256. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
  257. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
  258. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
  259. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
  260. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
  261. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/online-references-for-papers.md +0 -0
  262. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
  263. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
  264. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
  265. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
  266. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
  267. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
  268. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
  269. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
  270. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
  271. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
  272. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
  273. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
  274. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
  275. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
  276. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
  277. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
  278. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
  279. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
  280. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
  281. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
  282. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
  283. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
  284. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
  285. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
  286. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
  287. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
  288. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
  289. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
  290. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
  291. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
  292. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
  293. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
  294. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
  295. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
  296. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
  297. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
  298. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
  299. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
  300. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
  301. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
  302. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
  303. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
  304. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
  305. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
  306. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
  307. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/README.md +0 -0
  308. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/STYLE_GUIDE.md +0 -0
  309. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
  310. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
  311. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
  312. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
  313. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
  314. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
  315. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
  316. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
  317. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
  318. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
  319. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
  320. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
  321. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
  322. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
  323. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
  324. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
  325. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
  326. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
  327. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
  328. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
  329. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
  330. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
  331. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
  332. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
  333. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
  334. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
  335. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
  336. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
  337. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
  338. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
  339. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
  340. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
  341. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
  342. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
  343. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
  344. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/technical/framerate.md +0 -0
  345. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/technical/implementation-details.md +0 -0
  346. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/technical/imu-metadata.md +0 -0
  347. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/technical/real-time-analysis.md +0 -0
  348. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/technical/triple-extension.md +0 -0
  349. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/translations/es/camera-setup.md +0 -0
  350. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/validation/determinism-test.md +0 -0
  351. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/validation/known-height-validation.md +0 -0
  352. {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/validation-status.md +0 -0
  353. {kinemotion-0.35.0 → kinemotion-0.35.1}/examples/bulk/README.md +0 -0
  354. {kinemotion-0.35.0 → kinemotion-0.35.1}/examples/bulk/bulk_processing.py +0 -0
  355. {kinemotion-0.35.0 → kinemotion-0.35.1}/examples/bulk/simple_example.py +0 -0
  356. {kinemotion-0.35.0 → kinemotion-0.35.1}/examples/programmatic_usage.py +0 -0
  357. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/.editorconfig +0 -0
  358. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/.env.example +0 -0
  359. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/.gitattributes +0 -0
  360. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/.gitignore +0 -0
  361. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
  362. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/.yarnrc.yml +0 -0
  363. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/README.md +0 -0
  364. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/index.html +0 -0
  365. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/package.json +0 -0
  366. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/App.tsx +0 -0
  367. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/Auth.tsx +0 -0
  368. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/ErrorBoundary.tsx +0 -0
  369. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/ErrorDisplay.tsx +0 -0
  370. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/LoadingSpinner.tsx +0 -0
  371. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/RecentUploads.tsx +0 -0
  372. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/ResultsDisplay.tsx +0 -0
  373. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/ResultsSkeleton.tsx +0 -0
  374. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/UploadForm.tsx +0 -0
  375. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/hooks/useAnalysis.ts +0 -0
  376. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/hooks/useAuth.ts +0 -0
  377. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/hooks/useRecentUploads.ts +0 -0
  378. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/index.css +0 -0
  379. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/lib/supabase.ts +0 -0
  380. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/main.tsx +0 -0
  381. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/types/api.ts +0 -0
  382. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/vite-env.d.ts +0 -0
  383. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/vercel.json +0 -0
  384. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/vite.config.ts +0 -0
  385. {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/yarn.lock +0 -0
  386. {kinemotion-0.35.0 → kinemotion-0.35.1}/justfile +0 -0
  387. {kinemotion-0.35.0 → kinemotion-0.35.1}/local_dev.sh +0 -0
  388. {kinemotion-0.35.0 → kinemotion-0.35.1}/mkdocs.yml +0 -0
  389. {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/.gitignore +0 -0
  390. {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/README.md +0 -0
  391. {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/demos/.gitignore +0 -0
  392. {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/demos/README.md +0 -0
  393. {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/demos/api_demo.ipynb +0 -0
  394. {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/demos/batch_processing_demo.py +0 -0
  395. {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/demos/sample_data/.gitkeep +0 -0
  396. {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/presentation_guide.md +0 -0
  397. {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/revealjs/.gitignore +0 -0
  398. {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/revealjs/Makefile +0 -0
  399. {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/revealjs/README.md +0 -0
  400. {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/revealjs/slides.md +0 -0
  401. {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/speaker_script.md +0 -0
  402. {kinemotion-0.35.0 → kinemotion-0.35.1}/requirements-docs.txt +0 -0
  403. {kinemotion-0.35.0 → kinemotion-0.35.1}/samples/cmjs/README.md +0 -0
  404. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/README.md +0 -0
  405. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/SCRIPTS_QUICKREF.md +0 -0
  406. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/analyze_determinism_variance.py +0 -0
  407. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/basic-memory-utils.sh +0 -0
  408. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/find_unused_features.py +0 -0
  409. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/generate_test_data.py +0 -0
  410. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/plot_validation_results.py +0 -0
  411. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/README.md +0 -0
  412. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/add-issue.sh +0 -0
  413. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/batch-set-fields.sh +0 -0
  414. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/helpers.sh +0 -0
  415. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/list.sh +0 -0
  416. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/set-field.sh +0 -0
  417. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/set-status.sh +0 -0
  418. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/summary.sh +0 -0
  419. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project.sh +0 -0
  420. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/setup-github-deploy.sh +0 -0
  421. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/setup-google-oauth.sh +0 -0
  422. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/setup-supabase-local.sh +0 -0
  423. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/setup-supabase-production.sh +0 -0
  424. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/test_determinism.sh +0 -0
  425. {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/validate_known_heights.py +0 -0
  426. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/__init__.py +0 -0
  427. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cli.py +0 -0
  428. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/__init__.py +0 -0
  429. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/cli.py +0 -0
  430. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/debug_overlay.py +0 -0
  431. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/joint_angles.py +0 -0
  432. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/kinematics.py +0 -0
  433. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/metrics_validator.py +0 -0
  434. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/validation_bounds.py +0 -0
  435. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/__init__.py +0 -0
  436. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/cli_utils.py +0 -0
  437. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/debug_overlay_utils.py +0 -0
  438. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/experimental.py +0 -0
  439. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/filtering.py +0 -0
  440. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/formatting.py +0 -0
  441. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/metadata.py +0 -0
  442. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/pose.py +0 -0
  443. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/quality.py +0 -0
  444. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/smoothing.py +0 -0
  445. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/validation.py +0 -0
  446. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/video_io.py +0 -0
  447. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/dropjump/__init__.py +0 -0
  448. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/dropjump/analysis.py +0 -0
  449. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/dropjump/cli.py +0 -0
  450. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/dropjump/debug_overlay.py +0 -0
  451. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/dropjump/metrics_validator.py +0 -0
  452. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/dropjump/validation_bounds.py +0 -0
  453. {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/py.typed +0 -0
  454. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/__init__.py +0 -0
  455. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cli/__init__.py +0 -0
  456. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cli/test_cmj.py +0 -0
  457. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cli/test_dropjump.py +0 -0
  458. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cli/test_imports.py +0 -0
  459. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cmj/__init__.py +0 -0
  460. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cmj/test_api.py +0 -0
  461. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cmj/test_joint_angles.py +0 -0
  462. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cmj/test_kinematics.py +0 -0
  463. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cmj/test_physiological_bounds.py +0 -0
  464. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/conftest.py +0 -0
  465. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/__init__.py +0 -0
  466. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_filtering.py +0 -0
  467. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_formatting.py +0 -0
  468. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_metadata.py +0 -0
  469. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_pose.py +0 -0
  470. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_quality.py +0 -0
  471. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_smoothing.py +0 -0
  472. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_validation.py +0 -0
  473. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_video_io.py +0 -0
  474. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/__init__.py +0 -0
  475. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/test_adaptive_threshold.py +0 -0
  476. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/test_analysis.py +0 -0
  477. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/test_api.py +0 -0
  478. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/test_contact_detection.py +0 -0
  479. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/test_kinematics.py +0 -0
  480. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/test_physiological_bounds.py +0 -0
  481. {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/test_validation_integration.py +0 -0
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: Unused Code Identification and Decorator Application - December 2025
3
3
  type: report
4
- permalink: development/unused-code-analysis-december-2025
4
+ permalink: development/unused-code-analysis-december-2025-1
5
5
  tags:
6
6
  - code-quality
7
7
  - maintenance
@@ -2,69 +2,69 @@
2
2
  "includeCoAuthoredBy": false,
3
3
  "permissions": {
4
4
  "allow": [
5
- "Bash(ffprobe:*)",
6
- "Bash(uv run pytest:*)",
7
- "Bash(uv run dropjump-analyze:*)",
8
- "Bash(uv run mypy:*)",
9
- "Bash(uv run ruff:*)",
10
- "Bash(uv sync:*)",
11
- "mcp__web-search__freebird_fetch",
12
- "mcp__web-search__freebird_search",
5
+ "Bash(cat:*)",
6
+ "Bash(chmod:*)",
13
7
  "Bash(curl:*)",
14
- "mcp__sequential__sequentialthinking",
15
- "mcp__context7__resolve-library-id",
16
- "mcp__context7__get-library-docs",
17
- "mcp__sequential-thinking__sequentialthinking",
18
- "Bash(uv run kinemotion dropjump-analyze:*)",
19
- "mcp__exa__get_code_context_exa",
20
- "mcp__ref__ref_search_documentation",
21
- "mcp__exa__web_search_exa",
22
- "mcp__ref__ref_read_url",
23
- "WebFetch(domain:github.com)",
24
- "WebFetch(domain:sonarcloud.io)",
8
+ "Bash(ffprobe:*)",
9
+ "Bash(find:*)",
10
+ "Bash(gh run view:*)",
25
11
  "Bash(mkdir:*)",
26
- "Bash(uv run kinemotion cmj-analyze:*)",
27
- "Bash(cat:*)",
28
12
  "Bash(python3:*)",
13
+ "Bash(uv run dropjump-analyze:*)",
14
+ "Bash(uv run kinemotion cmj-analyze:*)",
15
+ "Bash(uv run kinemotion dropjump-analyze:*)",
29
16
  "Bash(uv run pyright:*)",
30
- "Bash(gh run view:*)",
31
- "WebFetch(domain:www.sonarsource.com)",
32
- "WebFetch(domain:docs.sonarsource.com)",
33
- "WebFetch(domain:www.pyopensci.org)",
34
- "WebFetch(domain:realpython.com)",
35
- "WebFetch(domain:pypi.org)",
17
+ "Bash(uv run pytest:*)",
18
+ "Bash(uv run ruff:*)",
19
+ "Bash(uv sync:*)",
36
20
  "Bash(wget:*)",
37
- "Bash(chmod:*)",
38
- "Bash(find:*)",
39
- "mcp__basic-memory__write_note",
40
- "mcp__serena__list_memories",
41
- "mcp__basic-memory__list_memory_projects",
42
- "mcp__basic-memory__search_notes",
43
- "mcp__serena__get_symbols_overview",
44
21
  "mcp__basic-memory__build_context",
45
- "mcp__basic-memory__read_note",
22
+ "mcp__basic-memory__edit_note",
46
23
  "mcp__basic-memory__list_directory",
24
+ "mcp__basic-memory__list_memory_projects",
25
+ "mcp__basic-memory__read_note",
26
+ "mcp__basic-memory__search_notes",
47
27
  "mcp__basic-memory__view_note",
28
+ "mcp__basic-memory__write_note",
29
+ "mcp__code-reasoning__code-reasoning",
30
+ "mcp__context7__get-library-docs",
31
+ "mcp__context7__resolve-library-id",
32
+ "mcp__exa__get_code_context_exa",
33
+ "mcp__exa__web_search_exa",
34
+ "mcp__github-project-manager__list_issues",
35
+ "mcp__github-project-manager__list_milestones",
36
+ "mcp__github-project-manager__list_projects",
37
+ "mcp__ref__ref_read_url",
38
+ "mcp__ref__ref_search_documentation",
39
+ "mcp__sequential__sequentialthinking",
40
+ "mcp__sequential-thinking__process_thought",
41
+ "mcp__sequential-thinking__sequentialthinking",
42
+ "mcp__serena__check_onboarding_performed",
43
+ "mcp__serena__edit_memory",
48
44
  "mcp__serena__find_file",
45
+ "mcp__serena__find_referencing_symbols",
49
46
  "mcp__serena__find_symbol",
50
- "mcp__serena__list_dir",
51
- "mcp__serena__think_about_task_adherence",
47
+ "mcp__serena__get_symbols_overview",
52
48
  "mcp__serena__initial_instructions",
53
- "mcp__serena__check_onboarding_performed",
54
- "mcp__serena__search_for_pattern",
55
- "mcp__github-project-manager__list_projects",
56
- "mcp__github-project-manager__list_milestones",
57
- "mcp__github-project-manager__list_issues",
58
- "mcp__serena__insert_before_symbol",
59
- "mcp__serena__replace_symbol_body",
60
49
  "mcp__serena__insert_after_symbol",
50
+ "mcp__serena__insert_before_symbol",
51
+ "mcp__serena__list_dir",
52
+ "mcp__serena__list_memories",
61
53
  "mcp__serena__read_memory",
54
+ "mcp__serena__replace_symbol_body",
55
+ "mcp__serena__search_for_pattern",
56
+ "mcp__serena__think_about_task_adherence",
62
57
  "mcp__serena__write_memory",
63
- "mcp__serena__edit_memory",
64
- "mcp__basic-memory__edit_note",
65
- "mcp__code-reasoning__code-reasoning",
66
- "mcp__sequential-thinking__process_thought",
67
- "mcp__serena__find_referencing_symbols"
58
+ "mcp__web-search__freebird_fetch",
59
+ "mcp__web-search__freebird_search",
60
+ "WebFetch(domain:docs.sonarsource.com)",
61
+ "WebFetch(domain:github.com)",
62
+ "WebFetch(domain:pypi.org)",
63
+ "WebFetch(domain:realpython.com)",
64
+ "WebFetch(domain:sonarcloud.io)",
65
+ "WebFetch(domain:www.pyopensci.org)",
66
+ "WebFetch(domain:www.sonarsource.com)",
67
+ "Bash(ffmpeg:*)"
68
68
  ]
69
69
  },
70
70
  "enableAllProjectMcpServers": true,
@@ -4,7 +4,7 @@
4
4
  "command": "direnv",
5
5
  "args": [
6
6
  "exec",
7
- "/Users/feniix/src/personal/cursor/dropjump-claude",
7
+ "/Users/feniix/src/personal/cursor/kinemotion",
8
8
  "bunx", "-y", "exa-mcp-server"
9
9
  ]
10
10
  },
@@ -12,7 +12,7 @@
12
12
  "command": "direnv",
13
13
  "args": [
14
14
  "exec",
15
- "/Users/feniix/src/personal/cursor/dropjump-claude",
15
+ "/Users/feniix/src/personal/cursor/kinemotion",
16
16
  "bunx", "-y", "ref-tools-mcp@latest"
17
17
  ]
18
18
  },
@@ -44,7 +44,7 @@
44
44
  "--context",
45
45
  "ide-assistant",
46
46
  "--project",
47
- "/Users/feniix/src/personal/cursor/dropjump-claude"
47
+ "/Users/feniix/src/personal/cursor/kinemotion"
48
48
  ]
49
49
  },
50
50
  "code-reasoning": {
@@ -4,7 +4,7 @@
4
4
  "command": "direnv",
5
5
  "args": [
6
6
  "exec",
7
- "/Users/feniix/src/personal/cursor/dropjump-claude",
7
+ "/Users/feniix/src/personal/cursor/kinemotion",
8
8
  "bunx", "-y", "exa-mcp-server"
9
9
  ]
10
10
  },
@@ -12,7 +12,7 @@
12
12
  "command": "direnv",
13
13
  "args": [
14
14
  "exec",
15
- "/Users/feniix/src/personal/cursor/dropjump-claude",
15
+ "/Users/feniix/src/personal/cursor/kinemotion",
16
16
  "bunx", "-y", "ref-tools-mcp@latest"
17
17
  ]
18
18
  },
@@ -58,7 +58,7 @@
58
58
  "--context",
59
59
  "ide-assistant",
60
60
  "--project",
61
- "/Users/feniix/src/personal/cursor/dropjump-claude"
61
+ "/Users/feniix/src/personal/cursor/kinemotion"
62
62
  ]
63
63
  }
64
64
  }
@@ -7,6 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  <!-- version list -->
9
9
 
10
+ ## v0.35.1 (2025-12-07)
11
+
12
+ ### Bug Fixes
13
+
14
+ - **detection**: Improve event detection accuracy through empirical validation
15
+ ([`f9f6c91`](https://github.com/feniix/kinemotion/commit/f9f6c917904bfcb95ef9bd988867a2b824cc59c8))
16
+
17
+ ### Chores
18
+
19
+ - Change settings and update basic memory
20
+ ([`41390d3`](https://github.com/feniix/kinemotion/commit/41390d336d0d8083606903f6c263841000fc2f17))
21
+
22
+ - Sonar relase update
23
+ ([`e8edc51`](https://github.com/feniix/kinemotion/commit/e8edc510a5b9e793766cc4c5acfb033f63e8f892))
24
+
25
+ ### Documentation
26
+
27
+ - Update CMJ camera angle recommendation to 45° oblique
28
+ ([`c3f09fa`](https://github.com/feniix/kinemotion/commit/c3f09faf4ebb1c12a2ddb4bacb5ba9aaeab936c7))
29
+
30
+
10
31
  ## v0.35.0 (2025-12-02)
11
32
 
12
33
  ### Chores
@@ -12,7 +12,7 @@ Kinemotion: Video-based kinematic analysis for athletic performance using MediaP
12
12
  ## Current Roadmap (MVP-First Approach)
13
13
 
14
14
  **Phase 1: MVP Validation (Weeks 1-3)**
15
- - Issue #10 (P0): Fix CMJ ankle angle calculation
15
+ - Issue #10 (P0): Validated optimal camera angle for MediaPipe (45° oblique recommended)
16
16
  - Issue #11 (P0): Validate CMJ metrics with phase progression tests
17
17
  - Issue #12 (P0): Build simple web UI (upload → analyze → export)
18
18
  - **Goal:** Get product in coaches' hands, gather market feedback
@@ -163,7 +163,9 @@ User uploads video → Frontend (React) → Backend API (FastAPI) → kinemotion
163
163
 
164
164
  - Use signed velocity (not absolute)
165
165
  - Backward search algorithm (find peak first)
166
- - Lateral view required
166
+ - **45° oblique view recommended** (better MediaPipe tracking than 90° lateral)
167
+ - At 90° lateral: MediaPipe confuses left/right feet (occlusion)
168
+ - At 45° oblique: Both legs clearly separated → accurate tracking
167
169
 
168
170
  See [Implementation Details](docs/technical/implementation-details.md) for complete technical reference.
169
171
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinemotion
3
- Version: 0.35.0
3
+ Version: 0.35.1
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
@@ -0,0 +1,147 @@
1
+ # 📹 Protocolo de Grabación CMJ: Ángulo Óptimo de Cámara para MediaPipe
2
+
3
+ **Recomendación:** Usar **vista oblicua de 45°** para mejor precisión de tracking con MediaPipe
4
+
5
+ **Basado en:** Estudio de validación empírica (Diciembre 2025) que demuestra que 45° proporciona tracking superior vs 90° lateral
6
+
7
+ ______________________________________________________________________
8
+
9
+ ## ⚡ Lo Esencial
10
+
11
+ | Elemento | Especificación |
12
+ | ----------------------- | -------------------------------------------- |
13
+ | **Ángulo de Cámara** | **45° oblicuo** (RECOMENDADO) |
14
+ | **¿Por qué 45°?** | Mejor separación de landmarks para MediaPipe |
15
+ | **Evitar 90°** | Vista lateral causa oclusión de landmarks |
16
+ | **Resolución** | 1080p mínimo |
17
+ | **Frame Rate** | 60fps mínimo (120fps preferido) |
18
+ | **Protocolo** | Manos en cadera, vista oblicua de 45° |
19
+ | **Tracking de Tobillo** | Esperar 120-150° en despegue |
20
+
21
+ ______________________________________________________________________
22
+
23
+ ## 📸 Setup de Cámara
24
+
25
+ **Posición:**
26
+
27
+ - Distancia: 4m (óptimo) o 3-5m
28
+ - Altura cámara: Nivel del pecho/torso medio del atleta (~100-120cm)
29
+ - **Ángulo de cámara: 45° oblicuo** (RECOMENDADO)
30
+ - Posicionar cámara entre lateral (90°) y frontal (0°)
31
+ - Atleta visible desde ~45° hacia el lado
32
+ - ✅ **¿Por qué 45°?** Mejor separación de landmarks de tobillo para MediaPipe
33
+ - ❌ **Evitar 90° lateral:** Causa superposición de landmarks → tracking deficiente
34
+
35
+ **Configuración:**
36
+
37
+ - Formato: MP4 o MOV, H.264
38
+ - Iluminación: Uniforme, sin sombras en tobillo
39
+ - Fondo: Contraste alto con ropa atleta
40
+ - Estabilización: Tripié seguro y nivelado
41
+
42
+ ______________________________________________________________________
43
+
44
+ ## 🎬 Protocolo de Grabación
45
+
46
+ **Setup Recomendado (vista oblicua de 45°):**
47
+
48
+ 1. **Posicionar cámara a ángulo de 45°** al lado del atleta
49
+ 1. **Marcar posición del atleta:** Posición fija en piso, misma ropa y calzado
50
+ 1. **Grabar saltos:** Un video por salto (1-3 saltos recomendados)
51
+ 1. **Mantener consistencia:** Mismo ángulo, iluminación y distancia
52
+
53
+ **Importante:**
54
+
55
+ - Capturar un video por salto—no grabar múltiples saltos en un archivo
56
+ - Mantener cámara a 45° oblicuo para todas las grabaciones
57
+ - Asegurar que landmarks de tobillo (talón, tobillo, dedos) estén claramente visibles y separados
58
+
59
+ ______________________________________________________________________
60
+
61
+ ### ¿Por qué 45° Oblicuo? (Evidencia Empírica)
62
+
63
+ **Resultados del Estudio de Validación (Diciembre 2025):**
64
+
65
+ - **45° oblicuo**: 140.67° promedio de ángulo de tobillo ✅ (preciso)
66
+ - **90° lateral**: 112.00° promedio de ángulo de tobillo ⚠️ (subestimado)
67
+ - **Causa Raíz**: En 90° lateral, una pierna oculta la otra → MediaPipe **confunde pie izquierdo/derecho**
68
+
69
+ **Conclusión Clave:** MediaPipe no puede distinguir cuál pie es cuál en 90° lateral. En 45° oblicuo, ambas piernas están claramente separadas, permitiendo tracking preciso izquierda/derecha.
70
+
71
+ ______________________________________________________________________
72
+
73
+ ## ✅ Requisitos Críticos
74
+
75
+ - ✅ **Ángulo de cámara de 45° oblicuo** (óptimo para MediaPipe)
76
+ - ✅ **Manos en cadera fijas** durante TODO el movimiento
77
+ - ✅ **Iluminación consistente** (sin sombras en tobillo)
78
+ - ✅ **Un video por salto** (archivos independientes)
79
+ - ✅ **Buena forma:** CMJ profundo, extensión explosiva, sin brazos
80
+ - ✅ **Landmarks de tobillo visibles:** Talón, tobillo y dedos claramente separados
81
+
82
+ ❌ **No hacer:**
83
+
84
+ - Usar vista lateral pura de 90° (causa oclusión de landmarks)
85
+ - Grabar múltiples saltos en un video
86
+ - Grabar con mala iluminación (afecta detección de landmarks)
87
+ - Posicionar cámara muy cerca (\< 3m) o muy lejos (> 5m)
88
+
89
+ ______________________________________________________________________
90
+
91
+ ## 📊 Frame Rate y Configuración
92
+
93
+ | Frame Rate | Configuración iPhone/Android |
94
+ | ---------- | ----------------------------------------------------------------- |
95
+ | **60fps** | Settings → Camera → Record Video: 1080p at 60fps |
96
+ | **120fps** | Settings → Camera → Record Video: 1080p at 120fps (si disponible) |
97
+
98
+ **Nota:** 120fps requiere mejor iluminación que 60fps
99
+
100
+ ______________________________________________________________________
101
+
102
+ ## 📝 Checklist Antes de Grabar
103
+
104
+ - [ ] Tripié estable, nivel
105
+ - [ ] Atleta en posición, con mismo calzado
106
+ - [ ] Iluminación uniforme, sin sombras
107
+ - [ ] Frame rate correcto en ajustes
108
+ - [ ] Prueba de 5 segundos grabada
109
+ - [ ] Atleta visible de cabeza a pies
110
+ - [ ] Manos en cadera (posición inicial verificada)
111
+
112
+ ______________________________________________________________________
113
+
114
+ ## 🎯 Criterios de Aceptación
115
+
116
+ Cada video debe tener:
117
+
118
+ - ✅ Vista lateral clara (45° o 90°)
119
+ - ✅ Cuerpo completo visible
120
+ - ✅ Tobillo bien iluminado, visible
121
+ - ✅ Manos en cadera durante TODO el movimiento
122
+ - ✅ CMJ profundo y explosivo
123
+ - ✅ Plantarflexión clara en despegue
124
+ - ✅ Forma de investigación evidente
125
+
126
+ ______________________________________________________________________
127
+
128
+ ## 📋 Referencia Rápida: Ángulos de Tobillo (en vista de 45°)
129
+
130
+ **Posición inicial (neutral):** ~80-90° (pie perpendicular a pierna)
131
+ **Despegue (plantarflexión):** ~120-150° (pie apuntando abajo)
132
+ **Esperado en despegue:** ~140° promedio según estudio de validación
133
+ **Progresión objetivo:** Al menos 30° de extensión de tobillo durante salto
134
+
135
+ **Nota:** Estos valores son para vista oblicua de 45°. Vista lateral de 90° muestra ángulos artificialmente bajos (~112° prom) debido a problemas de tracking.
136
+
137
+ ______________________________________________________________________
138
+
139
+ ## 📚 Referencias Técnicas
140
+
141
+ Basado en:
142
+
143
+ - `docs/guides/camera-setup.md` - Setup de cámara del proyecto
144
+ - `docs/technical/framerate.md` - Análisis de frame rates
145
+ - Issue #10 - Validación de ángulo de tobillo CMJ
146
+
147
+ **Versión:** 2.0 | Diciembre 2025 (Actualizado con hallazgos de validación empírica)
@@ -0,0 +1,147 @@
1
+ # 📹 CMJ Recording Protocol: Optimal Camera Angle for MediaPipe
2
+
3
+ **Recommendation:** Use **45° oblique view** for best MediaPipe tracking accuracy
4
+
5
+ **Based on:** Empirical validation study (December 2025) showing 45° provides superior landmark tracking vs 90° lateral
6
+
7
+ ______________________________________________________________________
8
+
9
+ ## ⚡ Essential
10
+
11
+ | Element | Specification |
12
+ | ------------------ | -------------------------------------------- |
13
+ | **Camera Angle** | **45° oblique** (RECOMMENDED) |
14
+ | **Why 45°?** | Better MediaPipe landmark separation |
15
+ | **Avoid 90°** | Lateral view causes ankle landmark occlusion |
16
+ | **Resolution** | 1080p minimum |
17
+ | **Frame Rate** | 60fps minimum (120fps preferred) |
18
+ | **Protocol** | Hands on hips, 45° oblique view |
19
+ | **Ankle Tracking** | Expect 120-150° at takeoff |
20
+
21
+ ______________________________________________________________________
22
+
23
+ ## 📸 Camera Setup
24
+
25
+ **Position:**
26
+
27
+ - Distance: 4m (ideal) or 3-5m
28
+ - Camera height: Mid-chest level of athlete (~100-120cm)
29
+ - **Camera angle: 45° oblique** (RECOMMENDED)
30
+ - Position camera between lateral (90°) and frontal (0°)
31
+ - Athlete visible from ~45° angle to side
32
+ - ✅ **Why 45°?** Better ankle landmark separation for MediaPipe
33
+ - ❌ **Avoid 90° lateral:** Causes ankle landmark overlap → poor tracking
34
+
35
+ **Configuration:**
36
+
37
+ - Format: MP4 or MOV, H.264 codec
38
+ - Lighting: Consistent, no shadows falling on the ankle
39
+ - Background: High-contrast backdrop relative to athlete's clothing
40
+ - Tripod: Secure and level
41
+
42
+ ______________________________________________________________________
43
+
44
+ ## 🎬 Recording Protocol
45
+
46
+ **Recommended Setup (45° oblique view):**
47
+
48
+ 1. **Position camera at 45° angle** to athlete's side
49
+ 1. **Mark athlete position:** Fixed floor position, unchanged clothing and footwear
50
+ 1. **Record jumps:** One video per jump (1-3 jumps recommended)
51
+ 1. **Maintain consistency:** Same angle, lighting, and distance throughout
52
+
53
+ **Important:**
54
+
55
+ - Capture one video per jump—do not record multiple jumps in a single file
56
+ - Keep camera at 45° oblique for all recordings
57
+ - Ensure ankle landmarks (heel, ankle, toes) are clearly visible and separated
58
+
59
+ ______________________________________________________________________
60
+
61
+ ### Why 45° Oblique? (Empirical Evidence)
62
+
63
+ **Validation Study Results (December 2025):**
64
+
65
+ - **45° oblique**: 140.67° average ankle angle ✅ (accurate)
66
+ - **90° lateral**: 112.00° average ankle angle ⚠️ (underestimated)
67
+ - **Root Cause**: At 90° lateral, one leg occludes the other → MediaPipe **confuses left/right feet**
68
+
69
+ **Key Insight:** MediaPipe cannot distinguish which foot is which at 90° lateral. At 45° oblique, both legs are clearly separated, enabling accurate left/right tracking.
70
+
71
+ ______________________________________________________________________
72
+
73
+ ## ✅ Critical Requirements
74
+
75
+ - ✅ **45° oblique camera angle** (optimal for MediaPipe)
76
+ - ✅ **Hands remain on hips** for the entire movement
77
+ - ✅ **Consistent lighting** (no shadows on ankle)
78
+ - ✅ **Separate video files** for each jump
79
+ - ✅ **Good form:** Deep countermovement, explosive extension, no arm swing
80
+ - ✅ **Ankle landmarks visible:** Heel, ankle, and toes clearly separated
81
+
82
+ ❌ **Do not:**
83
+
84
+ - Use 90° pure lateral view (causes landmark occlusion)
85
+ - Include multiple jumps in a single video file
86
+ - Record with poor lighting (affects landmark detection)
87
+ - Position camera too close (\< 3m) or too far (> 5m)
88
+
89
+ ______________________________________________________________________
90
+
91
+ ## 📊 Frame Rate and Configuration
92
+
93
+ | Frame Rate | iPhone/Android Configuration |
94
+ | ---------- | ---------------------------------------------------------------- |
95
+ | **60fps** | Settings → Camera → Record Video: 1080p at 60fps |
96
+ | **120fps** | Settings → Camera → Record Video: 1080p at 120fps (if available) |
97
+
98
+ **Note:** 120fps requires better lighting than 60fps
99
+
100
+ ______________________________________________________________________
101
+
102
+ ## 📝 Pre-Recording Checklist
103
+
104
+ - [ ] Tripod is stable and level
105
+ - [ ] Athlete positioned with proper footwear
106
+ - [ ] Lighting is even throughout, no shadows on ankle
107
+ - [ ] Frame rate setting matches current group requirement
108
+ - [ ] Test 5-second recording completed successfully
109
+ - [ ] Full athlete body visible in frame (head to toes)
110
+ - [ ] Confirm hands positioned on hips before first jump
111
+
112
+ ______________________________________________________________________
113
+
114
+ ## 🎯 Acceptance Criteria
115
+
116
+ Each video must include:
117
+
118
+ - ✅ Clear side angle (45° or 90° view)
119
+ - ✅ Complete athlete body in frame
120
+ - ✅ Ankle well-illuminated and clearly visible
121
+ - ✅ Hands stay on hips throughout entire movement
122
+ - ✅ Deep countermovement followed by explosive push
123
+ - ✅ Visible plantarflexion (toe point) at liftoff
124
+ - ✅ Proper research technique throughout
125
+
126
+ ______________________________________________________________________
127
+
128
+ ## 📋 Quick Reference: Ankle Angles (at 45° view)
129
+
130
+ **Starting position (neutral):** ~80-90° (foot at right angle to shin)
131
+ **Liftoff (plantarflexion):** ~120-150° (foot pointing downward)
132
+ **Expected at takeoff:** ~140° average based on validation study
133
+ **Target progression:** At least 30° of ankle extension during jump
134
+
135
+ **Note:** These values are for 45° oblique view. 90° lateral view shows artificially low angles (~112° avg) due to landmark tracking issues.
136
+
137
+ ______________________________________________________________________
138
+
139
+ ## 📚 Technical References
140
+
141
+ See also:
142
+
143
+ - `docs/guides/camera-setup.md` - Camera positioning and equipment guidelines
144
+ - `docs/technical/framerate.md` - Frame rate considerations and temporal resolution
145
+ - Issue #10 - Ankle angle measurement validation study
146
+
147
+ **Version:** 2.0 | December 2025 (Updated with empirical validation findings)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kinemotion"
3
- version = "0.35.0"
3
+ version = "0.35.1"
4
4
  description = "Video-based kinematic analysis for athletic performance"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<3.13"
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Debug contact states for drop jump videos to see why takeoff isn't detected.
4
+ """
5
+
6
+ import sys
7
+ from pathlib import Path
8
+
9
+ import numpy as np
10
+
11
+ sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
12
+
13
+ from kinemotion.core.pose import PoseTracker
14
+ from kinemotion.core.video_io import VideoProcessor
15
+ from kinemotion.dropjump.analysis import (
16
+ ContactState,
17
+ detect_ground_contact,
18
+ extract_foot_positions_and_visibilities,
19
+ find_contact_phases,
20
+ )
21
+
22
+ # Test the failing videos
23
+ videos = [
24
+ ("samples/validation/dj-45-IMG_6739.MOV", 118, 131, 144), # Video 1 - takeoff fails
25
+ ("samples/validation/dj-45-IMG_6740.MOV", 141, 154, 166), # Video 2 - both fail
26
+ ]
27
+
28
+ for video_path, drop_gt, landing_gt, takeoff_gt in videos:
29
+ print("=" * 80)
30
+ print(f"Testing: {Path(video_path).name}")
31
+ print(f"GT: drop={drop_gt}, landing={landing_gt}, takeoff={takeoff_gt}")
32
+ print("=" * 80)
33
+
34
+ # Process video
35
+ video_processor = VideoProcessor(video_path)
36
+ fps = video_processor.fps
37
+ frame_count = video_processor.frame_count
38
+
39
+ # Get pose landmarks
40
+ pose_tracker = PoseTracker()
41
+ landmarks_sequence = []
42
+
43
+ for frame_idx in range(frame_count):
44
+ frame = video_processor.read_frame()
45
+ if frame is None:
46
+ break
47
+ results = pose_tracker.process_frame(frame)
48
+ landmarks_sequence.append(results)
49
+
50
+ # Extract foot positions
51
+ positions, visibilities = extract_foot_positions_and_visibilities(landmarks_sequence)
52
+
53
+ # Detect contact states with NEW optimized threshold
54
+ contact_states = detect_ground_contact(
55
+ positions,
56
+ velocity_threshold=0.002, # NEW: Empirically optimized (was 0.01)
57
+ min_contact_frames=6,
58
+ visibility_threshold=0.5,
59
+ visibilities=visibilities,
60
+ )
61
+
62
+ # Find phases
63
+ phases = find_contact_phases(contact_states)
64
+
65
+ print(f"\nTotal frames: {len(contact_states)}")
66
+ print(f"Total phases detected: {len(phases)}")
67
+ print("\nPhases:")
68
+ for i, (start, end, state) in enumerate(phases[:10]): # Show first 10
69
+ duration = (end - start) / fps * 1000
70
+ state_name = "ON_GROUND" if state == ContactState.ON_GROUND else "IN_AIR"
71
+ print(f" {i+1}. Frames {start:3d}-{end:3d} ({duration:6.1f}ms): {state_name}")
72
+ if i == 9 and len(phases) > 10:
73
+ print(f" ... and {len(phases) - 10} more phases")
74
+
75
+ # Check contact states around key events
76
+ print(f"\nContact states around key events:")
77
+ print(f" Drop GT ({drop_gt}): {contact_states[drop_gt].name if drop_gt < len(contact_states) else 'OUT OF RANGE'}")
78
+ print(f" Landing GT ({landing_gt}): {contact_states[landing_gt].name if landing_gt < len(contact_states) else 'OUT OF RANGE'}")
79
+ print(f" Takeoff GT ({takeoff_gt}): {contact_states[takeoff_gt].name if takeoff_gt < len(contact_states) else 'OUT OF RANGE'}")
80
+
81
+ # Count state distribution
82
+ on_ground = sum(1 for s in contact_states if s == ContactState.ON_GROUND)
83
+ in_air = sum(1 for s in contact_states if s == ContactState.IN_AIR)
84
+ unknown = sum(1 for s in contact_states if s == ContactState.UNKNOWN)
85
+
86
+ print(f"\nContact state distribution:")
87
+ print(f" ON_GROUND: {on_ground} frames ({on_ground/len(contact_states)*100:.1f}%)")
88
+ print(f" IN_AIR: {in_air} frames ({in_air/len(contact_states)*100:.1f}%)")
89
+ print(f" UNKNOWN: {unknown} frames ({unknown/len(contact_states)*100:.1f}%)")
90
+ print()