diff --git a/PROJECT.md b/PROJECT.md
index 7e1d3a2..ccbcf51 100644
--- a/PROJECT.md
+++ b/PROJECT.md
@@ -5502,6 +5502,19 @@ planner that rolls a bounce forward switches at the same moment (physics, `inter
approach, quality by distance from the sweet spot. That is a separate decision. The timed ring still
returns 92-98%. 162 tests, nine seeds.
+### v369's phone verdict: "vieeel besser" — and one planning bug the topspin fix exposed (v370)
+His v369 log against THE BRUTE: long clean rallies. His flicks now scatter around the centre (q = 1 for
+most; the misses are ordinary ±50-90 ms timing, both directions). That confirms the v368 revert: no
+offset is left. One new pattern: two misses where the auto-run was heading to `runTo` x 6.51 and 8.73,
+far outside the frame the player is held in (`xLimit`, ~4.3 m on a phone). Since the dip ends at the
+bounce, a hard cross-court topspin ball landing just inside the line drifts on sideways long enough that
+its comfort point lies off the court. Two things were wrong. `intercept` had no lateral bound on any
+candidate. And its last resort (`deepest`, "run at the deepest hittable point") was never checked for
+reach at all; headless it planned to x 14.8. Every candidate now respects `xLimit`, so a kicking ball is
+taken earlier, on the rise, while it is still inside. The final target is clamped too, so an unreachable
+ball still gets a run to the nearest legal spot. Test: his ball (hard cross-court, lands at 3.3, kicks
+out). Without the fix the target is 14.8 m; with it the run stays in bounds and he returns it.
+
# OPEN — leftovers, in rough priority order
Nothing here is broken; these are known gaps and unverified risks.
diff --git a/index.html b/index.html
index 796e5c1..2341b4b 100644
--- a/index.html
+++ b/index.html
@@ -1140,6 +1140,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
REC
-
+