A rule set that fires no rules gives you no error and no output to work backwards from. A goal-driven run turns that silence into a tree, where the deepest red node names the input that was actually missing.
A goal-driven ruleset does not have to answer the same question every time. Override its goals per run, from the runner or from an API call, and one set of rules can answer eligibility today and pricing tomorrow without being edited.
Name the context keys a run should establish and the engine works backwards to find the rules that can produce them, firing only what the answer actually needs. Every run comes back with a proof tree that shows how the value came to be, or which input was missing.