generatePlan gains a preAssigned parameter: manual entries occupy slots, count toward eligibility (maxPerMonth/minGap) and are never double-booked; only the remaining slots per day are auto-filled. The generate handler now keeps manual:true entries for the month instead of wiping them. Adds tests for slot occupation, fully-manual days, and maxPerMonth counting. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>