diff --git a/PROJECT.md b/PROJECT.md
index 9e359cb..609d03b 100644
--- a/PROJECT.md
+++ b/PROJECT.md
@@ -616,6 +616,37 @@ should not reset to the middle when firing"*.
- **The dodge fix is in gameplay.js, not in the drill**, because it was never a drill bug — see the
new invariant above. It changes the gore mode too, and deliberately.
+**SIXTH PASS — THE MODE IS WINNABLE, AND THE DANGER MOVED.** Oliver: *"make the game that it is
+actually winable meaning that all required colors are visible on the far side before when a color
+combination is shown.. for now no colors that are not in the current combination but occasional
+zombies which don't have a color and are converging to the player trying to eat him"*.
+
+Two rules now define the file, and everything else falls out of them:
+1. **Every colour on court is IN the current combination.** No coloured decoys at all. A colour you
+ can see is a colour you will be asked for, and the strip can never name a body that is not there.
+2. **A combination is only shown once its bodies are all on the far side** — free, because the BATCH
+ IS BORN THERE. It is a property of the construction rather than a check that could be wrong: a
+ batch spawns at the far baseline, its combination is called off it on the same frame, and the
+ length of the court is the time you are given to work the list.
+
+**The pressure moved to the EATERS**, which is a better home for it: plain unbibbed shamblers on
+their own clock (`drillEaterEvery` -> `drillEaterMin`, capped at `drillEaterMax` on court).
+Deliberately NOT flagged `drill`, so they keep the gore mode's homing and converge on you while the
+bibbed batch walks its lanes. Killing one is never a fault (`drillKill` ignores a body with no bib)
+and letting one reach you is the ordinary caught. **The puzzle plays fair and the danger arrives on
+its own clock** — much better than a puzzle that cheats.
+
+The batch is the round: kill the last of it and the next walks in on the same frame with its
+combination already called. `drillBatch` 3 -> `drillBatchMax` 6 on the ramp, so the list grows AND
+the court fills.
+
+**One real bug, and the new test is what caught it: `killZombie` resolved the drill BEFORE splicing
+the body.** `drillKill` can draw a new combination on the spot (a double fault re-calls the
+survivors; an emptied batch brings in the next one) and it draws from whatever is standing in
+`zombies` — so the new combination could name the body that was in the middle of dying. That is a
+round asking for a colour which is not on court: precisely the un-winnable state this pass exists to
+make impossible. **Splice first, resolve second.**
+
**Open, and every one of them is Oliver's call after he plays it:**
1. **A ball that carries through the lane can complete two steps at once** — measured: one serve
killed bib 1 and then bib 2 standing behind it, banking two correct steps in one shot. Had the
diff --git a/index.html b/index.html
index 5858af0..835746c 100644
--- a/index.html
+++ b/index.html
@@ -399,6 +399,6 @@
-
+