← board

N: async def / await are not implemented

Repro

async def go():
    return 1
print("ok")
pascal26:1: error: undefined variable (async)

async is being read as an identifier, so the keyword is absent from the grammar entirely — the failure is at the first token of the declaration, before anything about coroutines is reached.

Why this is a bug and not a divergence

Same charter clause as its sibling: if code works on CPython, it must work on NilPy. async def is Python 3.5 and is ordinary code in a large fraction of modern libraries.

Why it is filed separately from yield from, and lower

[[bug-n-yield-from-is-not-implemented]] is a missing form over machinery that exists — NilPy has generators. This one is not: async/await need a coroutine object, an awaitable protocol and an event loop to drive them, and the libraries that use async def reach for asyncio in the next line. A parser arm that accepts the syntax and produces something that cannot be awaited would be worse than the current clean refusal.

So the honest first step is probably a decision, not an implementation: how far into async does NilPy go — the syntax with a minimal driver, an asyncio subset, or nothing and a documented divergence? If the answer is "nothing", this becomes a rejected/ ticket citing the divergences doc, and that is a legitimate outcome. Whoever picks this up should expect to file decide-how-far-nilpy- goes-into-async before writing code, rather than to start with the parser.

Filed at 60 rather than its sibling's 65 for exactly that reason: the size is unknown and the first move is not typing.

How it was found

The same nine-probe suite that produced [[decide-nilpy-what-version-does-sys-version-info-claim]] (owner, 2026-08-30) — written to price a version claim, not to audit the language. Two of the nine failed far below the expected level; this is the second.

Relationship to the version claim

[[feature-n-sys-version-info-implementation-and-the-probe-suite]] pins this as refused, as a tripwire on the 3.9 claim rather than an endorsement of the gap.

Gate

If it is implemented: make test-nilpy green + self-host byte-identical + cross, plus a program that actually awaits something and observes the result — not merely one that parses. If it is rejected, no gate: the divergences doc entry is the deliverable.