Skip to content

ariadne material: no time cap on the runs, and no endless wait when one stops - #149

Merged
transfix merged 1 commit into
mainfrom
fix/ariadne-material-cap
Nov 3, 2026
Merged

transfix merged 1 commit into
mainfrom
fix/ariadne-material-cap

Conversation

@transfix

@transfix transfix commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Fixes a hang in the material Ariadne port from #147.

The bug

  • The port runs both stories as async functions under pycvc_gl.ariadne.Host's default per-action cap (ariadne.limits.action_max_time, 30 s).
  • The scenario story takes 25-30 s on the Windows test box, so on a busy machine the cap stops its program.
  • Its status then never becomes done, and --headless / --offscreen wait forever.
  • Locally, test_material_runs_both_stories hung twice in full runs; both times the run was killed at the 1500 s timeout.
  • Reproduced on main (749a4fd): with the cap forced to 3 s, both runs are stopped (time_limit_exceeded) and the port never returns.

The fix

  • ariadne/material.py:
    • The runs have no time or step cap (RUN_LIMITS, 0 = none). Each story already ends on its own step budget: 4000 steps for the scenario, --swarm-steps for the swarm.
    • Each startup run reports back through run_program's done callback. A run that does not finish sets its status to failed: <why>, so the window's spinner stops.
    • With --headless or --offscreen, the port then ends with exit code 1 and prints the reason.
  • tests/test_ariadne_ports.py: test_material_returns_when_a_run_is_stopped replaces both stories with slow stand-ins and sets a 0.2 s cap. It checks that the port returns 1 within 30 s and names both runs. On the old code this test would hang.
  • ariadne/README.md: a line on the uncapped runs and the exit code.

Tests

…ne stops

The material port ran both stories under Host's default 30 s per-action cap.
The scenario story takes 25-30 s here, so on a busy machine the cap stopped it,
its status never became "done", and --headless / --offscreen waited forever
(test_material_runs_both_stories hung twice locally, killed at 1500 s).

The runs now have no cap (each story ends on its own step budget). Each startup
run reports back through run_program's done callback: a run that does not finish
sets its status to "failed: <why>" (the window's spinner stops), and headless or
offscreen ends with exit code 1 and the reason. A test stops slow stand-in runs
with a 0.2 s cap and checks the port returns 1 within 30 s.
@transfix
transfix merged commit 78ce0b0 into main Nov 3, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant