diff --git a/PROJECT.md b/PROJECT.md
index cf77c6d..317dca4 100644
--- a/PROJECT.md
+++ b/PROJECT.md
@@ -5736,6 +5736,28 @@ only the deep hard ball, the long down-flick only the lob.
- **Not built:** a lesson for it. The ghost hand teaches the tap and the side flick only; the double tap
is undiscoverable without being told. Add one if the phone test says so.
+### The double tap is a STANCE, not one ball's run (2026-10-14, v377)
+Oliver on v376: *"funktioniert irgendwie nicht — wenn man doppeltippt, geht er minimal vor"*. **Measured**
+(`NETX=1`, the bot double-tapping behind 100% of its deep flicks):
+- His own ball's flight covered only 4-9 m of the ~10 m to `netStand`.
+- His next ball was usually met from mid-court, 7-10 m out, which is OUTSIDE `netFrom` (7 m).
+- The approach flag lived for one ball, so the recovery after that volley (`rallyHome`: outside the net
+ zone → baseline) walked him straight back. Forward a little, then back: exactly the report.
+
+**Now `P.post`** ('net' / 'base') is set by the double tap and holds:
+- 'net' lasts until the next double tap, a lob he cannot get under and runs down (`plan.over === null` →
+ 'base'), or the point's end (`setupPoint` clears it).
+- `atNetHome` reads it first for the player, so every recovery heads for `netStand` at full pace.
+ `P.rushing` follows it, so every incoming ball is planned as a net man's.
+- 'base' clears itself once he is back beyond `netFrom` + 0.5, so a short ball still pulls him in as before.
+
+**After:** of his contacts while committed, ~35% are at the net (< 3.5 m), ~40% around the service line (the
+first volley), ~20% at 7-10 m, and ~5% further. The stance is dropped only by lobs and point ends. Ladder
+(σ60, 8 seeds): the base is unchanged; following in is now about neutral, still good against the pushers
+(Steward 52 → 61), and no longer punished by the Brute and the Champion.
+Test: committed to the net, a volley struck 9 m out keeps him coming in (< 7 m a second later); without the
+stance the old recovery still takes him back.
+
# OPEN — leftovers, in rough priority order
Nothing here is broken; these are known gaps and unverified risks.
@@ -5751,7 +5773,8 @@ Nothing here is broken; these are known gaps and unverified risks.
go back, and the SMASH. See "The player's way to the net and back" above.
v375: the auto-run's shake is gone (a latched chase plan); he is a little stronger for it, so the bottom
of the Climb and classic easy may now be too easy. See "The auto-run stops shaking".
- v376: the run to the net and back is a DOUBLE TAP while his own ball flies (replaces v374's flick length). Fallback tag `rally-baseline-v360`.
+ v376: the run to the net and back is a DOUBLE TAP while his own ball flies (replaces v374's flick length).
+ v377: the double tap is a stance (P.post) that holds until changed — v376 only moved him a few metres. Fallback tag `rally-baseline-v360`.
1. **`RES` 4 is unverified on a real phone under load.** It nearly doubled the fill rate (810 -> 1080
device px across). Oliver has not reported stutter, but he also has not played a late horde since.
diff --git a/index.html b/index.html
index 08cae4c..8f957fb 100644
--- a/index.html
+++ b/index.html
@@ -1140,6 +1140,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
REC
-
+