b2c1384e

ical: say what the spec says about COUNT and BYSETPOS

Two `Validity` instances in `ICal.PropertyType.RecurrenceRule` disagree with RFC 5545, in opposite directions.

## `Count` carries `BYSECOND`'s sentence

```haskell
instance Validity Count where
  validate s@(Count w) =
    mconcat
      [ genericValidate s,
        declare "Valid values are 0 to 60." $   -- <- this is BYSECOND's bound
          w >= 0 && w <= 60
      ]
```

§3.3.10 says only this about COUNT, and bounds the value nowhere:

> The COUNT rule part defines the number of occurrences at which to
> range-bound the recurrence.  The "DTSTART" property value always
> counts as the first occurrence.

"Valid values are 0 to 60" is the BYSECOND sentence, three declarations further down in the same paragraph.

So **`COUNT=100` — a weekly meeting for two years — is an invalid value today.** Two consequences:

- `parsePropertyFromText` hands back a `RecurrenceRule` that fails its own `Validity` for ordinary input.
- `genValid @Count` is the derived instance, so it is capped by the same wrong bound. **Nothing in the suite has ever exercised a count above 60.**

The fix drops the bound entirely, which makes the derived instance the honest one.

## `BySetPos` has the opposite problem

The instance declares only that the position is not zero, but §3.3.10 does give a range:

> Valid values are 1 to 366 or -366 to -1.

So `BYSETPOS=400` passes as valid. Now bounded.

## Why this goes first

Making the parser refuse values that fail their own `Validity` is the obvious follow-up, and it is a separate PR. It cannot come first: with `Count` as it is, that change would start rejecting `COUNT=100`.

## Two commits

1. **Red.** Both fail, and `Count`'s failure prints the borrowed sentence verbatim:
   ```
   Count.considers an ordinary count valid
     Violated: Valid values are 0 to 60.
   BySetPos.rejects a set position past the number of days in a year
   ```
2. **Green.** Nine lines.

## Generators

`GenValid BySetPos` builds from the QuickCheck size, so it stays well inside 366 and needs no change. `GenValid Count` becomes unbounded, which is the point — but it does not blow up the property tests that expand recurrence rules, because the expansion is bounded by the limit day however large the count is. Measured: `ical-recurrence-gen` runs the same 8813 examples in the same time, and `ical-gen` goes 1080 → 1082 passing with 46127 examples.

Both suites green, `nix flake check` passes.

## How this was found

Probing `BYSECOND=60`, which led to a survey of what the RRULE parser accepts. Two further findings are recorded in the handoff and get their own PRs: out-of-range `BY*` values parsing into invalid values across eight rule parts, and `BYSECOND=60` producing different recurrence sets depending on `DTSTART`'s value type.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 0s 1s 1s 1s 0s
Eval 1s 10s 10s 12s 0s
Build 11s 1m50s 1m50s 2m01s 0s
Suite 0s 2m02s 2m01s 2m01s 0s

Timeline

0s10s20s30s40s50s1m1m10s1m20s1m30s1m40s1m50s2m