diff --git a/PROJECT.md b/PROJECT.md
index e8ed83b..1676cb9 100644
--- a/PROJECT.md
+++ b/PROJECT.md
@@ -409,10 +409,28 @@ announced, so it was over before it registered.
you in the same CONTROL MODE a horde does — racket auto-fires, the finger steers you absolutely,
no serving — so a flamer or gun genuinely feels like a horde starting. Nothing in the weapon paths
touches `startHorde`; with the horde announced again the two are told apart by the announcement.
-- Three tests added (15 total): the wave may not land on the frame of its own announcement, a mode
+- Three tests added: the wave may not land on the frame of its own announcement, a mode
that steals the court during the warning re-arms the latch, and the boss overlay names the boss
and hands the court back without a tap.
+**Same round, the burst weapons.** *"When firing a burst tin the weapon stops when it has destroyed
+all visible enemies. It should just fire on."* It did, and the cause had nothing to do with enemies:
+both the auto-fire and the steer were gated on `G.phase === 'rally'`, and every beat raised by
+clearing the court parks the phase in `'over'` (a point, a won game, the mop-up). So the moment the
+flamer killed the last body it went silent AND the player froze — worst possible timing, and it read
+as the weapon jamming. **A burst is its own control mode for its whole `len`, exactly like a horde:
+its own clock is the only thing that ends it.** The fire block in `updateZombies` has no phase guard
+at all now, and the movement block runs on `G.phase === 'rally' || G.mgT > 0`. The settled "the
+player only walks during rally" rule is untouched — nothing arms a burst except the player.
+Deliberately NOT fixed by forcing the phase back to `'rally'` during a burst: that would stop `overT`
+ticking, and a parked beat that never expires is how `pendingHorde` gets stranded (see the mgT lock).
+
+**And the burst countdown is the TILE now, not a bar.** It was 1.5 px along the tile's bottom edge —
+which is both the rounded frame and, on a phone, the very bottom of the screen. The armed slot's
+WELL drains instead: a gold wash across the whole tile, emptying leftward, clipped to the tile's own
+rounded path (`panel` leaves it as the current path) and drawn under the icon and labels. Measured
+lit vs empty on the live tile: rgb(88,125,68) against rgb(31,84,49).
+
## Session log: beats.js, the rename, and the build gate (2026-08-11, same day)
Oliver's structural question ("framework? smaller files?") answered with a deliberate NO on both —
diff --git a/index.html b/index.html
index f906025..1dd7f1b 100644
--- a/index.html
+++ b/index.html
@@ -398,6 +398,6 @@
-
+