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

shexjs / shex.js / 29407194496
75%

Build:
DEFAULT BRANCH: main
Ran 15 Jul 2026 10:12AM UTC
Jobs 1
Files 69
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

15 Jul 2026 10:10AM UTC coverage: 75.107% (+0.4%) from 74.721%
29407194496

push

github

Eric Prud'hommeaux
ThreadedMaterializer: split on frame advance, collect all accepts

A TripleConstraint whose variable lookup ADVANCES the binding-frame
cursor is a choice point, not a fait accompli: its continuation is
parked on a deferred queue (resumed oldest-first so the greedy leader
stays in front) while alternatives that can still consume from the
current frame -- other OneOf disjuncts, a repetition's exit arm --
explore first.  Advances also tally the unused bindings they skip
(cursor.sk).

Acceptance is no longer first-past-the-post: every accepting thread is
collected (deduplicated on which bindings it consumed, so variants
differing only in constant emissions collapse onto the most-emitting
one) and materialize() returns the most-consuming accept (ties: fewest
skipped, most emitted, discovery order).  materializer.accepts /
.chosen expose the alternatives; lastReport gains .alternatives and
.explorationTruncated.  New guards: exploreSteps bounds the search for
better accepts once one exists; always-synthesizable optionals
(constants, staticVar-only Map codes) compile without a skip arm so
they can't multiply the search space.  New debug events: advance (the
deferral) and accept.

The updated splits example (three {use, email|tel} contact frames)
now materializes identically under both disjunct orderings
(card-schema-phone-mbox pessimal / card-schema-mbox-phone optimal):
pairing frame 0's :use with frame 2's :tel loses to the thread that
consumed both emails.  The ambiguous example gets dedicated flat
schemas (contact-flat-schema, card-flat-schema) and now demonstrates a
genuine tie surfaced as two accepts.

Debugger surfacing:
- shexmap-debug: advance/accept event display, a t [N] command listing
  accepted+pending threads (t N prints a thread's partial graph), a
  post-mortem prompt after done, and "chose K of N viable
  materializations" on completion.
- shexmap-simple: #dbgThreads lists pending/accepted threads while
  stepping -- hover or click renders t... (continued)

2561 of 4001 branches covered (64.01%)

Branch coverage included in aggregate %.

205 of 222 new or added lines in 5 files covered. (92.34%)

1 existing line in 1 file now uncovered.

5830 of 7171 relevant lines covered (81.3%)

6218.58 hits per line

Uncovered Changes

Lines Coverage ∆ File
12
84.83
0.11% packages/extension-map/lib/ThreadedMaterializer.js
5
71.94
3.78% packages/extension-map/lib/ShExMapDebugRepl.js

Coverage Regressions

Lines Coverage ∆ File
1
84.83
0.11% packages/extension-map/lib/ThreadedMaterializer.js
Jobs
ID Job ID Ran Files Coverage
1 29407194496.1 15 Jul 2026 10:12AM UTC 69
75.11
GitHub Action Run
Source Files on build 29407194496
  • Tree
  • List 69
  • Changed 5
  • Source Changed 5
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #29407194496
  • 82f81423 on github
  • Prev Build on main (#29398606181)
  • Next Build on main (#29434305233)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc