tractor/ai/prompt-io/claude/20260702T161624Z_65bf9df5_p...

3.7 KiB
Raw Blame History

Raw output — gh #474 start_or_cancel() test suite

Generated test code

git diff main..wkt/start_or_cancel_tests_474 -- tests/trionics/test_taskc.py

Prose summary of the generated module (tests/trionics/test_taskc.py):

  • module docstring framing the trio.Nursery.start() startup-cancellation wart, the wrappers repair, and the intent that use_start_or_cancel=False params double as upstream-trio wart-documentation (break on a trio upgrade → upstream may have shipped porcelain, re-audit the wrapper); cites gh #474 / PR #464 and moddens progman.open_wks() as the source use case.
  • shared children: absorbs_cancel_pre_started() (the graceful-teardown cancel-absorber which triggers the lossy RTE path) + raise_val_err() (fast-erroring sibling).
  • test_sibling_err_not_masked_by_startup_rte (parametrized use_start_or_cancel): asserts eg contains exactly one ValueError and, wrapper-case, NO residual RTE (eg.split(ValueError) remainder is None); bare-case, the residual RTE carries trios exact “child exited without calling” wording.
  • test_pure_oob_cancel_not_morphed_to_rte (parametrized): wrapper-case runs clean and asserts cs.cancelled_caught; bare-case asserts the eg-wrapped RTE.
  • test_genuine_startup_rte_still_raised (parametrized): no-cancel protocol bug → RTE with trios wording from both call forms.
  • test_childs_own_rte_never_demoted_to_cancel (parametrized rte_arg in 'never got started!', 1234): child cancels the ambient scope then raises its own RTE synchronously (no checkpoint between → deterministically under-cancellation at catch time); asserts the RTE survives with args[0] intact.
  • test_started_value_and_args_passthru: .started() value, positional args and the name= kwarg (via trio.lowlevel.current_task().name) all forward.

Non-code output (verbatim highlights)

Behaviour probe (trio 0.29, scratchpad scripts) — the decision basis for the test shapes:

== B-sibling-err use_soc=False
  start raised: RuntimeError('child exited without
    calling task_status.started()')
  top-level: ExceptionGroup([ValueError('sibling blew
    up!'), RuntimeError('child exited without calling
    task_status.started()')])
== B-cs-cancel use_soc=False
  top-level: ExceptionGroup([RuntimeError('child
    exited without calling task_status.started()')])
== B-sibling-err use_soc=True
  start raised: Cancelled()
  top-level: ExceptionGroup([ValueError('sibling blew
    up!')])
== B-cs-cancel use_soc=True
  start raised: Cancelled()
  top-level: clean return
== own-rte-under-cancel (both) -> RTE('never got
  started!') propagates unchanged

Key finding: with a WELL-BEHAVED (non-absorbing) child an OOB ancestor cancel surfaces Cancelled directly from .start() on trio 0.29 — the lossy RTE requires the child to absorb its cancel pre-.started(), which is what moddens open_from_wks teardown did. Trios nursery-exit wait defers cancel delivery to children, so all tested shapes are deterministic (0 flakes / 50 runs).

Mutation verification:

mutation 1 (checkpoint_if_cancelled removed):
  FAILED test_sibling_err_not_masked_by_startup_rte[True]
  FAILED test_pure_oob_cancel_not_morphed_to_rte[True]
mutation 2 (guard relaxed to 'started' substring,
            isinstance dropped):
  FAILED test_childs_own_rte_never_demoted_to_cancel[never got started!]
  FAILED test_childs_own_rte_never_demoted_to_cancel[1234]

Final runs:

tests/trionics/test_taskc.py: 9 passed in 0.03s
hammer: 0/50 runs failed
tests/trionics/ + tests/test_trioisms.py:
  23 passed, 5 xfailed in 3.02s