Create an iCalendar .ics file from the attached permitted event table.
Use the supplied named time zones and dates, not my device's assumed zone.
Ask about missing or ambiguous dates before generating an event.
Give each event a stable unique UID and preserve it when revising that event.
For each row, show the source start/end, the encoded start/end and whether
it is timed or all-day. Escape text correctly and use valid .ics line endings.
Do not add attendees, organisers, reminders or invitations unless supplied.
Return the actual file and the mapping table.

---

Check this actual .ics against the event source. Show any changed title,
missing row, duplicate UID, ambiguous zone or incorrect exclusive end date.
Check text containing commas, semicolons, backslashes and newlines.
Report what you inspected in the file separately from an app import test.

---

Event [source ID] covers [last included date]. Its all-day DTEND must be
the following date, because the end is exclusive. Correct that field,
retain the event UID and all other source facts, and return a fresh file
plus a concise list of changes. Do not silently revise other events.
