---
Summary: Move optional fields into `udf` field in card
Status: Done
---

# Description

We need this to ensure that python type checking provides the maximum benefit. As of now, because it's a `TypedDict`, accessing with a variable as the key or accessing a field not defined in `Card` but by the card itself raises typing warnings.

This will involve some significant refactor.

# Cucumber

**GIVEN** the source code
**WHEN** mypy is run
**THEN** there are no type errors raised

**GIVEN** the source code
**WHEN** the source code is inspected
**THEN** there are no 'ignore' calls for mypy
