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

source-academy / js-slang / 35590600188
86%

Build:
DEFAULT BRANCH: master
Ran 21 Sep 2026 10:54AM UTC
Jobs 1
Files 176
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

21 Sep 2026 10:47AM UTC coverage: 78.976% (+0.2%) from 78.792%
35590600188

push

github

web-flow
feat(conductor): CSE machine evaluators for Source §3–§4 (#2061)

* feat(conductor): CSE machine evaluators for Source §3-§4

Implements #2060. SourceCseEvaluator3/4 drive js-slang's CSE machine and
ship one CseSnapshot per step to the host's CSE tab.

§3/§4 only: the frontend gates the tab at chapter >= SOURCE_3
(ApplicationTypes.ts:245) and, under Conductor, shows it when the
language offers an evaluator carrying EvaluatorCapability.CSE. The
evaluator is hidden from the dropdown and auto-selected when the tab
opens, like the stepper.

The machine stays synchronous. In js-slang the CSE machine is the
visualiser, not the workhorse, so unlike py-slang — whose CSE machine
is its primary engine and is async throughout — nothing here needs to
await the host. generateCSEMachineStateStream is a plain function* and
is used as one.

Only the serialiser is new: the plugin trio in source-academy/plugins is
264 LOC of pure transport, and the renderer stays in the frontend. For
Source this is a round trip — serialise js-slang state, then have the
host's CseSnapshotAdapter rebuild js-slang-shaped objects for the same
renderer the non-conductor tab uses — so the adapter, not the protocol
types, is the real contract. Three conventions it depends on, all easy
to get silently wrong, are documented in serialize.ts: control and stash
are top-first, InstrType is a string enum passed through untouched, and
ENVIRONMENT instructions are matched on displayText rather than on
instrType.

Deliberately unlike #2004's serialiser:
- arrays serialise to full depth, with cycle detection, rather than
  truncating at depth 2 (which silently flattens ordinary list programs)
- steps are not deduplicated by rendered text: two steps can look
  identical while differing in the environments, and collapsing them
  desynchronises the step counter from the machine's own numbering
- closures send the machine's own rendering as displayValue, so the
  stash reads identically to the non-conductor... (continued)

3325 of 4424 branches covered (75.16%)

Branch coverage included in aggregate %.

178 of 194 new or added lines in 5 files covered. (91.75%)

7317 of 9051 relevant lines covered (80.84%)

178676.11 hits per line

Uncovered Changes

Lines Coverage ∆ File
9
70.91
src/conductor/SourceCseEvaluator.ts
3
90.83
src/conductor/cse/serialize.ts
2
93.33
src/conductor/cse/collectSnapshots.ts
1
72.22
src/conductor/SourceEvaluator.ts
1
87.5
src/conductor/cse/runConfig.ts
Jobs
ID Job ID Ran Files Coverage
1 35590600188.1 21 Sep 2026 10:53AM UTC 176
78.98
GitHub Action Run
Source Files on build 35590600188
  • Tree
  • List 176
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 457fc36f on github
  • Prev Build on master (#35574332389)
  • Next Build on master (#35596248067)
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