Repository navigation
[Demo, not for merge] Solid TSX frontend checked by ReactiveScript - #21
Draft
devagrawal09 wants to merge 1 commit into
Draft
devagrawal09 wants to merge 1 commit into
devagrawal09 wants to merge 1 commit into
Conversation
devagrawal09
force-pushed
the
tsx-frontend-demo
branch
from
October 31, 2026 08:54
2d74222 to
f1db5a4
Compare
Collaborator
Author
|
Status: tracking A canary of this frontend against
Everything else, including the tracker demo, the stale-write example and the boundary contracts, passes unchanged. I'll repin this branch to current Separately, a differential fuzzer for this frontend (paired TSX/RX programs on five backends) found a case where the RX interpreter and the compiler disagree; I'll file it as its own issue. |
Copy frontend fe650c1 into tsx-frontend/ on fdbcad9, with in-tree dependency paths and ancestor/tree checks. No RX core changes. Includes the verified yield frontends and paired differential fuzzer. In-tree verify:subset: 53/53 tests; seeds 0-199: 179 matches, 21 listed upstream-only differences. Additional 500 seeds: 454 matches, 46 upstream interpreter/compiler differences; no frontend differences or generator errors.
devagrawal09
force-pushed
the
tsx-frontend-demo
branch
from
November 7, 2026 00:46
00f84fe to
cc1e6e9
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
Two small frontends: Solid TSX and solid-yield’s generator syntax. Both lower onto the existing RX AST; the RX checker, interpreter and compiler are unchanged. Accepted code must behave like native Solid; otherwise it is refused. This is the rule, not a claim that all Solid code is supported.
The same counter in three syntaxes
These fixtures produce identical canonical checker facts. Snapshotting a reactive read changes the facts, and the tests catch it. The rendered frames are
0 → 2 → 4.Solid TSX
solid-yield syntax
RX
The tracker
A store, filter, memos,
Show/For, a child callback, and an optimistic claim with commit or rollback:The same tracker in solid-yield syntax
The same tracker in RX
The TSX, yield and handwritten RX have identical canonical checker facts. Each frontend is checked on five legs: native Solid (the TSX twin), compiled and interpreted frontend output, and compiled and interpreted handwritten RX. All give the same eight frames:
The script does not retry a request: the reference harness keys flights by arguments, so retry behavior is not covered here.
Stale write-back caught in plain TSX
Native Solid loses the intervening update:
0 → 0 → 1 → 1. The frontend and handwritten RX get the same checker error.setLikes(n => n + 1)is accepted and gives0 → 0 → 1 → 2on native Solid and both RX backends.The differential fuzzer
Each seed emits paired TSX/RX programs and a click/flight script. Five legs compare native Solid, compiled TSX, interpreted TSX, compiled RX and interpreted RX. The 500-seed run found the interpreter/compiler disagreement filed as #33; the in-tree rerun gave 454 matches and 46 upstream interpreter/compiler differences, with no frontend differences or generator errors.
Scope and gate
Accepted: literal-seeded scalar signals and stores, synchronous memos and handlers, functional/draft writes, optimistic values, generator actions with try/catch, local components with inline props, JSX,
ShowandFor. Only the tested combinations are claimed.Refused: ordinary async callbacks, effects, object-valued signals, contexts, server helpers, async/derived stores, previous/deferred values, general setup helpers and cross-module component imports. Unsupported forms get a diagnostic rather than a rewrite.
The package was cut to only what is verified, including yield and the fuzzer.
npm run verify:subset: PASS, 53/53 tests, strict types and pin/boundary checks. Fuzz seeds 0–199: 179 matches, 21 listed upstream-only differences. New or unlisted differences fail the gate; listed differences do not count as full parity.Only
tsx-frontend/is added, on cleanfdbcad92with Solid rc.21. Setup:tsx-frontend/README.md. No RX core changes or patch queue.Question for Ryan
Is “lower into the existing AST, refuse whatever doesn’t match the host” a reasonable way to explore other frontends?