$ \newcommand{\cansay}[2]{#1\text{ can say }\unicode{0x2018}#2\unicode{0x2019}} \newcommand{\says}[2]{#1\text{ says }\unicode{0x2018}#2\unicode{0x2019}} $Here is a way to construct a solution to this puzzle, and many like it.
We want to know whether some specific $\;P\;$ (e.g., "Does this path lead to the ruins?") is true, from the answer $\;a\;$ ($\;\text{true}\;$ for yes, $\;\text{false}\;$ for no) to a question $\;q\;$.
Formally, for some specific villager $\;x\;$, we are asked to find a $\;q\;$ that makes $ (0) \;\;\; \says x {q \equiv a} \;\Rightarrow\; (P \equiv a) $ true for all $\;a\;$. And we are given that \begin{align} (1) \;\;\; & \says x P \;\Rightarrow\; \cansay x P \\ (2) \;\;\; & \cansay x P \;\equiv\; T(x) \equiv P \\ \end{align} where $\;T(x)\;$ means that $\;x\;$ is a truth-teller.
(Note that in $(2)$ I use the fact that $\;\equiv\;$ is associative, so that I can leave out the parentheses.)
With the above, we can calculate \begin{align} & \says x {q \equiv a} \;\Rightarrow\; (P \equiv a) \;\;\;\;\;\text{-- $(0)$} \\ \Leftarrow & \;\;\;\;\;\text{"by $(1)$ -- the only thing we know about $\;\says{\cdot}{\ldots}\;$"} \\ & \cansay x {q \equiv a} \;\Rightarrow\; (P \equiv a) \\ = & \;\;\;\;\;\text{"by $(2)$ -- the only other thing we know about $\;\cansay{\cdot}{\ldots}\;$"} \\ & (T(x) \equiv q \equiv a) \;\Rightarrow\; (P \equiv a) \\ \Leftarrow & \;\;\;\;\;\text{"weaken -- the only way forward, as far as I can see"} \\ & T(x) \equiv q \equiv a \equiv P \equiv a \\ = & \;\;\;\;\;\text{"reorder using symmetry of $\;\equiv\;$; simplify"} \\ & q \;\equiv\; T(x) \equiv P \\ = & \;\;\;\;\;\text{"by $(2)$ -- to turn $\;q\;$ in to a real question"} \\ & q \;\equiv\; \cansay x P \\ \end{align}
So we ask the villager, "Can you say that this path leads to the ruins?" An answer of "yes" means it does lead there, an answer of "no" means it doesn't.