• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

source-academy / frontend / 30153552189
43%

Build:
DEFAULT BRANCH: master
Ran 25 Jul 2026 09:57AM UTC
Jobs 1
Files 467
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

25 Jul 2026 09:54AM UTC coverage: 42.596% (+0.008%) from 42.588%
30153552189

push

github

web-flow
Stop tearing down a Conductor run before its pending work settles (#4176)

* Stop tearing down a Conductor run before its pending work settles

set_timeout(f, 500) in Py2JS was firing unreliably/silently: RESULT
was treated as an independent "the run is over" signal in
handleResults (added in #3998 as a fallback for a since-fixed
const-enum-erasure bug breaking the STATUS channel), even though
Py2JsEvaluatorBase.evaluateChunk sends its result synchronously right
after registering set_timeout's real timer - well before the
pending-work deferral from py-slang's own beginPendingWork/
endPendingWork fix ever got a chance to matter. That premature
RESULT-triggered interrupt then raced the existing 50ms drain window
against the real timer, explaining both "works sometimes around
50ms" and "fails at 500ms".

- handleResults no longer dispatches beginInterruptExecution on every
  result; completion is now driven solely by a genuine terminal
  STATUS (handleStatuses) or a manual interrupt (Stop / another Run).
  surfaceConductorError gained the same interrupt:boolean param so
  handleErrors' own errorChan path (a well-behaved sendError, which
  the runner will still follow with a real terminal status) doesn't
  short-circuit either - only its no-runner-left fallback paths
  (a rejected startEvaluator, or a setup failure) still interrupt
  immediately.
- Removed the execTime+10000 watchdog entirely. The Conductor
  framework gives every run its own dedicated Worker that Stop or
  starting another Run can always reclaim (confirmed: every run's
  saga terminates its own conduit unconditionally in its finally
  block), so there's no need for an arbitrary deadline to kill a
  legitimately long-running or indefinitely-waiting student program.
- handleStdout/handleResults/handleErrors now share a received-message
  counter; handleStatuses waits for it to reach a terminal status's
  new sentCount (source-academy/conductor's companion fix) before
  dispatching the inte... (continued)

2787 of 7575 branches covered (36.79%)

Branch coverage included in aggregate %.

0 of 27 new or added lines in 1 file covered. (0.0%)

3 existing lines in 1 file now uncovered.

6504 of 14237 relevant lines covered (45.68%)

28.63 hits per line

Uncovered Changes

Lines Coverage ∆ File
27
33.11
0.29% src/commons/sagas/WorkspaceSaga/helpers/evalCode.ts

Coverage Regressions

Lines Coverage ∆ File
3
33.11
0.29% src/commons/sagas/WorkspaceSaga/helpers/evalCode.ts
Jobs
ID Job ID Ran Files Coverage
1 30153552189.1 25 Jul 2026 09:57AM UTC 467
42.6
GitHub Action Run
Source Files on build 30153552189
  • Tree
  • List 467
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 55a24cf7 on github
  • Prev Build on master (#30146332373)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc