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

solidjs / solid / 35838850243
73%
main: 89%

Build:
Build:
LAST BUILD BRANCH: codes-source-names
DEFAULT BRANCH: main
Ran 23 Sep 2026 08:50AM UTC
Jobs 1
Files 8
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

23 Sep 2026 08:44AM UTC coverage: 73.766%. Remained the same
35838850243

push

github

web-flow
fix(compiler): scope every hole that can build JSX, not only props.children (#3567) (#3599)

JSX passed through a prop other than `children` (a layout's `header`, an
object of slots, a context getter) hydrated with permuted keys whenever an
id-allocating hole followed it in the same template. Both compilers' hole-
scope predicate treated only `.children` member reads as able to build
hydratable content, so `{props.header}` compiled to a transparent insert:
the server reserved the scoped sibling's slot at registration (ssr-arg
evaluation) and resolved the header thunk later inside the `ssr()` walk,
while the client allocated in statement order. Same id count, permuted —
the server elements stayed unclaimed and the handler bound to a detached
copy.

The predicate is now a denylist: a dynamic hole takes a scope unless its
value is provably a primitive (literals, template literals, unary, binary,
update and private-`in` expressions). Property reads of any name, optional
calls, the left operand of `||`/`??`, sequence and assignment expressions,
and array literals with hydratable entries are scoped, identically in the
Babel plugin and the native compiler. The Babel dom generate also
classified the hole after `transformNode` had rewritten `a && b` into a
memo ternary; it now classifies the source expression like the ssr
generate. Cost: a member-read text hole reserves one id slot on both sides,
the same as `{count()}` always has.

Verification: seven parity-harness scenarios, compiler pins and Babel-vs-
Oxc parity probes, plus a 22-scenario server-render → hydrate regression
pair (test/harness/slot-hydration-3567.tsx) that asserts zero hydration
warnings, every server `_hk` element claimed, and that a click on the
server-rendered button reaches the handler. Known remaining gap, pinned as
`test.fails`: a bare identifier bound to a function returning JSX is still
unscoped on both sides and misaligns when a scoped hole follows; a dev-only
"unscoped hole moved t... (continued)

592 of 865 branches covered (68.44%)

Branch coverage included in aggregate %.

873 of 1121 relevant lines covered (77.88%)

19.75 hits per line

Jobs
ID Job ID Ran Files Coverage
1 35838850243.1 23 Sep 2026 08:50AM UTC 8
73.77
GitHub Action Run
Source Files on build 35838850243
  • Tree
  • List 8
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #35838850243
  • 45407d16 on github
  • Prev Build on next (#35835729746)
  • Next Build on next (#35842357635)
  • 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