Routing rules

Updated Oct 08, 2026

The router asks a short question list and resolves to a single skill:

  • Typing or public-surface question → python-types-and-apis.
  • Exception or logging question → python-errors-and-logging.
  • Decorator, descriptor, context manager, or metaclass → python-abstractions.
  • Iterator or generator refactor → python-iterators-and-generators.
  • Container choice (msgspec, dataclass, TypedDict) → python-data-shapes.
  • Concurrency or subinterpreter question → python-concurrency.
  • Named test, finite parameter table, fixture, or plugin → python-testing.
  • Cheap invariant over a broad input space → hypothesis.
  • Verification escalation or adversary selection → python-verification, then one primary deep dive from hypothesis, crosshair, or mutmut.
  • Skylos dead-code findings, runtime callers, or entrypoint drift → skylos.
  • Scanner selection, clones, profiling → python-quality-tools.
  • Ruff configuration, defaults, suppression, or upgrade → ruff-016.

Pairing rules:

  • Web or worker boundaries usually pair python-errors-and-logging with python-concurrency or python-data-shapes.
  • Library API work usually pairs python-types-and-apis with python-data-shapes (data-shaped surface) or python-abstractions (behaviour-shaped surface).
  • A clear lightweight invariant goes straight to hypothesis. python-verification chooses an escalation path when the right adversary is unclear.
  • mutmut may pair with any testing style because it audits the suite rather than generating production inputs.