Just for curiosity I just asked chat deepseek to load and solve the game and it solved it in half a second.
It suggested adding some riddle, for example:
path(castle, up, tower) :-
at(blueprint, holding),
(solved_riddle -> true ;
write('Answer the riddle first: What walks on four legs in the morning...?'), nl,
read(Answer),
(Answer = 'human' -> assert(solved_riddle) ;
write('Wrong! Try again.'), nl, fail)).
It suggested adding some riddle, for example: