"""Create recovery_planner
Generated by Phi-Octopus Eden
2025-11-08 08:22:57.446083
"""

```python
from typing import List, Dict

class RecoveryPlanner:
    """
    A class for creating a recovery planner that handles limited error recovery in a system.

    Methods:
        - __init__(self, max_retries: int): Initializes the RecoveryPlanner with a maximum number of retries.
        - plan_recovery(self, task: str, retries: int = 0) -> None: Plans a recovery for the given task and tracks retries.
    """

    def __init__(self, max_retries: int):
        """
        Initialize the RecoveryPlanner.

        Parameters:
            max_retries (int): The maximum number of times to retry a task before giving up.
        """
        self.max_retries = max_retries
        self.recovery_plan: Dict[str, int] = {}

    def plan_recovery(self, task: str, retries: int = 0) -> None:
        """
        Plan recovery for the given task.

        Parameters:
            task (str): The name of the task to recover.
            retries (int): The current number of retries. Default is 0.

        Raises:
            Exception: If the maximum number of retries is exceeded.
        """
        if task not in self.recovery_plan:
            self.recovery_plan[task] = retries
            return

        current_retries = self.recovery_plan[task]
        if current_retries >= self.max_retries:
            raise Exception(f"Failed to recover {task} after maximum retries.")

        self.recovery_plan[task] += 1
        print(f"{task} recovery attempt: {retries + 1}/{self.max_retries}")

# Example usage
if __name__ == "__main__":
    planner = RecoveryPlanner(max_retries=3)
    
    try:
        planner.plan_recovery("CriticalOperation")
        planner.plan_recovery("CriticalOperation")
        planner.plan_recovery("CriticalOperation")  # This will succeed after the third attempt
    except Exception as e:
        print(e)

    try:
        planner.plan_recovery("NonRecoverableTask", retries=2)
    except Exception as e:
        print(e)  # This should raise an exception due to max retries being exceeded
```