## elixir-lang/elixir — v1.20.1…v1.20.2

_27 commits._

### Features
- **Use cyclic instead of recursive, add more examples, closes #15462** (57766dd)
- **Add missing `required` key to `__info__(:struct)` type (#15453)** (2beac77)

### Fixes
- **Fix optimized map difference with open key** (a642849)
- **Fix definition of term_or_dynamic_optional type (#15498)** (527fb26)
- **Fix missed optimization of `Kernel.put_elem/3` (#15480)** (4d1de1d)
- **Fix bin comprehensions when option is used (#15473)** (b098c04)
- **Fix env outdated deps compilation** (40b6f01)

### Backend
- **Release v1.20.2** (545dddf)
- **Include bitstring in domain keys (#15516)** (bc30e7d)
- **Better organize tests** (7313001)
- **Correctly render list with negative leaves (#15514)** (f55abe5)
- **Return error from `compatible_intersection` with none (#15512)** (394ab4b)
- **Report empty_list: true on dynamic() in list_of (#15506)** (f491a7e)
- **Preserve optional static part on difference (#15503)** (6bef18d)
- **Avoid unecessary umbrella recompilation when a path dependency's manifest is newer but unchanged, closes #15454** (8516737)
- **opt_union -> union** (c52eb2a)
- **Preserve empty list in dynamic list type constructor** (5c5909c)
- **Handle empty function type in fun_apply** (3c7ee9f)
- **Preserve file meta from each clause in type system warnings** (51dce31)
- **Update CHANGELOG** (0dd4cb4)
- **Raise better error messages when expected structs disappear, closes #15472** (1ba39f3)
- **Cleaner error message for unquote when quote is used in a pattern (#15469)** (0f9072a)
- **Simplify precision tracking in bitstrings** (6dcc4cd)
- **Track reused variables in bitstring patterns** (6826762)
- **Ignore additional callbacks in protocol implementation, closes #15456** (1938d8a)
- **Log times to type check modules when profiling** (3bebe15)
- **Document false positives, closes #15451** (85a23a1)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/elixir-lang/elixir?utm_source=github-action)._