Repository navigation
Conversation
🦋 Changeset detectedLatest commit: 73f9836 The changes in this PR will be included in the next version bump. This PR includes changesets to release 14 packages
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 |
Size (brotli, eager entry chunk)
|
Coverage Report for CI Build 39002680073Coverage remained the same at 77.554%Details
Uncovered ChangesNo uncovered changes found. Coverage RegressionsNo coverage regressions found. Coverage Stats
💛 - Coveralls |
Merging this PR will not alter performance
|
An effect whose apply half takes no argument is reading something other than its compute output (layout, time, a ref), so a write that matches the compute output is not a copy and its tears stay advisory however often they repeat. Effects that take the value are judged as before: boolean mirrors and boolean-keyed derivations still warn. The sole-writer message offers the memo-or-measuring fork instead of asserting derived state. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013UCcDHG5TmofXFqENFHC2b
45e6d71 to
73f9836
Compare
|
CodSpeed is the only red check. It flags one benchmark,
No code fix applies. I'm re-running the benchmark job once. If it stays red, the regression needs acknowledging on CodSpeed. Generated by Claude Code |
Requested by Ryan · project thread
Summary
Reported by a library author porting Base UI to Solid 2. The Select popup has a fallback that can only be measured after render:
Before: near the screen edge, the measured
trueequals the compute outputopen === true. The detector read that as a copy and warned on the second open with "readopenwherealignFallbackis read and delete the effect", which is wrong. Without the copy verdict, the advisory still escalated to a console warning after 3 repeats, saying "it is derived state, make it a memo". Apps using popups flooded the console.After: an effect whose apply half takes no argument is never treated as copying its compute output, and its tears stay
info(structured channel only) however often they repeat. An effect that takes the value is judged exactly as onnext. So a boolean mirror likev => setOpen(v)and a boolean-keyed derivation likev => setLabel(v ? "Close" : "Open")still warn.How:
_effectFn.length) is the signal. An apply half that takes no argument cannot be copying its compute output. If it writes, it's writing from outside the graph: layout, time or a ref. A signal read there is already STRICT_READ's job. An effect node without_effectFnkeeps the old behaviour.reactivity-diagnosticsskill's EFFECT_RELAY_TEAR section is updated to match. It also notes that a measuring effect that takes its value (i => setLeft(offsets[i])with stable layout) still warns, so drop the unused parameter. The solid-docs diagnostics page picks this up on the nextsync:diagnostics.This revision replaces the first one, which exempted booleans and required 3 distinct inputs. The merge-train review found that the first version silenced real boolean mirrors. The size-cap raise is dropped with it.
How did you test this change?
pnpm vitest run tests/attribution-relay-tear.test.tsinpackages/signals: 12 pass. The new tests cover:info, with no console warning)"Open"/"Close"derivation, both of which still warnpackages/signalssuite afterpnpm build: 311 files and 5342 tests pass,dist-artifactsincluded.next@ f3973ea: minified 88,235 -> 88,181 B (−54 B). Brotli 29,462 -> 29,492 B shows up as a gate warning within the minified allowance. No cap changes.🤖 Generated with Claude Code
https://claude.ai/code/session_013UCcDHG5TmofXFqENFHC2b