a987bdce

Prepare a release of ical 0.3.0.0 and ical-recurrence 0.2.0.0

Version bumps and changelog for the seven fixes that landed in #31–#37. **Nothing is published** — this only prepares the release.

## Versions

| package | from | to |
| --- | --- | --- |
| `ical` | 0.2.0.0 | **0.3.0.0** |
| `ical-recurrence` | 0.1.0.0 | **0.2.0.0** |

Both bumps are major. Every entry either changes what the parser accepts or changes a `Validity` instance, and two error types gain constructors, so nothing here is safe for a caller that matches exhaustively or relies on the old bounds:

- `PropertyTypeParseError` gains `RecurrenceRulePartOutOfRange`
- `PropertyTypeFixableError` gains `RecurrenceRuleHasBothUntilAndCount`

No version bounds between the packages in this repo to update — they depend on each other by bare name.

## What's in it

**`ical` 0.3.0.0**, six RRULE fixes:

- `COUNT` was capped at 60, by `BYSECOND`'s sentence copy-pasted from three declarations down the same paragraph. `COUNT=100` was invalid, and `GenValid Count` was capped by the same bound so no test had ever used one. (#33)
- `BYSETPOS` was unbounded where the spec gives 1..366/-366..-1. (#33)
- A `BYDAY` ordinal could not have two digits: `10MO` through `53SU` were unparseable, as was a leading `+`. (#35)
- A `BYDAY` ordinal was bounded at ±5 instead of ±53, so `6MO`–`9MO` parsed into invalid values. (#35)
- A rule with both `UNTIL` and `COUNT` parsed silently; now a fixable error. (#36)
- Out-of-range rule part values across nine parts parsed into invalid values; now refused. (#37)

**`ical-recurrence` 0.2.0.0**, two recurrence fixes:

- `FREQ=DAILY;BYDAY=2MO` matched every day instead of Mondays — a forbidden value widened the recurrence set. (#32)
- An instance holding a leap second was kept or dropped depending on `DTSTART`'s value type. (#34)

#31 gets no entry, being test-only.

## Two things to check while reviewing

**Each entry says why the old behaviour was wrong**, not just what changed, following the two entries already in the file. Worth a skim to confirm the reasoning reads correctly to you — several of these are subtle and I wrote both the fix and the note.

**The `BYSECOND=60` consequence is called out explicitly** in the `ical-recurrence` entry: that rule part now generates no instance at all. It is a spec-legal rule part that became inert, and the changelog says so rather than burying it.

## Checks

`nix flake check` passes on this branch, rebased onto master with #37 in. `ical-gen` 1109 passing, `ical-recurrence-gen` 301, both 0 failing.