Guard `subint_forkserver` stub against re-alias
Add `test_subint_forkserver_key_errors_cleanly` — a tn-tier regression guard that pins down the variant-2 reservation contract: the `'subint_forkserver'` key in `_spawn._methods` MUST raise `NotImplementedError` today, not silently dispatch to `main_thread_forkserver_proc`. The transient alias-state existed briefly during the rename (commit `57dae0e4`'s "Split forkserver backend into variant 1/2 mods" landed the alias; `5e83881f` flipped it to the stub). Without a guard, a future refactor could easily re-collapse the two keys back to a single coro and silently break the variant-1 / variant-2 contract. Also asserts the stub's error msg surfaces the two pointers an operator hitting it actually needs: - `'main_thread_forkserver'` — the working backend they prolly meant, - `'msgspec#1026'` — the upstream blocker that has to land before variant-2 can ship. (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-codesubint_forkserver_backend
parent
205382a39b
commit
cbdf1eb6db
|
|
@ -603,3 +603,50 @@ def test_orphaned_subactor_sigint_cleanup_DRAFT(
|
|||
proc.wait(timeout=2.0)
|
||||
except subprocess.TimeoutExpired:
|
||||
pass
|
||||
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
# regression guard: variant-2 (`subint_forkserver`) placeholder
|
||||
# MUST raise `NotImplementedError` today — guards against future
|
||||
# commits accidentally re-aliasing the key to the variant-1
|
||||
# coroutine (which was a transient state during the rename).
|
||||
# ----------------------------------------------------------------
|
||||
def test_subint_forkserver_key_errors_cleanly() -> None:
|
||||
'''
|
||||
`--spawn-backend=subint_forkserver` is reserved for the
|
||||
eventual variant-2 (subint-isolated child runtime)
|
||||
backend, gated on jcrist/msgspec#1026 unblocking PEP 684
|
||||
isolated-mode subints upstream.
|
||||
|
||||
Until that lands, the dispatch entry MUST raise
|
||||
`NotImplementedError` immediately rather than silently
|
||||
aliasing to `main_thread_forkserver_proc`. Verify the
|
||||
error message also surfaces both the working-backend
|
||||
pointer and the upstream-blocker ref so an operator
|
||||
arriving at the error has somewhere to go.
|
||||
|
||||
'''
|
||||
import asyncio
|
||||
from tractor.spawn._spawn import _methods
|
||||
|
||||
proc = _methods['subint_forkserver']
|
||||
with pytest.raises(NotImplementedError) as ei:
|
||||
# signature args match `main_thread_forkserver_proc`'s
|
||||
# — the stub raises before touching them so dummy
|
||||
# values are fine.
|
||||
asyncio.run(
|
||||
proc(
|
||||
'x', None, None, {}, [],
|
||||
('127.0.0.1', 0), {},
|
||||
)
|
||||
)
|
||||
|
||||
msg: str = str(ei.value)
|
||||
assert 'main_thread_forkserver' in msg, (
|
||||
f'stub error msg should redirect to the working '
|
||||
f'variant-1 backend; got: {msg!r}'
|
||||
)
|
||||
assert 'msgspec#1026' in msg or '1026' in msg, (
|
||||
f'stub error msg should reference the upstream '
|
||||
f'blocker (jcrist/msgspec#1026); got: {msg!r}'
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in New Issue