fix(physics): restore standard tangent sign response

The left relative slingshot probe proved the spin projection, but its geometry
did not distinguish the sign rule. A stopped-Wine probe on symmetric record 72
did: the binary uses the standard dot-product tangent for both spin and the
opposing direction of the current tangential response. The earlier
swapped-component interpretation happened to agree for vertical walls and a
centered circle but selected the wrong sign on the right slingshot.

Use `tv=(vx*nx+vy*ny)/length`, update spin with
`tv*0.02*response_tangent`, and apply
`-sign(tv)*abs(normal_velocity)*response_tangent`, retaining the binary's
negative direction when tv is zero. Seal record 72's exact position, velocity,
and `+5.46` Real48 spin in C and Rust. Keep the two-minute autoplay assertion
focused on actual launch, press/release, target, bumper, and finite-state
activity after the corrected trajectory.

Test Plan:
- stopped Wine 11.15 record-72 injection/trace -- matched position, velocity, and spin
- `cargo test --workspace --all-targets --all-features` -- 124 passed
- `cargo clippy --workspace --all-targets --all-features -- -D warnings` -- passed
- `bash original/tools/test_reconstructed_c.sh` -- passed
- `python3 original/tools/audit_reconstruction.py --require-complete` -- passed with zero incomplete or unclassified units
- `rumdl check --flavor commonmark RECONSTRUCTION.md CHANGELOG.md` -- passed
- `git diff --cached --check` -- passed
This commit is contained in:
2026-08-23 20:33:20 +02:00
parent f79652bc9f
commit 23195cb9d1
9 changed files with 124 additions and 68 deletions
+10 -8
View File
@@ -83,15 +83,17 @@ DAT994 progress strip is drawn at `(202,328)` with height 13 and width
`(stage-1)*7`, rather than the impossible historical 328x202 read from a
237x13 bitmap. The focused loading-stage harness seals stages 1, 35, and 0.
Live one-substep rail/circle probes further correct the response transform.
The binary keeps two projections distinct: swapped-component
`-(vx*normal_y + vy*normal_x)/length` supplies the sign of the tangential
response magnitude `abs(normal_velocity)*response_tangent`, which is added to
retained `spin*0.4`. Standard dot-product
`(vx*normal_x + vy*normal_y)/length` independently drives
`spin_delta = projection*0.02*response_tangent`. The documented horizontal
drain `(0,3015)->(-302,-1809)`, ordinary circle/bumper transitions, and stopped
The binary's standard dot-product tangent
`tv=(vx*normal_x + vy*normal_y)/length` drives
`spin_delta=tv*0.02*response_tangent`. The current tangential response opposes
the sign of `tv` with magnitude
`abs(normal_velocity)*response_tangent` (negative when `tv==0`) and is added to
retained `spin*0.4`. The documented horizontal drain
`(0,3015)->(-302,-1809)`, ordinary circle/bumper transitions, and stopped
Wine record-57 transition `(75530,354765)/(3000,15)` to
`(77369,356597)/(1839,1832)` with exact Real48 spin `-5.28` seal both paths.
`(77369,356597)/(1839,1832)` with exact Real48 spin `-5.28`, plus record 72
`(235348,356825)/(-3000,15)` to `(233253,358494)/(-2095,1669)` with spin
`+5.46`, seal both paths and both relative slingshot chains.
## Reproducible gates