583ff590f2
The prewalk arm/switch guard compared model identity only (modelsAreEqual / provider+id), discarding the resolved thinkingLevel. A legal same-model target at a cheaper effort (e.g. prewalk: "@task" resolving to the active model at a lower level) was dropped as a no-op, so the session ran the expensive effort for the whole run while still paying the plan/continue nudges — silently on the session path, logger.debug only on the subagent path. Compare (provider, id, effective thinking level) via a shared prewalkWouldBeNoop helper. Effort-only deltas on the same model now switch; a genuine no-op emits a user-visible notice on the session path and never arms on the subagent path. Fixes #6659