feat(rate-of-closure): add launch monitor convention registry - #4203
feat(rate-of-closure): add launch monitor convention registry#4203dieterolson wants to merge 31 commits into
Conversation
|
Release-hardening follow-up 3d899c8: comparison compatibility now includes sign_rule; the Foresight-comparable Launch Direction sign fails closed as unspecified instead of inheriting an unsupported positive-right rule; Python/TypeScript golden parity and tests were updated. Also fixes the scoped Python 3.12 NumPy return typing defect. Local gates: 11 Python tests, 8 web tests, type-check, ESLint, Vite build, Ruff, Black, strict Python 3.12 mypy, diff check. |
…r-analytics feat(rate-of-closure): add launch monitor analytics tabs
…y' into feat/4193-launch-direction-registry-integration
…ion-registry-integration feat(rate-of-closure): add launch direction conventions
* feat(swing-sim): add spatial target contract (#4192) * feat(flight): add canonical result metric catalog * feat(ball-flight): add reproducible wind comparison * feat(flight): add desired-flight inverse solver * fix(ci): satisfy Python 3.12 delta typing * feat(ball-flight): analyze wind estimate uncertainty * feat(ball-flight): add interactive 3d playback * fix(ball-flight): distinguish apex and landing events * feat(flight): add impact solution families * feat(flight): add capability-aware shot optimizer * feat(flight): add variability and downside objectives * fix(ball-flight): preserve responsive plot aspect ratio * fix(ball-flight): preserve playback canvas aspect ratio * style(rate-of-closure): format analytics modules * refactor(rate-of-closure): split flight explorer controls * fix(rate-of-closure): preserve typed explorer values * docs(ball-flight): reconcile integration specification * docs(rate-of-closure): add campaign integration handoff * fix(ball-flight): harden wind uncertainty risk metrics * docs(rate-of-closure): record wind strategy v2 handoff * docs(rate-of-closure): record draft integration PR * docs(rate-of-closure): verify wedge AoA worked example * style(rate-of-closure): satisfy PR Ruff format gate * docs: checkpoint variation and wedge campaign handoff * fix(rate-of-closure): support pinned CI mypy * docs: record pinned CI mypy recovery * refactor(rate-of-closure): split simulation tab controller * docs(rate-of-closure): record base sync recovery * docs(rate-of-closure): record rendered design audit * feat(rate-of-closure): complete spatial target workflows and responsive layout * docs(rate-of-closure): refresh campaign handoff evidence * fix(rate-of-closure): satisfy pinned CI type contracts * docs(rate-of-closure): record pinned CI compatibility fix * fix(rate-of-closure): narrow target frame for pinned mypy * docs(rate-of-closure): record final pinned CI correction * fix(rate-of-closure): reserve themed wrapped form height * docs(rate-of-closure): record themed layout verification * fix(variation): preserve paired landing rows * docs(wedge): separate physical and synthetic examples * fix(ci): type NumPy variation intermediates * feat(rate-web): add frame-explicit manual delivery controls * feat(rate-of-closure): declare manual delivery geometry * docs(rate-web): declare manual impact model boundary * test(rate-of-closure): pin wedge manual delivery parity * fix(rate-web): validate current run and delivered loft * fix(rate-of-closure): preserve manual delivery precision * fix(rate-of-closure): gate source-specific pose controls * fix(rate-web): enforce active model contracts * fix(rate-web): fail closed on incomplete v5 settings * fix(rate-of-closure): reject truncated v5 run settings * fix(rate-web): require canonical v5 ball setup * fix(rate-of-closure): align visible simulation inputs * fix(rate-of-closure): reject unemitted schema versions * docs(swing-sim): clarify automatic backend fallback * fix(rate-of-closure): keep compact controls readable * fix(rate-of-closure): prevent shaft datum truncation * docs(rate-of-closure): record validated campaign handoff
2026-08-10 repaired parent propagated normallyExact repaired #4202 head The code trees already agreed on the explicit D-plane ndarray boundaries; reconciliation was limited to retaining both branches' canonical handoff/SPEC histories and bumping the child spec to 1.14.9. Post-reconciliation evidence: 25 focused D-plane, impact-contract, impact-kinematics, and impact-scene tests passed; docs governance, changed-file-size, and whitespace gates passed. Typing evidence is stated precisely: the exact parent hosted pinned quality gate is green. The local Windows MyPy 1.15 environment cannot parse the installed Python-3.12-only NumPy stub syntax under the branch's Python 3.11 target, and WSL currently fails to start with This PR remains draft. Fresh current-head protected CI, review, and all dependency-order gates are required before any merge. |
* test(rate): add shared ball setup parity fixture * test(rate): record ground tee visual evidence * style/fix: pre-commit automated fixes --------- Co-authored-by: Dieter Olson <dieterolson@gmail.com> Co-authored-by: codex-scheduled <codex-scheduled@users.noreply.github.com>
…1-launch-monitor-registry # Conflicts: # AGENT_HANDOFF.md # src/rate_of_closure/AGENT_HANDOFF.md # src/rate_of_closure/simulation/kinetics.py
|
Consolidated into #4410. Closing to eliminate CI runner load. |
Summary
Verification
python -m pytest src/shared/python/swing_sim/impact/tests/test_dplane.py src/shared/python/swing_sim/conventions/tests/test_registry.py -q(20 passed)python -m ruff check src/shared/python/swing_sim/conventionspython -m ruff format --check src/shared/python/swing_sim/conventionspython -m mypy --strict --no-incremental --disable-error-code=type-arg src/shared/python/swing_sim/conventions(4 source files clean; the disabled code isolates an unrelated existingai/education.pygeneric annotation failure reached through package imports)npm test -- --run(57 files, 365 tests)npm run type-checknpm run lint -- --max-warnings=0npm run buildgit diff --checkStack
Refs #4180
Refs #4181