Keyboard shortcuts

Press or to navigate between chapters

Press ⌘K or Ctrl+K to search

Press ? to show this help

Press Esc to hide this help

TermDefinition
Blocking callA function call that performs synchronous I/O or waits, stalling the event loop (e.g., time.sleep(), requests.get())
Transitive blockingA function that is not itself blocking but calls a blocking function through one or more intermediary calls
Event loopThe asyncio mechanism that schedules and runs coroutines concurrently on a single thread
Call graphA directed graph where nodes represent functions and edges represent call relationships
SCC (Strongly Connected Component)A maximal set of nodes in a directed graph where every node is reachable from every other node (mutual recursion)
Phantom nodeA call graph node for an external symbol (e.g., time.sleep) with no source location, materialized from the blocking database when a resolved call references it
Escape hatchA pattern that correctly offloads blocking work to a thread pool (e.g., asyncio.to_thread(), loop.run_in_executor())
Intervention pointThe source location shown in a diagnostic – where the user should make a change
First-party codeCode in the user’s project (under configured source roots)
Third-party codeCode from external packages (stdlib, site-packages)
tyAstral’s Python type checker within the vendored Ruff monorepo, used through strato_ty_adapter for resolving method calls, properties, and dunder invocations
StratoTyFacadeStrato-owned compatibility boundary over patched vendored Ruff/ty APIs. It exposes semantic facts needed by graph construction without leaking ty internals into strato_core
SalsaA query-based incremental computation framework used by ty for in-memory memoization
PropagationThe process of spreading “blocking” status through the call graph from known blocking functions to their callers
Condensation graphA DAG formed by collapsing each SCC into a single node – enables single-pass topological propagation