@solidjs/signals 2.0.0-rc.11 → 2.0.0-rc.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/dist/dev-shared.js +2056 -3773
  2. package/dist/dev.attribution.js +159 -91
  3. package/dist/dev.js +7263 -8384
  4. package/dist/observe/affects.js +125 -104
  5. package/dist/observe/boundaries.js +458 -665
  6. package/dist/observe/core/action.js +63 -66
  7. package/dist/observe/core/async.js +240 -383
  8. package/dist/observe/core/attribution-queries.js +1 -1
  9. package/dist/observe/core/attribution.js +271 -199
  10. package/dist/observe/core/constants.js +115 -178
  11. package/dist/observe/core/context.js +3 -3
  12. package/dist/observe/core/core.js +840 -1428
  13. package/dist/observe/core/dev.js +41 -18
  14. package/dist/observe/core/effect.js +75 -86
  15. package/dist/observe/core/external.js +5 -5
  16. package/dist/observe/core/graph.js +61 -70
  17. package/dist/observe/core/heap.js +75 -98
  18. package/dist/observe/core/invariants.js +1 -34
  19. package/dist/observe/core/lanes.js +704 -181
  20. package/dist/observe/core/owner.js +80 -101
  21. package/dist/observe/core/scheduler.js +708 -1351
  22. package/dist/observe/core/verdict.js +302 -621
  23. package/dist/observe/flatten.js +79 -0
  24. package/dist/observe/index.js +15 -13
  25. package/dist/observe/map.js +232 -235
  26. package/dist/observe/reveal.js +212 -0
  27. package/dist/observe/signals.js +133 -215
  28. package/dist/observe/store/affects.js +135 -0
  29. package/dist/observe/store/index.js +29 -24
  30. package/dist/observe/store/optimistic.js +538 -0
  31. package/dist/observe/store/projection.js +302 -0
  32. package/dist/observe/store/reconcile.js +257 -0
  33. package/dist/observe/store/store.js +1945 -277
  34. package/dist/observe/store/storePath.js +1 -1
  35. package/dist/{prod/store/next → observe/store}/target.js +17 -18
  36. package/dist/observe/store/types.js +73 -0
  37. package/dist/observe/store/utils.js +1 -13
  38. package/dist/prod/affects.js +127 -106
  39. package/dist/prod/boundaries.js +442 -654
  40. package/dist/prod/core/action.js +71 -74
  41. package/dist/prod/core/async.js +307 -442
  42. package/dist/prod/core/constants.js +112 -177
  43. package/dist/prod/core/context.js +3 -3
  44. package/dist/prod/core/core.js +852 -1448
  45. package/dist/prod/core/effect.js +88 -99
  46. package/dist/prod/core/external.js +5 -5
  47. package/dist/prod/core/graph.js +61 -70
  48. package/dist/prod/core/heap.js +75 -98
  49. package/dist/prod/core/invariants.js +1 -32
  50. package/dist/prod/core/lanes.js +666 -181
  51. package/dist/prod/core/owner.js +75 -96
  52. package/dist/prod/core/scheduler.js +677 -1332
  53. package/dist/prod/core/verdict.js +297 -621
  54. package/dist/prod/flatten.js +77 -0
  55. package/dist/prod/index.js +15 -13
  56. package/dist/prod/map.js +143 -146
  57. package/dist/prod/reveal.js +212 -0
  58. package/dist/prod/signals.js +144 -226
  59. package/dist/prod/store/affects.js +135 -0
  60. package/dist/prod/store/index.js +28 -19
  61. package/dist/prod/store/optimistic.js +533 -0
  62. package/dist/prod/store/projection.js +295 -0
  63. package/dist/prod/store/reconcile.js +257 -0
  64. package/dist/prod/store/store.js +1840 -272
  65. package/dist/prod/store/storePath.js +1 -1
  66. package/dist/{observe/store/next → prod/store}/target.js +13 -17
  67. package/dist/prod/store/types.js +73 -0
  68. package/dist/prod/store/utils.js +1 -11
  69. package/dist/types/affects.d.ts +11 -30
  70. package/dist/types/boundaries.d.ts +62 -176
  71. package/dist/types/carved.d.ts +1 -0
  72. package/dist/types/core/action.d.ts +5 -6
  73. package/dist/types/core/async.d.ts +10 -5
  74. package/dist/types/core/attribution-hooks.d.ts +48 -1
  75. package/dist/types/core/attribution.d.ts +29 -9
  76. package/dist/types/core/constants.d.ts +125 -171
  77. package/dist/types/core/core.d.ts +104 -264
  78. package/dist/types/core/dev.d.ts +60 -7
  79. package/dist/types/core/effect.d.ts +0 -7
  80. package/dist/types/core/graph.d.ts +7 -1
  81. package/dist/types/core/heap.d.ts +5 -7
  82. package/dist/types/core/index.d.ts +6 -6
  83. package/dist/types/core/invariants.d.ts +0 -29
  84. package/dist/types/core/lanes.d.ts +65 -87
  85. package/dist/types/core/owner.d.ts +3 -3
  86. package/dist/types/core/scheduler.d.ts +249 -331
  87. package/dist/types/core/types.d.ts +51 -85
  88. package/dist/types/core/verdict.d.ts +3 -0
  89. package/dist/types/flatten.d.ts +8 -0
  90. package/dist/types/index.d.ts +7 -5
  91. package/dist/types/reveal.d.ts +19 -0
  92. package/dist/types/signals.d.ts +53 -92
  93. package/dist/types/store/affects.d.ts +1 -0
  94. package/dist/types/store/index.d.ts +35 -15
  95. package/dist/types/store/optimistic.d.ts +23 -0
  96. package/dist/types/store/projection.d.ts +18 -0
  97. package/dist/types/store/reconcile.d.ts +3 -0
  98. package/dist/types/store/store.d.ts +165 -143
  99. package/dist/types/store/storePath.d.ts +1 -1
  100. package/dist/types/store/target.d.ts +151 -0
  101. package/dist/types/store/types.d.ts +84 -0
  102. package/package.json +1 -1
  103. package/dist/observe/core/optimistic.js +0 -669
  104. package/dist/observe/store/next/optimistic.js +0 -717
  105. package/dist/observe/store/next/projection.js +0 -266
  106. package/dist/observe/store/next/reconcile.js +0 -375
  107. package/dist/observe/store/next/store.js +0 -2480
  108. package/dist/prod/core/optimistic.js +0 -658
  109. package/dist/prod/store/next/optimistic.js +0 -710
  110. package/dist/prod/store/next/projection.js +0 -257
  111. package/dist/prod/store/next/reconcile.js +0 -373
  112. package/dist/prod/store/next/store.js +0 -2356
  113. package/dist/types/core/optimistic.d.ts +0 -6
  114. package/dist/types/store/next/optimistic.d.ts +0 -25
  115. package/dist/types/store/next/projection.d.ts +0 -27
  116. package/dist/types/store/next/reconcile.d.ts +0 -10
  117. package/dist/types/store/next/store.d.ts +0 -143
  118. package/dist/types/store/next/target.d.ts +0 -196
@@ -144,8 +144,9 @@ export interface RerunEvent {
144
144
  * effect phase re-fires on every recompute), so the engine derives this
145
145
  * fact itself: an effect run whose compute output is identical to the
146
146
  * previous run's reports `changed: false` — the phase re-fired with the
147
- * same input, pure waste. Side-effect-only computes (`undefined` output)
148
- * are exempt: identity of `undefined` proves nothing about their work.
147
+ * same input, pure waste. Side-effect-only computes (`undefined` output —
148
+ * effects, projections, memos that work by writing) report `true`:
149
+ * identity of `undefined` proves nothing about their work.
149
150
  * Summed as `wastedMs` in costs() (plain, non-held runs only — see
150
151
  * `phase`).
151
152
  */
@@ -390,8 +391,11 @@ export interface AttributionOptions {
390
391
  } | false;
391
392
  /**
392
393
  * Wide-scope warning: emit a diagnostic when a scope's dependency count
393
- * reaches this (default 30) — the coarse-read / helper-leak signature.
394
- * Re-warns only if the count then grows by another 50%. `false` disables.
394
+ * reaches this (default 200) — the coarse-read / helper-leak signature.
395
+ * Re-warns only if the count then grows by another 50%. HMR plumbing is
396
+ * not counted, and in dev builds the renderer's insert child-resolution
397
+ * pass (which must track every row's resolved child) is not judged;
398
+ * HUGE_FAN_IN (2000, always on) still covers both. `false` disables.
395
399
  */
396
400
  wideDeps?: number | false;
397
401
  /**
@@ -437,8 +441,8 @@ export interface AttributionOptions {
437
441
  * same code the always-on core check emits from GRAPH_SIZE_WARN_AT (2000)
438
442
  * up, with `data.write` naming the invalidation; the engine hands over to
439
443
  * the core there, so one change never carries two findings. Once per
440
- * node, re-warning once the count has grown by another 500. `false`
441
- * leaves only the always-on threshold.
444
+ * node, re-warning once the count has grown by another 500. HMR plumbing
445
+ * subscribers are not counted. `false` leaves only the always-on threshold.
442
446
  */
443
447
  fanOut?: number | false;
444
448
  /**
@@ -511,7 +515,9 @@ export interface AttributionOptions {
511
515
  * abandons `count` flights within `windowMs` — each superseded by the
512
516
  * next before it landed (default 3 / 1000ms: the request-per-keystroke
513
517
  * signature, every input asking again and the answers discarded). Once
514
- * per window per source. `false` disables.
518
+ * per window per source. In dev builds a framework node that supersedes
519
+ * its own flights by design (a frames slot arg re-read by each re-shipped
520
+ * record) is not judged. `false` disables.
515
521
  */
516
522
  abandonedFlights?: {
517
523
  count: number;
@@ -815,6 +821,15 @@ export interface NavigationEvent {
815
821
  params?: Readonly<Record<string, string | undefined>>;
816
822
  /** When the navigation was requested (`performance.now()` clock). */
817
823
  at: number;
824
+ /**
825
+ * The route the document arrived on, declared by the router at its initial
826
+ * match (`NavigationRef.initial`): `at` is the document's navigation start
827
+ * (`0` unless the router passed its own), there is no `from`, `writes` is
828
+ * `0`, and it settles `committed` when the router's frame closes — the
829
+ * record names the route the page loaded as; its timing is Navigation
830
+ * Timing's, not the runtime's.
831
+ */
832
+ initial?: true;
818
833
  /** The user interaction it ran under, when known — a link click. */
819
834
  interaction?: ChangeOrigin;
820
835
  /** Root writes the frame performed, redirect hops included. */
@@ -852,7 +867,11 @@ export interface InteractionEvent {
852
867
  * INP counts as input delay. Present only when `at` predates the frame.
853
868
  */
854
869
  inputDelayMs?: number;
855
- /** Wall time of the handler itself, entry to return. */
870
+ /**
871
+ * Wall time of the handler itself, entry to return — for the frames of one
872
+ * event (`InteractionRef.event`), the first listener's entry to the last
873
+ * one's return, as Event Timing measures processing.
874
+ */
856
875
  handlerMs: number;
857
876
  /** Root writes attributed to the frame: the handler's, and those of frames it opened (a navigation). */
858
877
  writes: number;
@@ -875,7 +894,8 @@ export interface InteractionEvent {
875
894
  outcome?: "idle" | "committed" | "held";
876
895
  /**
877
896
  * The handler returned a thenable (`async () => { await save(); … }`) and
878
- * the record waited for it: handler return → the promise settling, in
897
+ * the record waited for it: handler return → the promise settling (the last
898
+ * one, when several listeners of one event returned one), in
879
899
  * milliseconds, capped at `ASYNC_HANDLER_CAP_MS`. The continuation runs
880
900
  * with no frame on the stack, so writes it makes are not attributed to
881
901
  * this interaction — only its duration is. Absent when the handler
@@ -4,20 +4,28 @@ export declare const REACTIVE_DIRTY: number;
4
4
  export declare const REACTIVE_RECOMPUTING_DEPS: number;
5
5
  export declare const REACTIVE_IN_HEAP: number;
6
6
  export declare const REACTIVE_IN_HEAP_HEIGHT: number;
7
+ /** L2 — the node sits on its owner's parked frame (`_x._pendingFirstChild`):
8
+ * it is the displayed frame until the owner's commit disposes it. Set by
9
+ * `markDisposal` over the parked subtree; carried through every per-pass
10
+ * flag wipe (#3543). Scheduling reads it once, at the heap pop: a zombie's
11
+ * recompute is deferred past the seam (`deferZombie`). */
7
12
  export declare const REACTIVE_ZOMBIE: number;
8
13
  export declare const REACTIVE_DISPOSED: number;
9
- export declare const REACTIVE_OPTIMISTIC_DIRTY: number;
14
+ /** L2 — this pass read the future (a tracked read of a CONFIG_HELD node).
15
+ * Lives for the pass only: set by `read`, consumed by `recompute`'s publish
16
+ * (a first pass that read the future is born held, A29), wiped with the
17
+ * pass's other per-pass bits. */
18
+ export declare const REACTIVE_JOINED: number;
10
19
  export declare const REACTIVE_SNAPSHOT_STALE: number;
11
20
  export declare const REACTIVE_LAZY: number;
12
21
  export declare const REACTIVE_MANUAL_WRITE: number;
13
- /**
14
- * The pending recompute is a re-ask of the same question: `refresh()` dirtied
15
- * the node while no tracked input changed value. Cleared whenever a real
16
- * value-change notification arrives (`insertSubs`), and consumed by
17
- * `recompute` into the node's `_reask` classification — a quiet (re-ask)
18
- * pending window does not read as pending (question-scoped pending model).
19
- */
20
- export declare const REACTIVE_REASK: number;
22
+ /** L2, rule 3 — the node's LAST pass was a render effect's read of the
23
+ * future as committed (`frameRead`): the frame shows the committed world
24
+ * beside a future it also derives from, and re-derives at the landing.
25
+ * Survives its own pass's wipe; the next pass's wipe clears it (a pass that
26
+ * re-derived the frame — in the future, or without the held read — owes the
27
+ * landing nothing). The landing consumes it (the transaction's `_reruns`). */
28
+ export declare const REACTIVE_FRAME_READ: number;
21
29
  /**
22
30
  * A dependency write landed while this subscriber was mid-recompute — a
23
31
  * nested pull committed beneath one of its reads (#3037). The heap refuses
@@ -27,6 +35,39 @@ export declare const REACTIVE_REASK: number;
27
35
  * either re-read later in the pass (fresh) or trimmed with it (not a dep).
28
36
  */
29
37
  export declare const REACTIVE_MISSED_WAKE: number;
38
+ /** A `refresh()` asked this node to re-ask its question (A19 exc. 2, A24):
39
+ * consumed by the next pass, which — going pending — classifies its flight
40
+ * quiet (`_x._reask`). */
41
+ export declare const REACTIVE_REASK: number;
42
+ /** The pass was served a node's ambient staging — written this flush, not
43
+ * held. If the flush parks, the pass is the frame's with it (the same sync
44
+ * frame as the async): a verdict read cannot break it out. Per pass. */
45
+ export declare const REACTIVE_STAGED_READ: number;
46
+ /** The pass entered a verdict window (`isPending`/`latest`). Per pass: a
47
+ * pass that did not keeps CONFIG_VERDICT no longer — the frame-reader
48
+ * posture lasts exactly as long as the probing does. */
49
+ export declare const REACTIVE_PROBED: number;
50
+ /** Lanes — the node (a lane's member) was dirtied by the lane's own
51
+ * re-staging (a re-guess, lane work re-derived): its next pass is the
52
+ * lane's from the start (`recompute`), not a stale reader's re-run by an
53
+ * unrelated write (#3460). Consumed by the pass. */
54
+ export declare const REACTIVE_LANE_DIRTY: number;
55
+ /** Lanes (plan sec. 28) — the pass read a lane's value as lane work (`enterLane`): a
56
+ * tracked derivation's read of displayed optimism, a verdict read routed
57
+ * into the holder's verdict lane. A pass in a lane's seat that read none of
58
+ * its world has left the lane (`recompute`'s tail). Per pass. */
59
+ export declare const REACTIVE_LANE_READ: number;
60
+ /** Lanes (plan sec. 28) — a render effect in the frame's seat was served the screen
61
+ * for a lane's node (`laneRead`: a stale reader of a lane that has not
62
+ * shown). Its pass computing exactly what it last applied has nothing to
63
+ * run — an effect has no comparator, and the guess's notification is not a
64
+ * change it can see. Per pass. */
65
+ export declare const REACTIVE_SCREEN_READ: number;
66
+ /** A verdict reader whose probe was answered before the flush had a
67
+ * transaction (verdict.ts `watchVerdict`): the seam re-runs it even if a
68
+ * later read of the same pass routed it into a verdict lane — that was not
69
+ * the probe's answer (lanes.ts). Per pass. */
70
+ export declare const REACTIVE_PROBE_UNANSWERED: number;
30
71
  export declare const CONFIG_OWNED_WRITE: number;
31
72
  export declare const CONFIG_NO_SNAPSHOT: number;
32
73
  export declare const CONFIG_TRANSPARENT: number;
@@ -34,51 +75,65 @@ export declare const CONFIG_IN_SNAPSHOT_SCOPE: number;
34
75
  export declare const CONFIG_CHILDREN_FORBIDDEN: number;
35
76
  export declare const CONFIG_AUTO_DISPOSE: number;
36
77
  export declare const CONFIG_SYNC: number;
37
- export declare const CONFIG_OPTIMISTIC: number;
38
- export declare const CONFIG_HAS_COMPANIONS: number;
78
+ /** The node has a pass awaiting commit: its live children (and `_disposal`)
79
+ * are that pass's and were never shown — a re-pass tears them down on the
80
+ * spot, while the frame parked on `_x._pendingFirstChild` keeps waiting for
81
+ * the commit. Set by `recompute` when it queues the node. */
82
+ export declare const CONFIG_STAGED: number;
83
+ /** The node's staged state is in the future: the flush that staged it
84
+ * parked. A write to it, a tracked read of it by a derivation, or a pass
85
+ * over a derivation holding it joins the future (the flush parks). Render
86
+ * effects are the frame, not derivations (rule 3): reading it outside a
87
+ * parking flush they see the committed value and hold nothing, and are
88
+ * re-derived at the landing. Set at the park seam on every staged node. */
89
+ export declare const CONFIG_HELD: number;
90
+ /** A15's reveal corollary (#3305): a commit published this flight's inputs
91
+ * beneath it — the node was pending, nothing staged, when it committed — so
92
+ * its committed value is torn against the visible frame. A render effect
93
+ * revealing it cannot be a stale reader: it observes the flight (pends,
94
+ * holds) instead of showing the pre-flight value. Outlives the flight that
95
+ * earned it for as long as the node stays pending, and no longer: the
96
+ * commit that lands a value clears it. */
97
+ export declare const CONFIG_INPUTS_PUBLISHED: number;
98
+ /** Lanes (plan sec. 28) — the node has a lane's value (`_x._lane`): a written guess
99
+ * (CONFIG_GUESS) or a lane pass's derivation of one. Its lane is
100
+ * `_x._transaction`. The gate to the lane arm of `read`; `_value` stays the
101
+ * committed truth and `_pendingValue` a transaction's staging throughout —
102
+ * a value's world is where it lives, never a bit. */
103
+ export declare const CONFIG_OVERRIDE: number;
104
+ /** A store slot node (`slotSignal`): a leaf, presence, container or deep
105
+ * witness of a store target. One literal, no `_x` at birth; the last-one-out
106
+ * sweep dispatches it to the store's shared release hook (graph.ts) instead
107
+ * of a per-node `_unobserved` closure. */
108
+ export declare const CONFIG_SLOT_NODE: number;
109
+ /** A store slot node whose staging is a USER setter's proposal, not its
110
+ * derive's derivation (A34 (3)'s discriminator for derived stores — the
111
+ * leaf twin of REACTIVE_MANUAL_WRITE). Set by the user setter, cleared by
112
+ * the derive's own write to the key. */
113
+ export declare const CONFIG_MANUAL_WRITE: number;
114
+ /** Lanes — the node carries a written guess (`optimisticWrite`): its own
115
+ * source recomputing it, or a plain write landing on it, is the truth
116
+ * (`supersede`). A lane's derived staging is not. */
117
+ export declare const CONFIG_GUESS: number;
118
+ /** The node's pass read a verdict (`isPending`/`latest`): a dependency going
119
+ * pending is a question for its next pass — the verdict changed — so the
120
+ * propagation re-derives it instead of marking it pending (as a kept-tail
121
+ * link does, A30). Set at the window, never cleared: a reader that stopped
122
+ * asking re-derives once and goes pending through its own read. */
123
+ export declare const CONFIG_VERDICT: number;
124
+ /** A dependency's status is a question for this node's pass, not a fact
125
+ * about its current one: the propagation re-derives it instead of marking
126
+ * it, for errors as for pending (as CONFIG_VERDICT). A boundary's output
127
+ * (show the content, or the fallback) and its `on` node (boundaries.ts); a
128
+ * promise over an expression (`resolve`/`until`, signals.ts: the pass reads
129
+ * the error and rejects, or re-asks a pending source). */
130
+ export declare const CONFIG_REDERIVE: number;
131
+ /** The reader wants the truth, not the lane's guess (`until`, signals.ts):
132
+ * a read of displayed optimism serves the base the guess covers, makes the
133
+ * pass no lane's, and the truth landing wakes it even when it confirms the
134
+ * guess (the one case ordinary subscribers are not told — A17's silence). */
135
+ export declare const CONFIG_AUTHORITATIVE: number;
39
136
  export declare const CONFIG_HAS_SNAPSHOT: number;
40
- export declare const CONFIG_HAS_LANE: number;
41
- /** Set on a FIREWALL computed when any of its child signals creates an
42
- * isPending()/latest() companion. Gates the post-recompute child-companion
43
- * walk (#3038): a store computed's `_child` chain holds one node per
44
- * materialized leaf, so walking it unconditionally makes every update cost
45
- * O(all leaves ever read). Sticky — set at companion creation, never
46
- * cleared; sync-only apps never set it and never pay the walk. */
47
- export declare const CONFIG_CHILD_COMPANIONS: number;
48
- /** Set on a computed when its first firewall child signal is installed
49
- * (projection machinery). Gates markNode's firewall-children walk with one
50
- * masked read of the always-present _config — the walk's old `_child` read
51
- * moved into the cold extension (§12), and an unconditional `_x` deref per
52
- * marked node measurably taxed the propagation hot path (diamond -22%). */
53
- export declare const CONFIG_FW_CHILDREN: number;
54
- /** Authoritative-view reader (`until()`): while this node computes, reads
55
- * dodge active optimistic OVERRIDES only — the predicate must observe
56
- * arriving truth, never the caller's own tentative writes (which would
57
- * trivially satisfy it). Everything else reads normally, INCLUDING
58
- * transition-staged `_pendingValue`: staged data is authoritative (optimism
59
- * lives only in override slots), and a hold that refused staged reads would
60
- * deadlock on data the open transaction itself is holding (a refresh the
61
- * action issued lands staged and cannot commit until the hold releases).
62
- * read() checks the bit on the reading computation (`context`) directly — no
63
- * ambient flag — so a shared computed the predicate pulls recomputes as
64
- * itself (no bit) under the normal view, and its cache never forks. */
65
- export declare const CONFIG_AUTHORITATIVE_READ: number;
66
- /** Sticky mark: an authoritative-view reader read this node PAST an active
67
- * override. The ack shape — an authoritative arrival EQUAL to the override —
68
- * rides paths that are deliberately silent under A17 (every ordinary reader
69
- * sees the override, so an equal landing changes nothing for them). A marked
70
- * node notifies those readers on such paths anyway, so the landed truth is
71
- * seen without re-firing ordinary subscribers. Never cleared — only nodes an
72
- * until() predicate observed mid-override pay. */
73
- export declare const CONFIG_AUTHORITATIVE_OBSERVED: number;
74
- /** Promise-delivery effect (resolve()/until()): commits its computed value
75
- * directly even when recomputing under its own held transition. These
76
- * effects deliver applies on a microtask (#2930) instead of the stashed
77
- * effect queues, so the value must ride the same immediate schedule — a
78
- * staged value with an immediate apply delivers stale state (resolve) or
79
- * deadlocks the hold (until). Safe because the node is a private leaf: no
80
- * subscriber reads an effect's value, only its own apply does. */
81
- export declare const CONFIG_DIRECT_COMMIT: number;
82
137
  /** Fresh-pull reader (awaitable `refresh()`'s waiter effect): a read of a
83
138
  * dirty source recomputes it inline even when the height gate defers to the
84
139
  * flush. Closes the same-flush ordering race where a waiter created
@@ -89,118 +144,33 @@ export declare const CONFIG_DIRECT_COMMIT: number;
89
144
  * deliberately keeps that race — its contract is "first settled value"
90
145
  * (#2930), not "next quiescent state". */
91
146
  export declare const CONFIG_FRESH_READ: number;
92
- /** HELD truth (#3164): this node's staged `_pendingValue` is confirming
93
- * truth riding a transaction that retains optimism, revealed only at that
94
- * transaction's settle. Two arming sites, one meaning: the store fold
95
- * (a landing staged into the retaining transaction) and until()'s
96
- * flip-entanglement (a foreign carrier's staged write, stolen when it
97
- * flipped the awaited predicate truthy). Override-covered nodes never
98
- * arm: the override is their display and its revert their notification
99
- * (A17).
100
- *
101
- * To a DERIVING reader the truth is a staged value like any other: a memo
102
- * or user effect served it enters the transaction and is held with it
103
- * (A29), so a pass that composes it with a superseded override's truth
104
- * composes ONE staged world — never staged truth beside committed
105
- * neighbours (#3568: the mask served the retaining transaction's own pass
106
- * the landed `length` through the override while the rows past it stayed
107
- * committed, and `<For>` walked into a hole). Stale readers of a foreign
108
- * transaction keep committed through the stale-of-foreign clause,
109
- * untracked reads keep committed (Rule 1), and latest() and until()'s
110
- * predicate tunnel through — the exemption that keeps holds deadlock-free.
111
- *
112
- * The one reader the mark gates is a LANE pass, owning transaction or not
113
- * (ruled 2026-09-22, superseding #3589's owner exemption): a lane applies
114
- * its frame display-ahead at the park, so a lane pass served the truth
115
- * would paint the confirmation beside the optimism it confirms —
116
- * `saving=true` beside the saved row, a frame no timeline contains
117
- * (GabbeV's union tear). It keeps committed and is re-run by the reveal's
118
- * post-revert wake. A lane under the retaining transaction owns its
119
- * overrides and its lane cargo (`ownsLane`), not the transaction's
120
- * confirming truth. Cleared at commit (the commit IS the reveal);
121
- * subscribers masked during the hold are woken by finalizePureQueue's
122
- * post-revert pass. */
123
- export declare const CONFIG_HELD_TRUTH: number;
124
- /** SLOT node (store leaf): created through `slotSignal` with `_host`/`_key`
125
- * backrefs baked into the literal. The unobserved sweep dispatches these to
126
- * the ONE shared hook (`setSlotUnobserved`) instead of a per-node closure
127
- * held in a per-node extension — store mounts materialize one signal per
128
- * touched leaf, so per-node allocations (options object, equals closure,
129
- * unobserved closure, NodeExtension) were the measured create-floor bytes
130
- * (warm dbmon profile: store node machinery ~36% + GC ~29%). */
131
- export declare const CONFIG_SLOT_NODE: number;
132
- /** Optimistic node whose own source arrived with a value DIFFERENT from its
133
- * active override (A18 supersession, #3331). The override survives only as
134
- * the displayed value — untracked reads and the applied frame keep it until
135
- * the owning transaction commits — while the graph has already moved to the
136
- * staged truth in `_pendingValue`: tracked readers see it and the corrected
137
- * cascade is that transaction's held work. Set by the two own-source write
138
- * paths (asyncWrite, transition-held recompute); cleared by a fresh optimistic
139
- * write (a new override re-masks) and by the revert. */
140
- export declare const CONFIG_OVERRIDE_SUPERSEDED: number;
141
- /** HELD children (#3404): this node's `_firstChild` chain (and `_disposal`
142
- * list) was built by a recompute whose result has not committed — a staged
143
- * value, a pending window, or a run under a held transaction. A later
144
- * recompute may tear those children down immediately: nothing observable
145
- * was ever built on them. Unset, the children belong to the committed frame
146
- * and a recompute defers them as zombies (`_pendingFirstChild`) until this
147
- * node commits — regardless of whether the recompute runs under a
148
- * transaction. A parked node (status propagation stamps `_transition`
149
- * without recomputing) recomputed when its source lands otherwise disposed
150
- * its committed children mid-hold, running their cleanups before the
151
- * transaction's atomic reveal. Cleared by `commitPendingNode`. */
152
- export declare const CONFIG_HELD_CHILDREN: number;
153
- /** The frame parked in `_pendingFirstChild` / `_pendingDisposal` is a LANE
154
- * frame (#3662, A15 lanes corollary): an effect's lane pass direct-commits,
155
- * so the frame it replaces leaves the screen when the lane's queue applies
156
- * the run (A30) — not at the action's commit like #3404's transaction
157
- * zombies, and not at the pass (a held lane defers the run). Drained by the
158
- * lane's render entry the parking site pushed ahead of the new frame's
159
- * effects (cleanups before side effects), by `commitPendingNode` if a hold
160
- * commits the node first, or with the owner's death. While set the parked
161
- * frame is not a hold (the node is not queued or stamped for it), a
162
- * superseding pass disposes the never-shown live children on the spot, and a
163
- * lane-channel dirty on a member is cancelled (`laneZombie`). Effects only: a
164
- * memo's lane pass publishes an override (A17, #3479). */
165
- export declare const CONFIG_LANE_FRAME: number;
166
- /** In-flight async node whose inputs were PUBLISHED while it was pending: a
167
- * batch or transaction committed with the node still `STATUS_PENDING` (an
168
- * unobserved flight, #3305), so the inputs are on screen and the node's
169
- * committed `_value` is stale against them. Governs read()'s reveal
170
- * carve-out: a stale (render) reader in some OTHER transaction may show a
171
- * foreign-held pending node's committed value — parallel transactions, no
172
- * entanglement — only while that value is coherent with the visible frame,
173
- * i.e. while the flight's inputs are themselves held (unpublished) and not
174
- * lane-revealed. Set by `commitPendingNodes`; cleared when the node next
175
- * enters pending fresh (a new flight from a settled state). */
176
- export declare const CONFIG_INPUTS_PUBLISHED: number;
177
147
  /** A28 (4): the node was written inside a recompute that ran OUTSIDE a flush
178
148
  * (a creation-time compute — boundary machinery, a mapArray's first run). Such
179
149
  * a write is promoted at that recompute's end: readers in the same block see
180
150
  * it. Cleared when the next flush begins; set only on that rare path. */
181
151
  export declare const CONFIG_PROMOTED: number;
182
- /** A28 for same-tick adoption: the node was staged outside a flush and then
183
- * adopted by a transaction (initTransition) before any flush carried the
184
- * staging — the stamp says "held", but nothing flushed is staged for it, so
185
- * on no channel is the write visible yet: `latest()` answers the committed
186
- * value, the verdict sees nothing pending (as the store's leaves already did
187
- * through their own selection). Cleared when the carrying flush re-stamps the
188
- * transaction's pending nodes (reassignPendingTransition). */
189
- export declare const CONFIG_ADOPTED_UNFLUSHED: number;
190
- /** The node's active override is a DERIVED one: a lane pass published its
191
- * speculative result into the override slot instead of `_value` (lanes
192
- * stage — an optimistic derivation is an override, #3479). Its truth is not
193
- * `_value` but a recompute from its inputs' truth, so the body-end
194
- * supersession (`endOptimism`) and the authoritative-flight blockage
195
- * (`transitionBlocked`) skip it; the revert drops the override and re-derives
196
- * it (`resolveOptimisticNodes`). Cleared with the override. */
197
- export declare const CONFIG_DERIVED_OVERRIDE: number;
198
152
  /** Observe tiers only: the node is framework plumbing (the `solid-js/refresh`
199
153
  * HMR memo between a component's root and its body) — it has no name, is no
200
154
  * segment of any owner path, and the attribution engine records nothing about
201
- * it (creation, re-runs, checks), while the nodes it owns stay fully observed.
155
+ * it (creation, re-runs, checks) and does not count it toward another scope's
156
+ * WIDE_SCOPE_DEPS or a write's engine-side HUGE_FAN_OUT, while the nodes it
157
+ * owns stay fully observed.
202
158
  * Set from the internal `_plumbing` option at creation; never set in prod. */
203
159
  export declare const CONFIG_PLUMBING: number;
160
+ /** Observe tiers only: a framework scope wide by construction (`@solidjs/web`'s
161
+ * insert child-resolution pass, which must track each row's resolved child) —
162
+ * the attribution engine's WIDE_SCOPE_DEPS skips it; the always-on HUGE_FAN_IN
163
+ * does not. Set from the internal `_wide` option at creation by dev builds only
164
+ * (the observe artifact mangles the option name, as it does `_plumbing`). */
165
+ export declare const CONFIG_WIDE: number;
166
+ /** Observe tiers only: a framework async node that supersedes its own flights
167
+ * by design (`@solidjs/web/frames`' per-key slot-arg memo, re-run by every
168
+ * re-shipped record while the arg is still pending) — the attribution
169
+ * engine's ABANDONED_FLIGHTS skips it; its flight records and the feedback
170
+ * fold's counts are unchanged. Set from the internal `_supersedes` option at
171
+ * creation by dev builds only (the observe artifact mangles the option name,
172
+ * as it does `_wide`). */
173
+ export declare const CONFIG_SUPERSEDES: number;
204
174
  export declare const STATUS_NONE = 0;
205
175
  export declare const STATUS_PENDING: number;
206
176
  export declare const STATUS_ERROR: number;
@@ -209,24 +179,8 @@ export declare const EFFECT_PURE = 0;
209
179
  export declare const EFFECT_RENDER = 1;
210
180
  export declare const EFFECT_USER = 2;
211
181
  export declare const EFFECT_TRACKED = 3;
212
- /** OR-ed into the `type` a lane passes to its effect runners: lane runs
213
- * apply ahead of their transaction and are exempt from ownership parking. */
214
- export declare const LANE_RUN = 4;
215
182
  export declare const NOT_PENDING: {};
216
183
  export declare const NO_SNAPSHOT: {};
217
- /**
218
- * Stand-in stored in `_overrideValue` for an optimistic write of literal
219
- * `undefined` (#2898). The slot doubles as the optimistic-node brand
220
- * (`undefined` = not optimistic, `NOT_PENDING` = at rest), so the raw value
221
- * would erase the node's optimistic identity: the write turns invisible and
222
- * follow-up writes route off the optimistic path and commit permanently.
223
- * Same shape as NO_SNAPSHOT. Sites that surface the override VALUE unwrap
224
- * via `visibleOverrideValue`; slot identity tests stay raw.
225
- */
226
- export declare const OVERRIDE_UNDEFINED: {};
227
- /** Unwrap an active override's stored value for surfacing to readers (#2898). */
228
- export declare function unwrapOverride<T = any>(v: unknown): T;
229
- export declare const STORE_SNAPSHOT_PROPS = "sp";
230
184
  export declare const SUPPORTS_PROXY: boolean;
231
185
  export declare const defaultContext: {};
232
186
  /**