Skip to content

test: audit Solid client reactivity under native compilation - #9821

Closed
proggeramlug wants to merge 3 commits into
PerryTS:mainfrom
proggeramlug:test/4644-solid-reactivity-audit
Closed

test: audit Solid client reactivity under native compilation#9821
proggeramlug wants to merge 3 commits into
PerryTS:mainfrom
proggeramlug:test/4644-solid-reactivity-audit

Conversation

@proggeramlug

@proggeramlug proggeramlug commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Solid defaults to its non-reactive server build under Perry’s Node-compatible package resolution. Add a locked Solid 1.9.15 fixture that uses the existing package aliases to select the client core and store consistently, including their transitive imports.

The release package sweep now audits signals, memos, batching, dynamic dependencies, cleanup, store updates and keyed reconciliation, plus the real universal renderer’s ordering, node identity, text updates, and disposal over an in-memory host. The fixture checks the Node browser-condition oracle and rejects JavaScript fallback modules. This completes the initial compilePackages audit requested in #4644; the native UI adapter and Solid JSX transform remain open.

Validation:

  • Native fixture: 20 output lines match Node 26.5.1; 4 native modules, 0 JavaScript. The actual package harness reports 1 pass, 0 failures/skips.
  • Forced copying with seed 4644, rate 1 and protected from-space: identical output, 22 copying minors and 14,022 moved objects.
  • Adding PERRY_GC_VERIFY_EVACUATION exposes an existing stale-forwarded-pointer failure during store creation on main d36a1af. The README records the exact reproduction; the audit does not claim that this GC finding is resolved.
  • pre-tag-check --quick passes except public benchmark evidence freshness, already failing on the unchanged base inputs (recorded fingerprint bec8afb6…, current base 9507434b…). This PR changes none of those inputs. Shell syntax and diff checks pass.

No version bump.

Summary by CodeRabbit

  • Tests

    • Added comprehensive release validation for Solid’s reactivity, stores, and universal rendering.
    • Added coverage for signals, memos, batching, cleanup, reconciliation, list updates, rendering operations, and disposal.
    • Added expected-output comparisons, dependency configuration, and native compilation checks to identify behavioral or compatibility issues.
    • Added automated setup and execution for the release fixture, including verification that discovered modules compile without JavaScript modules.
  • Documentation

    • Added documentation covering the release-test fixture, supported scenarios, setup instructions, and verification findings.

@coderabbitai

coderabbitai Bot commented Sep 5, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Team

Run ID: 24d84216-e55b-4537-92e0-0c99d371dc0b

📥 Commits

Reviewing files that changed from the base of the PR and between 3e77f91 and 8815636.

📒 Files selected for processing (1)
  • tests/release/packages/solid-reactivity/README.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • tests/release/packages/solid-reactivity/README.md

Included review availability: Your plan provides up to 8 included reviews per hour; 2 remain after this review.


📝 Walkthrough

Walkthrough

The PR adds a Solid 1.9.15 release fixture. It tests reactivity, stores, universal renderer operations, output parity, and native compilation.

Changes

Solid reactivity release fixture

Layer / File(s) Summary
Fixture setup and execution
tests/release/packages/solid-reactivity/package.json, tests/release/packages/solid-reactivity/fixture.sh, tests/release/packages/solid-reactivity/README.md, tests/release/packages/solid-reactivity/.gitignore
Defines the Solid 1.9.15 fixture, browser-conditioned oracle run, output comparison, native compilation check, package aliases, documentation, moving-GC finding, and ignored artifacts.
Signals, dependencies, and stores
tests/release/packages/solid-reactivity/entry.ts, tests/release/packages/solid-reactivity/expected.txt
Tests signal lifecycles, dependency tracking, cleanup, store updates, produce, reconcile, unwrap, identity, and disposal.
Universal renderer and keyed rows
tests/release/packages/solid-reactivity/entry.ts, tests/release/packages/solid-reactivity/expected.txt
Tests in-memory renderer operations, keyed row movement and replacement, text updates, cleanup, disposal, empty lists, and invalid operations.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Merge Risk: ⚪ Minimal · up to 88156

This adds a locked Solid reactivity fixture and associated verification coverage. No current merge-blocking risk is established.

Sequence Diagram(s)

sequenceDiagram
  participant FixtureScript as fixture.sh
  participant NodeOracle as Node oracle
  participant PerryCompiler as Perry compiler
  participant OutputCheck as output comparison
  FixtureScript->>NodeOracle: run browser-conditioned fixture
  NodeOracle->>OutputCheck: produce runtime output
  FixtureScript->>OutputCheck: compare output with expected.txt
  FixtureScript->>PerryCompiler: compile with cache bypassed
  PerryCompiler->>FixtureScript: report discovered native modules
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 2 files. (1 skipped: 1 … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: auditing Solid client reactivity under native compilation.
Description check ✅ Passed The description clearly explains the fixture, audit scope, validation results, known GC finding, related issue, and out-of-scope work. It is sufficiently complete despite not reproducing every templat…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 2 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@proggeramlug

Copy link
Copy Markdown
Contributor Author

Landed on main via merge train #9875. Validated as a tree: 64/64 lint gates, and perry-runtime/codegen/hir/stdlib all green (5,891 tests, 0 failures). Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant