Skip to content

fix(signals): the store's descriptor trap subscribes to the key's presence node - #3530

Merged
ryansolid merged 1 commit into
nextfrom
fix/store-descriptor-trap
Sep 18, 2026
Merged

ryansolid merged 1 commit into
nextfrom
fix/store-descriptor-trap

Conversation

@ryansolid

Copy link
Copy Markdown
Member

Follow-up to #3523's structural oracle states.

Object.getOwnPropertyDescriptor on a store read no node: a render effect that inspected a key through a descriptor never re-ran for an optimistic add or delete, and an isPending() probe over it witnessed nothing. Three cells were pinned as violation(...) in #3523; this flips them to rules.

The trap now has in's reactive prelude — affects() / isPending() witness, the projection firewall gate for context-free reads, and a tracked read of the presence node (getHasNode, born from the source's presence as has births it). The value it reports is unchanged (visibleDescriptor).

check result
signals suite 3447 pass; the three descriptor cells now rule(...)
posture matrix (1184) unchanged vs next (no pre-existing reader kind there)
solid-js / web 626 pass / same 25 pre-existing local failures as origin/next
size +3 B brotli on +createStore; cap ratcheted

Left pinned: latest() over a held add sees the parked value but not the parked structure (three channels) — a separate latest() tunnel for presence/key-set nodes.

Made with Cursor

…sence node

Object.getOwnPropertyDescriptor read no node: a render effect inspecting a
key through it never re-ran for an optimistic add or delete, and an
isPending() probe over it witnessed nothing (structural oracle,
2026-09-17 — three cells pinned as violations in #3523). The trap now has
`in`'s reactive prelude: affects()/isPending() witness, the projection
firewall gate for context-free reads, and a tracked read of the presence
node (getHasNode, born from the source's presence as `has` births it).

The three descriptor cells flip from violation to rule; suite green; the
1184-cell posture matrix unchanged (it has no pre-existing reader); +3 B
brotli on the +createStore scenario.

Co-authored-by: Claude via Cursor <noreply@cursor.com>
@changeset-bot

changeset-bot Bot commented Sep 18, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 765a656

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 11 packages
Name Type
@solidjs/signals Patch
test-integration Patch
@solidjs/web Patch
@solidjs/babel-plugin Patch
@solidjs/compiler Patch
@solidjs/diagnostics Patch
@solidjs/element Patch
@solidjs/h Patch
@solidjs/html Patch
solid-js Patch
@solidjs/universal Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coveralls

Copy link
Copy Markdown

Coverage Report for CI Build 35310385914

Coverage remained the same at 71.304%

Details

  • Coverage remained the same as the base build.
  • Patch coverage: No coverable lines changed in this PR.
  • No coverage regressions found.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 1035
Covered Lines: 783
Line Coverage: 75.65%
Relevant Branches: 798
Covered Branches: 524
Branch Coverage: 65.66%
Branches in Coverage %: Yes
Coverage Strength: 15.04 hits per line

💛 - Coveralls

@ryansolid
ryansolid merged commit add262b into next Sep 18, 2026
6 checks passed
@codspeed

codspeed Bot commented Sep 18, 2026

Copy link
Copy Markdown

Merging this PR will degrade performance by 16.52%

⚠️ Different runtime environments detected

Some benchmarks with significant performance changes were compared across different runtime environments,
which may affect the accuracy of the results.

Open the report in CodSpeed to investigate

❌ 1 regressed benchmark
✅ 171 untouched benchmarks
⏩ 3 skipped benchmarks1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Benchmark BASE HEAD Efficiency
readAllowed 26.3 µs 31.5 µs -16.52%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing fix/store-descriptor-trap (765a656) with next (e1e9f8c)2

Open in CodSpeed

Footnotes

  1. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

  2. No successful run was found on next (765a656) during the generation of this report, so e1e9f8c was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

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.

2 participants