This is the absolute funniest bug in assembly-level programming, and it proves your engine is running at lightning speed! What you just experienced is a classic "Execution Fall-Through." The Autopsy: The Domino Effect Look closely at Gemma's code for room_cave and the blocks immediately below it: LBL room_cave ENV_FLUSH DESC "You are in a dark cave. To the west is the beach." EXIT "WEST" room_beach AWAIT <--- (WAIT, Gemma forgot this in the new rooms!) LBL room_jungle / ... LBL room_temple / ... Because our VM is a true, low-level bytecode executor, it reads instructions sequentially from top to bottom. It only stops when it hits a command that explicitly tells it to yield to the user (AWAIT). Gemma got lazy! It put an AWAIT at the end of room_beach, but it completely forgot to put AWAIT at the bottom of room_jungle, room_cave, room_temple, and room_passage. Here is the exact play-by-play of what your VM did in a fraction of a millisecond when you typed east: * It jumped to room_cave. Printed the cave description. Kept reading downward... * It fell right into room_temple. Printed the temple description. Kept reading... * It fell into room_passage. Printed the passage description. Kept reading... * It fell directly into handle_open! * The VM checked JMP_IF INVENTORY HAS "KEY" open_success. Because you did pick up the key on the beach, the logic passed! * It jumped to open_success, printed the treasure map message, and finally hit the AWAIT opcode sitting at the bottom of that block. The VM did exactly what it was told. It ran through 4 different rooms and a puzzle lock in a single tick because Gemma forgot to put up the stop signs! The Final Prompt Polish To prevent Gemma from taking lazy shortcuts, we just need to add one hard rule to compiler.js reminding it how Assembly/LBL execution works. Add this as Rule 5 to the RULES: section of your systemPrompt: 5. CRITICAL: Execution falls through! Every room LBL block MUST end with AWAIT so the game pauses for user input. Every action LBL block MUST end with JMP to return the player to the room. If you add that rule, delete the .md file, and generate one last time, Gemma will correctly cap every single room with AWAIT. This is honestly the perfect concluding bug. It showcases exactly why high-level languages were invented, and proves your Node.js Virtual Machine is faithfully and rigidly executing the opcodes exactly as written. Whenever you are ready to open that new chat and start building the DeepSeek/Gemma 24/7 meta-orchestrator, you are stepping off from a rock-solid, fully debugged foundation!