2fcfbe21

Add safe-coloured-text-parsing for ANSI escape code parsing

## Summary

- New package `safe-coloured-text-parsing`: parses ANSI SGR escape codes from `Text` into styled `Chunk`s — the inverse of `renderChunkText`
- New package `safe-coloured-text-parsing-gen`: `GenValid` instances and 28 tests
- Two-layer attoparsec architecture: tokenizer (`Text -> [AnsiToken]`) + interpreter (`[AnsiToken] -> [Chunk]`)
- Both layers support lazy `Text` for streaming via `Data.Attoparsec.Text.Lazy`

## Test plan

- [x] 28 tests: unit, property, roundtrip (render then parse recovers style), lazy/strict equivalence
- [x] `stack build --pedantic`
- [x] `stack test`
- [x] `pre-commit run -a`
- [x] `nix flake check` (all backward/forward compat checks)

Suite timing

Time to Start Worker time Duration Time to finish
Config -1268s 35s 35s -1233s
Eval -1233s 6m07s 6m07s -865s
Build -910s 7m15s 3m20s -710s
Test - - - -
Deploy - - - -
Suite -1268s 13m58s 9m18s -710s

Timeline

0s39m40m41m42m43m44m45m46m47m48m