The disconnect here is that you’ve written two different rules that apply in identical circumstances (Instead of climbing the gate), so I think Inform is just executing the first one it finds in the code. It looks what you’re trying to do is to link the instead rules to the different locations by putting them in adjacent lines? But Inform doesn’t understand that – you need add an explicit condition saying “if the location is outside-gate” or whatever (“the location” is shorthand for “the location of the player”).
However, for reasons discussed in this thread, you probably don’t want to do this as a set of Instead rules – it can create challenges for you later on since your code will work in potentially inconsistent ways. It’d be better to shift it over to a Carry Out rule for climbing. The good news is that climbing is a built-in action in Inform, though it’s blocked by default – so you’ll need to say that the player is allowed the climb the gate. Here’s a cut at what that could look like:
A room has some text called a gate description.
The gate is a backdrop. The description of the gate is usually "[gate description of the location]". It is in the Outside-Gate and the Inside-Gate.
Outside-Gate is a room. "You are outside a gate."
The gate description of Outside-Gate is "The outside of the gate is rusty and filthy."
Inside-Gate is a room. "You are inside the gate."
The gate description of Inside-Gate is "You see the inside of the old gate."
The block climbing rule does nothing when the noun is the gate.
Carry out climbing the gate:
If the player is in outside-gate:
say "You climb inside the gate.";
move the player to inside-gate;
Otherwise if the player is in inside-gate:
say "You climb back outside of the gate.";
move the player to outside-gate.