Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
161a8d9
fix(signals,web): patch-channel round-6 hardening
ryansolid Aug 28, 2026
ec506d3
feat(compiler,babel-plugin): patch mode default-on
ryansolid Aug 28, 2026
db84cc6
test: invariant harness for re-audit 7 (RED — fixes follow)
ryansolid Aug 28, 2026
d85a502
fix(signals,web): re-audit-7 runtime findings (P1-2/3/5/6, P2-2/3/9)
ryansolid Aug 28, 2026
77711e5
fix(compilers,signals,web,universal): static read manifests close P1-…
ryansolid Aug 29, 2026
ee1d411
fix: re-audit-8 findings (8/8), harness-first
ryansolid Aug 29, 2026
f04c280
fix: re-audit-9 findings (11/11), harness-first
ryansolid Aug 29, 2026
9967687
experiment: node-driven patch delivery prototype (flag-gated)
ryansolid Aug 29, 2026
8e1801f
experiment(WIP): node-delivery port — delivery effect in registerPatch
ryansolid Aug 29, 2026
df615ff
experiment(WIP): node-delivery triage — 24 red → 11, four root causes…
ryansolid Aug 29, 2026
53311df
experiment: node-delivery port GREEN on the full channel harness (46/46)
ryansolid Aug 29, 2026
b7cdeda
experiment: node-delivery port SEMANTICALLY COMPLETE — all suites green
ryansolid Aug 29, 2026
0c70108
experiment: node-delivery optimization pass — PARITY CONFIRMED + dele…
ryansolid Aug 29, 2026
a3e1156
experiment: node-delivery mount pass — lazy machinery, detached primi…
ryansolid Aug 30, 2026
109eb5d
docs: refine §22 unmount finding — write-barrier tax during concurren…
ryansolid Aug 31, 2026
59978a3
docs: audit brief round 10 — node-delivery architecture, new seams, b…
ryansolid Aug 31, 2026
4ffb714
fix: round-10 audit (7/7 P1 + 3 P2), harness-first — emission central…
ryansolid Aug 31, 2026
caf6c14
fix: round-10.5 audit (6 variants + cleanup) — dedup yields to the sc…
ryansolid Aug 31, 2026
7dad826
fix: round-10.6 audit — flat-alias currency, hold-aware demotion, txn…
ryansolid Aug 31, 2026
4b66199
fix: round-10.7 audit — canonical stamps, held-fanout isolation, unbi…
ryansolid Aug 31, 2026
cd8439b
fix: round-10.8 audit (final) — scheduled demotion lifecycle closed
ryansolid Aug 31, 2026
5ef1aa3
perf(size): patch-channel consolidation pass — recording proxy delete…
ryansolid Aug 31, 2026
5a54d9f
dev: channel-side HUGE_FAN_OUT/WIDE_WRITE twins — patch keeps fanout …
ryansolid Aug 31, 2026
2f1017c
dev: attribution cause chains through patch deliveries
ryansolid Aug 31, 2026
df8c216
fix: round-10.9 audit — demotion computes read own envelopes, failed …
ryansolid Aug 31, 2026
1926031
fix: round-10.10 audit — single-read envelopes, symbol manifests, obs…
ryansolid Aug 31, 2026
d08c236
fix: round-10.11 audit — demotion bubbles at the primitive, linear en…
ryansolid Aug 31, 2026
22304f3
chore: rebase reconciliation — restore #3123 optimistic landing seman…
ryansolid Aug 31, 2026
5e6d94d
dev: round-10.12 observability — stable structural keys, synthetic ev…
ryansolid Aug 31, 2026
4095172
fix: round-10.13 audit — structural hold parity + held-window registr…
ryansolid Aug 31, 2026
06bd579
refactor: patch-channel consolidation (size pass 2)
ryansolid Aug 31, 2026
715fcfd
chore: rebase onto next (#3123 landed) — restore upstream budget notes
ryansolid Aug 31, 2026
d326498
fix: patch-channel integration with #3123 landing consumption (the tw…
ryansolid Aug 31, 2026
6f0c82e
fix: a continuation reckoning notifies the channel once, with the re-…
ryansolid Aug 31, 2026
9279d15
test: pin the settle-drain reckoning's channel parity (fourth posture)
ryansolid Aug 31, 2026
53b0f46
fix: structural-audit round — sweep mechanics, visible-view resyncs, …
ryansolid Sep 1, 2026
2881e7f
test: pin for-then-siblings with a DRIVEN list (hydration parity matrix)
ryansolid Sep 1, 2026
39163b0
fix: structural-audit follow-up — slot stamps, landing drain-resoluti…
ryansolid Sep 1, 2026
1876d11
fix: reconcile the patch channel with the #3164 fold ruling
ryansolid Sep 1, 2026
292afdf
perf: gate eager parent-slot repair on patches existing (CodSpeed -11%)
ryansolid Sep 1, 2026
ba5b75f
fix: fold-audit round — per-index slot defers, drain-end sweep, revea…
ryansolid Sep 1, 2026
f3e24d4
refactor: structural version chain — closes the sweep/watermark findi…
ryansolid Sep 1, 2026
18bacdd
fix: fold audit 2 — transition-aware version init, one-channel reveals
ryansolid Sep 1, 2026
f52e97b
docs: perf verification — driver restored to octane-class through the…
ryansolid Sep 1, 2026
9ce370b
docs: ship ruling — as-is pending final audit; keyed-fn/shallow-keyed…
ryansolid Sep 1, 2026
0f17fc5
fix: fold audit 3 — held-queue av init, reorder classification, revea…
ryansolid Sep 1, 2026
71870b4
chore: changeset for fold audit 3
ryansolid Sep 1, 2026
a4a3766
fix: fold audit 4 — eager visible-version, proven epoch reveal marks,…
ryansolid Sep 1, 2026
3f73673
fix: fold audit 5 — primitive rows retain by value in structural matc…
ryansolid Sep 1, 2026
4353313
chore: rebase onto next (#3169-#3176 + fold-ledger relocation) — two …
ryansolid Sep 1, 2026
f99a767
chore: rebase onto until-flip entanglement + CONFIG_HELD_TRUTH unific…
ryansolid Sep 1, 2026
c48aed8
chore: rebase onto canonical entanglement push — boundary-wobble head…
ryansolid Sep 1, 2026
e0c818f
fix(signals): patch channel fold audit 6 — dn override lifecycle, mat…
ryansolid Sep 1, 2026
13cb445
fix(web): patch driver rebuild check agrees with the matcher's SameVa…
ryansolid Sep 1, 2026
d6e9484
test(signals): pin the until()-entanglement patch tear (held #3091 ou…
ryansolid Sep 1, 2026
554520c
fix(signals): entangle-tear consolidation pass 1 — visibility decisio…
ryansolid Sep 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/entangle-tear-consolidation-pass-1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Entangle-tear consolidation pass 1: untracked store reads now serve committed truth for held-truth-masked nodes (the until()-flip steal parks node truth past the flush, so the backing is ahead of the committed world — tracked and untracked readers previously disagreed); patch-channel deliveries and structural applies defer on parked truth, riding the holding transaction's commit via the holder named by the nodes' own `_transition` — one seam decision that follows merges and steals with no scheduler-specific mirrors.
5 changes: 5 additions & 0 deletions .changeset/fix-eager-repair-patch-gate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Gate the eager adoption parent-slot repair on patch consumers existing: ancestor committed raws are only handed to patch consumers, and in patch-less apps the ungated repair's privatization cascade re-cloned every freshly adopted interior backing per reconcile (an extra tree copy) while the identity swaps turned downstream equality gates into keyset/deep bump storms — an 11% CodSpeed regression on the listened-paths reconcile bench with zero channels registered. Patch-mode behavior is unchanged.
5 changes: 5 additions & 0 deletions .changeset/fix-patch-channel-3123-landing-integration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Integrate the patch channel with #3123's landing-consumption semantics: an equal landing no longer flashes committed state through value patches (the raw payload fast path is gated off optimistic families — deliveries take the override-composing proxy read, classic-effect parity), and a contradicting landing now notifies authoritatively — one regular-timed value delivery coalesced with the adoption's emission, plus a row-ops resync at the landing so driven lists learn the baseline flipped. A CONTINUATION landing's reckoning (wipe + retained-edit replay) notifies as one: per-edit row-ops frames are suppressed during replay and the landing emission carries the re-derived composed view, so a driven list never sees the bare landed base or intermediate replay drafts that classic readers never render.
16 changes: 16 additions & 0 deletions .changeset/fix-patch-channel-audit7-runtime.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
"@solidjs/signals": patch
"@solidjs/web": patch
---

Re-audit-7 runtime hardening, invariant-tested: adoption demotion probes the
incoming backing statelessly (sticky scan flags no longer trusted across
swaps), prototype-accessor records (class instances) reject patch admission,
normal and optimistic queues coalesce on separate stamps, structural queue
entries snapshot their consumers at emission while value entries resolve the
live list at drain (a consumer list recreated during a held transition or
merge receives the commit exactly once, effect parity), released entries
from independently-settling transitions coalesce per channel, shallow slot
rebuilds are build-before-destroy (a throwing replacement leaves the old row
mounted AND live), and a hydration claim failure surrenders the list's
entire server region including trailing unclaimed rows.
17 changes: 17 additions & 0 deletions .changeset/fix-patch-channel-audit8.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
"@solidjs/signals": patch
"@solidjs/web": patch
"@solidjs/babel-plugin": patch
"@solidjs/compiler": patch
"@solidjs/universal": patch
---

Re-audit-8 hardening: manifest deep-path probing at admission (nested
getters present at registration take the tracked fallback), committed-view
initial applies, structural operations bind their captured records via
patchProxyFor, tentative reconciles bubble ancestors at lane timing with
settle-held twins, generation-stamped drains eliminate duplicate applies to
freshly mounted consumers, forced ancestor bubbles coalesce per batch,
non-integer numeric keys are statically patch-ineligible in both compilers,
and createRenderer exports/documents rowProof plus an untracked commit
phase for its patchDriver.
17 changes: 17 additions & 0 deletions .changeset/fix-patch-channel-audit9.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
"@solidjs/signals": patch
"@solidjs/web": patch
"@solidjs/babel-plugin": patch
"@solidjs/compiler": patch
"@solidjs/universal": patch
---

Re-audit-9 hardening: committed-visible skip semantics (mounts are never
stranded stale; held/tentative payloads always deliver), held-view and
optimistic-view initial applies, write-free manifest-read effect fallback
(web + universal), tentative reconciles emit their view on the record's own
channel with immediate lane-timed accessor demotion, per-queue forced-stamp
clearing with merge repair, isWrappable bind guards, server-entry
patchDriver/rowProof exports, function-intermediate deep probes,
safe-integer-only manifest keys, and unchanged reconciles no longer force
ancestor re-applies.
5 changes: 5 additions & 0 deletions .changeset/fix-patch-channel-round10-10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Round-10.10 audit fixes: demotion envelope computes read each step exactly once (deep roots no longer double-read, so unstable getters track the value they commit) and descend through functions (accessor carriers); iterable manifests preserve symbol keys instead of stringifying them; the channel WIDE_WRITE twin moved into the attribution engine (same thresholds, memo, and metadata as graph wide-writes); ancestor bubble stamps carry the originating child as their cause; and structural row-ops/slot channels fire the same registration fan-out milestones.
5 changes: 5 additions & 0 deletions .changeset/fix-patch-channel-round10-11.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Round-10.11 audit fixes: demotion bubbles ancestors from inside demoteToEffects itself (a fold on a previously-demoted child with persistent delivery machinery hit an empty demote and froze ancestor patches — primitive-owned bubbling closes every such seam); envelope traversal uses a root-aligned deep index (linear, built once per interned manifest); coalesced ancestor bumps append every originating child to the pending stamp's causes; and structural row-ops/slot dispatches ride the same engine wide-write policy (consumer-list memo keys).
5 changes: 5 additions & 0 deletions .changeset/fix-patch-channel-round10-13.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Round-10.13 audit fixes (structural lifecycle): row-ops/slot dispatches defer into collapsed owner queues per entry and re-derive live state at release via the resync forms (baseline-relative ops would be stale), and consumers registered during a held structural commit receive the settle-time live resync instead of staying permanently stale — never the baseline-relative ops (round-7 exclusion refined, not reversed). The two #3123-coupled landing findings are deliberately deferred while that work settles upstream.
6 changes: 6 additions & 0 deletions .changeset/fix-patch-channel-round10-5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@solidjs/signals": patch
"@solidjs/web": patch
---

Round-10.5 audit fixes: the delivery pending-dedup is transition-aware (scheduler owns merge bookkeeping — every bump under a transition reaches the signal), deep-path admission currency-probes aliased raw slots, payload-less (bubbled) deliveries re-probe the ancestor's deep manifest and demote getters, demoted entries are severed against stale held callbacks, list resyncs rebuild across family changes, shallow swaps keep raw retention, and optimistic revert sites no longer double-bubble ancestors.
6 changes: 6 additions & 0 deletions .changeset/fix-patch-channel-round10-6.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@solidjs/signals": patch
"@solidjs/web": patch
---

Round-10.6 audit fixes: direct object-valued manifest roots are alias-currency-probed (admission declines, payload-less deliveries demote), demotion re-drives schedule through held owner queues instead of force-running, and delivery dedup is transaction-scoped for both plain and optimistic bumps (repeats within one transaction skip; a different transaction always reaches the scheduler).
5 changes: 5 additions & 0 deletions .changeset/fix-patch-channel-round10-7.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Round-10.7 audit fixes: delivery dedup stamps are canonicalized through currentTransition and released at delivery (no merged-away transition retention, correct dedup across merges), held-owner demotion re-drives isolate their first scheduled run per entry, and an explicit unbind after demotion cancels the queued redrive (demotion severing split from the unbind mark).
5 changes: 5 additions & 0 deletions .changeset/fix-patch-channel-round10-8.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Round-10.8 audit fixes (final round): demotion re-drive compute passes capture throws per entry (a throwing getter routes to its boundary instead of halting held siblings during scheduling), and each re-driven entry owns a disposable root — unbind cancels the fallback effect whether queued or live, retiring the "demoted rows outlive removal" edge.
5 changes: 5 additions & 0 deletions .changeset/fix-patch-channel-round10-9.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Round-10.9 audit fixes (demotion fallback lifecycle): demoted bodies with manifests compute by reading their OWN declared envelope (per entry, never the channel union) so NaN/unstable-getter compares can't fire DOM writes inside tracked computations; a failed compute skips its commit instead of force-applying after a swallowed error; re-drive roots are id-transparent (classic fallback owner/hydration depth); and the manifest-less full-scan poison (akAll) is ref-counted, releasing with its last consumer.
6 changes: 6 additions & 0 deletions .changeset/fix-patch-channel-round10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@solidjs/signals": patch
"@solidjs/web": patch
---

Round-10 audit fixes for node-delivery patch channels: ancestor bubbling moved into the bump primitive (post-await landings, optimistic nested writes, and channel-less seams all reach ancestor consumers), eager child adoptions path-copy the ancestor chain so late mounts read current raws, dispatch defers entries whose owner queue is holding (Loading/reveal parity), demotion fanout is per-entry isolated, subject swaps build from the optimistic visible array with family-identity retention, and the deferred-demotion latch dies with its consumers.
13 changes: 13 additions & 0 deletions .changeset/fix-patch-channel-round6-hardening.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
"@solidjs/signals": patch
"@solidjs/web": patch
---

Patch-channel round-6 hardening: prod-sound getter demotion via accessed-key
recording with bounded adoption probes (replaces the dev-only check),
same-channel transition-merge coalescing (one live-resolving apply per record
when merged transactions both queued it), structural row/slot queue entries
now respect unbinds and error routing like value patches, fixed-window
dispatch for the single-consumer alias, initial list construction severs
registrations and removes claimed DOM on throw (client + hydration), and
failed-apply identity resync now triggers actively on slot ticks.
5 changes: 5 additions & 0 deletions .changeset/fix-patch-fold-audit-round.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Close the fold-audit P1s on the patch channel and the #3164 reveal seam: held slot deliveries defer per index instead of collapsing to the first (later slots stayed stale behind holds), the late-registrant sweep runs once at drain end against the highest emission watermark (a resync followed by a later item's stale ops double-built rows), staged truth no longer merges into raw shallow rows (in-place mutation was visible before the reveal with no notification — raw children now replace their slot wholesale), and staged-truth folds emit row ops and slot ticks at the reveal (the optimistic-family gates exist for override materializations; a root array retained only through a descendant's override was revealing silently).
5 changes: 5 additions & 0 deletions .changeset/fix-patch-structural-audit-followup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Structural-audit follow-up on the patch channel: slot-patch registrations now carry the registration-sequence stamp (shallow lists mounted during held windows resynced instead of staying stale), landing consumptions notify structural consumers with drain-time resolution instead of an emission-time draft snapshot (classic-parity by construction across back-to-back continuation landings), late-registrant resyncs dedup per drain, and the superseded-work gate re-resolves standalone slot ticks live instead of dropping them. Two upstream continuation-reckoning findings (same-microtask landing swallowed; until()-gated action wedged on the swallowed echo) are pinned as expected-fail tests for the #3123 seam.
5 changes: 5 additions & 0 deletions .changeset/fix-patch-structural-audit-round.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Close the structural-audit findings on the patch channel's row/slot machinery: the late-registrant resync sweep is rebuilt on registration-sequence numbers (fixed window at both edges, hold-honoring deferral, O(#late) suffix scan instead of quadratic rescans), drain-resolved structural resyncs read the visible optimistic view instead of committed backing, slot ticks coalesced past a shrink are skipped, and a landing consumption stamps a structural generation so stale transition-held row/slot work can no longer replay over its resync at settle.
5 changes: 5 additions & 0 deletions .changeset/fix-primitive-row-retention.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Primitive rows participate in structural identity matching keyed by their value: buildRowOps only admitted wrappable rows to the occurrence-aware key queues, so a primitive permutation emitted all-new sources and rebuilt every moved row instead of retaining nodes — classic value-identity now moves them, with duplicate occurrences already sound through the existing queues.
5 changes: 5 additions & 0 deletions .changeset/fix-version-chain-fold-audit-2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Close the second fold-audit round on the structural version chain: consumers mounted inside a writing transition initialize their version baseline from the full emitted version (they read the speculative view — the old visible-version init replayed stashed ops over DOM already built from them), staged reveals ride exactly one channel (aligned windows are slot ticks, length changes are row ops — never both for one replacement), staged-reveal identity diffs key rows through the family map so re-seated raws on retained rows no longer rebuild stable proxies, held structural releases fast-forward the applied version (no redundant follow-up resync), and version arithmetic drops its signed-32 coercions (the 2^31 wrap eventually suppressed delivery permanently).
5 changes: 5 additions & 0 deletions .changeset/fix-version-chain-fold-audit-3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Close the third fold-audit round: the version baseline for structural consumers keys off the registrant's HOLDING owner queue instead of the execution-time transition flag (parked actions have no ambient transition while held-boundary content still reads speculative state — the flag-based init replayed stashed row ops over speculative DOM), staged shallow reveals classify equal-length windows by reference movement rather than length alone (a reorder is structure — moved rows were rebuilt via slot ticks and lost identity/focus), and the reveal marks itself consumed on BOTH channels so the settle loop's resync can never double a reveal the fold already delivered.
5 changes: 5 additions & 0 deletions .changeset/fix-version-chain-fold-audit-4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Close the fourth fold-audit round on the structural version chain: the visible version bumps at emission for every structural emitter — adoption commits eagerly, so every reader's init read includes every emitted walk state, parked windows and ambient mounts alike, deleting the deferred-visibility machinery and the held-queue registration special case entirely (no reader anywhere can replay stashed row ops it already rendered); reveal marks are epoch-stamped and set only on proven emission (a boolean lingered on descendant-retained roots the settle loop never visits, and a no-op fold could suppress the only revert resync a driven list needed); and equal-length primitive permutations classify as structure (classic keys primitive rows by value — reorders move rows instead of rewriting slot contents, preserving identity and focus).
8 changes: 8 additions & 0 deletions .changeset/flip-patch-driver-default-on.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"@solidjs/babel-plugin": minor
"@solidjs/compiler": minor
---

Patch mode is now the default in both compilers: eligible pure member-read
bindings compile to `patchDriver` templates and eligible store lists to
`rowProof` rows without any configuration. Opt out with `patchDriver: false`.
5 changes: 5 additions & 0 deletions .changeset/fold-audit-6-dn-override-matcher-key-spaces.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Patch channel fold audit 6: deliveries consume delivery-node overrides so a settle-drain revert bump can never leak one onto a still-open lane (INV-6 at quiescence); the row matcher separates object-keyed and value-keyed key spaces so mixed primitive/object identities never collide (and the identity prefix scan is kind-aware); `undefined` rows and sparse holes match by sentinel so plain moves retain their rows.
5 changes: 5 additions & 0 deletions .changeset/node-delivery-mount-pass.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Node-delivery mount pass: per-channel delivery machinery (signal + effect) is now built lazily at the first consumer-visible emission instead of at registration, the effect is a detached single-source primitive (`deliveryEffect`, no root/owner allocation), and the machinery persists across consumer churn instead of disposing on last unbind (held write-time emissions survive unbound windows; re-binding rows reuse the node). dbmon mount returns to channel parity (6.4 ms) while keeping node delivery's tick win.
8 changes: 8 additions & 0 deletions .changeset/node-delivery-port-wip.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"@solidjs/signals": patch
"@solidjs/web": patch
---

WIP (experiment branch only): full node-delivery port — registerPatch owns
a per-channel delivery effect with manifest-shaped prev snapshots; value
queue machinery deleted; structural queue slimmed. Harness triage pending.
9 changes: 9 additions & 0 deletions .changeset/node-delivery-prototype.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
"@solidjs/signals": patch
"@solidjs/web": patch
---

PROTOTYPE (flag-gated, dormant): node-driven patch delivery — one bare
version signal per patched record bumped at the existing emission seams;
the driver applies compiled bodies from a scheduler-timed effect. Enabled
only via globalThis.__PATCH_NODE__; no behavior change otherwise.
5 changes: 5 additions & 0 deletions .changeset/patch-attribution-cause-chains.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Attribution cause chains thread through patch deliveries: emission seams re-stamp the delivery signal with the record's store path and value transition (via a new `patchEmit` hook), and delivery effects name themselves `patchDelivery(store.path)` — so "why did this run" for a patch-applied DOM update reads as the record's write, with previews, instead of an anonymous counter. Dev-only.
5 changes: 5 additions & 0 deletions .changeset/patch-channel-fanout-diagnostics.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Channel-side fan-out diagnostics (attribution parity): patch consumers are invisible to graph subscriber counts, so mass registration on one record now fires the HUGE_FAN_OUT milestones and wide dispatches fire the WIDE_WRITE warning from the channel itself (dev-only, same codes and thresholds as the graph twins). WIDE_WRITE's advice text updated for the removed selector primitive.
5 changes: 5 additions & 0 deletions .changeset/patch-channel-fold-reconciliation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Reconcile the patch channel with the #3164 fold ruling: the branch's landing-consumption integration (landing emission hook, superseded-work generation stamps) is deleted with the contract it served — under fold, staged truth rides the channel's existing transition-held write semantics and the atomic reveal rides the settle drain's resync loop. Re-applies the primitive-owned emission gate the rewrite reverted (local-consumer-list gating silenced ancestor channels) and re-pins the landing invariants to fold semantics: interim landings under retained optimism are invisible to value and structural channels alike, with the flip atomic at settle, at classic-effect parity.
5 changes: 5 additions & 0 deletions .changeset/patch-channel-size-consolidation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/signals": patch
---

Consolidate patch-channel internals (size pass 2): one held-owner-queue probe, one deferred-run shape for held consumers, shared registration prologue and structural unbind. Behavior-neutral; compressed size unchanged (repetition was already compression-free), raw minified −34 B.
6 changes: 6 additions & 0 deletions .changeset/patch-channel-size-pass.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@solidjs/signals": patch
"@solidjs/web": patch
---

Patch-channel size pass: the drain-side read-recording proxy is deleted — manifest-less registrations poison the key union (`akAll`) and adoption/delivery probes full-scan instead (compiled output always ships manifests, so only hand-written callers pay wider probes); `applyEntries` collapses to its single delivery mode; error-routing and deferred-halt shapes consolidate into shared helpers. Value tier 16.22 → 16.05 kB, list tier 18.79 → 18.60 kB (brotli), ratchets tightened.
5 changes: 5 additions & 0 deletions .changeset/patch-driver-samevaluezero-rebuild.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/web": patch
---

The patch-mode list driver's rebuild check now uses SameValueZero, agreeing with the matcher's Map-based equality: a moved NaN row keeps its DOM node (parity with classic's diff, which gets this for free from Map semantics).
Loading
Loading