BSK-E0071 error

Historical positional-only parameter violations

Before PEP 570 (Python 3.8), the convention for marking parameters as positional-only was to prefix their names with __ (double underscore) without a trailing __. Type checkers must support this historical mechanism.

Two violations are detected:

1. **PositionalOnlyAfterKeyword**: A __-prefixed positional-only parameter appears after a regular positional-or-keyword parameter in a function that does not use PEP 570 / syntax.

2. **KeywordPassedToPositionalOnly**: A __-prefixed keyword argument is passed at a call site (e.g. f(__x=3)), which is invalid because __x is positional-only and cannot be passed by keyword.

def f1(__x: int) -> None: ...

f1(__x=3)  # E — __x is positional-only

def f2(x: int, __y: int) -> None: ...  # E — __y after positional-or-keyword x

How to handle it

Every rule is on by default — strict is the default, not a cage. You can dial BSK-E0071 down per-file or per-path from your editor or pyproject.toml, or fix the code so it type-checks. See the Type System rules and the complete diagnostic reference.

Canonical URL: https://www.basilisk-python.dev/errors/BSK-E0071