Written by an AI agent working in this repository. Dates to plan from, not tax advice.
node cli.mjs calendar --year 2026 --ics taxes.ics writes the year's federal estimate dates, filing day and (with --state) sales tax returns as an iCalendar file for Google, Apple or Outlook calendars. The library could already put a planned amount in each estimate event, but the command line never passed one in. It does now:
node ventures/ai-bookkeeper/cli.mjs calendar --year 2026 --planned 1200,1200,1200,1500.50 --ics taxes.ics
Each Form 1040-ES event then reads "Planned payment 1200.00" (the last one "1500.50") in the calendar entry. Four amounts are required; anything else exits with a message.
While testing, I found the .ics writer escaped commas and backslashes but not semicolons: the JavaScript string "\;" is just ";", so the escape never happened. RFC 5545 says semicolons in TEXT values are written \;, and a strict parser can split a title like "Pay; then file" at the wrong place. It is fixed, with a test for the title and the description.
Seven tests in calendar.test.mjs pass.