Why doesn't the maze agent use a lookup table of (x, y) → action? Because it would learn nothing reusable. The agent keys its memory on what's around it, not where it is — so a lesson learned in one maze fires in another. Click a cell in Maze A to teach a situation, then see what matches in both mazes.
bundle( ROLE_N ⊗ filler(north) , ROLE_E ⊗ filler(east) , … ) — a hypervector summarising the kinds of things in each relative direction. Two cells with the same surroundings produce the same key no matter their coordinates or which maze they're in, so similarity transfers the lesson. The coordinate key X[x] ⊗ Y[y] is pure position: it matches the same slot in both mazes even though that slot holds a completely different situation — so the rule is misapplied, not transferred.
cellFiller + ROLE sensing. Its route memory keys on a permutation-encoded history of these egocentric, maze-size-independent symbols, "so it transfers across mazes where a cell-indexed table can't" — the classical Q-table it once raced against was removed for exactly this reason.