`build_candidates(parsed, key_pc, mode, octave, voicing, explicit_inversion)` in `src/banjo/voice_leading.py` takes a positional boolean as its last arg. Boolean positionals are an anti-pattern at call sites: `build_candidates(parsed, key_pc, mode, octave, voicing, True)` is opaque.
Today the only call site uses keyword form, so this is fine in practice — but a one-character change makes it unambiguous forever:
```python
def build_candidates(
parsed, key_pc, mode, octave, voicing, *, explicit_inversion,
) -> list[list[int]]:
```
Flagged in the Task 3 code review.
`build_candidates(parsed, key_pc, mode, octave, voicing, explicit_inversion)` in `src/banjo/voice_leading.py` takes a positional boolean as its last arg. Boolean positionals are an anti-pattern at call sites: `build_candidates(parsed, key_pc, mode, octave, voicing, True)` is opaque.
Today the only call site uses keyword form, so this is fine in practice — but a one-character change makes it unambiguous forever:
```python
def build_candidates(
parsed, key_pc, mode, octave, voicing, *, explicit_inversion,
) -> list[list[int]]:
```
Flagged in the Task 3 code review.