---
trigger: always_on
---

#### Forbidden Code Patterns (Python Files Only)

| Pattern                                                           | Why Blocked                     | Alternative                                            |
| ----------------------------------------------------------------- | ------------------------------- | ------------------------------------------------------ |
| Type suppression comments (`# type: ignore`, `# pyright: ignore`) | Bypasses type safety            | Fix the actual type error, use `cast()` as last resort |
| `Any` type annotations                                            | Creates type safety holes       | Use specific types, `Protocol`, `TypeVar`, or `object` |
| Magic numbers in assignments                                      | Hidden intent, hard to maintain | Define named constants with `typing.Final`             |
| Loops/conditionals in tests                                       | Non-deterministic tests         | Use `@pytest.mark.parametrize`                         |
| Multiple assertions without messages                              | Hard to debug failures          | Add assertion messages or separate tests               |
| Duplicate fixture definitions                                     | Maintenance burden              | Use fixtures from `tests/conftest.py`                  |

#### Blocked Fixtures (Already in `tests/conftest.py`)

Do not redefine these fixtures—they are globally available:

- `mock_uow`, `crypto`, `meetings_dir`, `webhook_config`, `webhook_config_all_events`
- `sample_datetime`, `calendar_settings`, `meeting_id`, `sample_meeting`, `recording_meeting`
- `mock_grpc_context`, `mock_asr_engine`, `mock_optional_extras`
