legend-doctor 0.5.0 → 0.6.2

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 (1307) hide show
  1. package/EXAMPLES.md +353 -93
  2. package/README.md +16 -8
  3. package/REPORT.md +222 -47
  4. package/dist/src/analysis/analyze-source.d.ts +3 -5
  5. package/dist/src/analysis/analyze-source.d.ts.map +1 -1
  6. package/dist/src/analysis/analyze-source.js +33 -41
  7. package/dist/src/analysis/analyze-source.js.map +1 -1
  8. package/dist/src/analysis/assumptions/assumed-leaf-contracts.d.ts +11 -3
  9. package/dist/src/analysis/assumptions/assumed-leaf-contracts.d.ts.map +1 -1
  10. package/dist/src/analysis/assumptions/assumed-leaf-contracts.js +24 -5
  11. package/dist/src/analysis/assumptions/assumed-leaf-contracts.js.map +1 -1
  12. package/dist/src/analysis/assumptions/atomic-stretch.d.ts +9 -0
  13. package/dist/src/analysis/assumptions/atomic-stretch.d.ts.map +1 -0
  14. package/dist/src/analysis/assumptions/atomic-stretch.js +37 -0
  15. package/dist/src/analysis/assumptions/atomic-stretch.js.map +1 -0
  16. package/dist/src/analysis/assumptions/confirmations.d.ts.map +1 -1
  17. package/dist/src/analysis/assumptions/confirmations.js +1 -6
  18. package/dist/src/analysis/assumptions/confirmations.js.map +1 -1
  19. package/dist/src/analysis/assumptions/effect-assumptions.d.ts +5 -15
  20. package/dist/src/analysis/assumptions/effect-assumptions.d.ts.map +1 -1
  21. package/dist/src/analysis/assumptions/effect-assumptions.js +33 -76
  22. package/dist/src/analysis/assumptions/effect-assumptions.js.map +1 -1
  23. package/dist/src/analysis/assumptions/group-assumptions.d.ts +0 -1
  24. package/dist/src/analysis/assumptions/group-assumptions.d.ts.map +1 -1
  25. package/dist/src/analysis/assumptions/group-assumptions.js +10 -23
  26. package/dist/src/analysis/assumptions/group-assumptions.js.map +1 -1
  27. package/dist/src/analysis/assumptions/hypotheses.d.ts.map +1 -1
  28. package/dist/src/analysis/assumptions/hypotheses.js +49 -14
  29. package/dist/src/analysis/assumptions/hypotheses.js.map +1 -1
  30. package/dist/src/analysis/assumptions/review-assumptions.d.ts.map +1 -1
  31. package/dist/src/analysis/assumptions/review-assumptions.js +16 -2
  32. package/dist/src/analysis/assumptions/review-assumptions.js.map +1 -1
  33. package/dist/src/analysis/assumptions/state-assumptions.d.ts +3 -2
  34. package/dist/src/analysis/assumptions/state-assumptions.d.ts.map +1 -1
  35. package/dist/src/analysis/assumptions/state-assumptions.js +11 -3
  36. package/dist/src/analysis/assumptions/state-assumptions.js.map +1 -1
  37. package/dist/src/analysis/assumptions/verification.d.ts.map +1 -1
  38. package/dist/src/analysis/assumptions/verification.js +17 -6
  39. package/dist/src/analysis/assumptions/verification.js.map +1 -1
  40. package/dist/src/analysis/ast-helpers.d.ts +8 -3
  41. package/dist/src/analysis/ast-helpers.d.ts.map +1 -1
  42. package/dist/src/analysis/ast-helpers.js +43 -20
  43. package/dist/src/analysis/ast-helpers.js.map +1 -1
  44. package/dist/src/analysis/branch-unmount.js +2 -11
  45. package/dist/src/analysis/branch-unmount.js.map +1 -1
  46. package/dist/src/analysis/callbacks/deferred-events.d.ts +2 -0
  47. package/dist/src/analysis/callbacks/deferred-events.d.ts.map +1 -1
  48. package/dist/src/analysis/callbacks/deferred-events.js +7 -10
  49. package/dist/src/analysis/callbacks/deferred-events.js.map +1 -1
  50. package/dist/src/analysis/callbacks/local-callbacks.d.ts.map +1 -1
  51. package/dist/src/analysis/callbacks/local-callbacks.js +2 -8
  52. package/dist/src/analysis/callbacks/local-callbacks.js.map +1 -1
  53. package/dist/src/analysis/callbacks/memoized-options.d.ts +2 -0
  54. package/dist/src/analysis/callbacks/memoized-options.d.ts.map +1 -1
  55. package/dist/src/analysis/callbacks/memoized-options.js +5 -10
  56. package/dist/src/analysis/callbacks/memoized-options.js.map +1 -1
  57. package/dist/src/analysis/candidates.d.ts.map +1 -1
  58. package/dist/src/analysis/candidates.js +3 -9
  59. package/dist/src/analysis/candidates.js.map +1 -1
  60. package/dist/src/analysis/clusters/cowritten-clusters.d.ts +1 -0
  61. package/dist/src/analysis/clusters/cowritten-clusters.d.ts.map +1 -1
  62. package/dist/src/analysis/clusters/cowritten-clusters.js +34 -10
  63. package/dist/src/analysis/clusters/cowritten-clusters.js.map +1 -1
  64. package/dist/src/analysis/clusters/cowritten-edit.d.ts +13 -0
  65. package/dist/src/analysis/clusters/cowritten-edit.d.ts.map +1 -0
  66. package/dist/src/analysis/clusters/cowritten-edit.js +55 -0
  67. package/dist/src/analysis/clusters/cowritten-edit.js.map +1 -0
  68. package/dist/src/analysis/clusters/gated-feedback-cluster.d.ts.map +1 -1
  69. package/dist/src/analysis/clusters/gated-feedback-cluster.js +5 -2
  70. package/dist/src/analysis/clusters/gated-feedback-cluster.js.map +1 -1
  71. package/dist/src/analysis/clusters/observable-clusters.d.ts +2 -2
  72. package/dist/src/analysis/clusters/observable-clusters.d.ts.map +1 -1
  73. package/dist/src/analysis/clusters/observable-clusters.js +15 -19
  74. package/dist/src/analysis/clusters/observable-clusters.js.map +1 -1
  75. package/dist/src/analysis/clusters/scalar-dialog-cluster.d.ts.map +1 -1
  76. package/dist/src/analysis/clusters/scalar-dialog-cluster.js +1 -1
  77. package/dist/src/analysis/clusters/scalar-dialog-cluster.js.map +1 -1
  78. package/dist/src/analysis/clusters/subtree-clusters.d.ts +1 -1
  79. package/dist/src/analysis/clusters/subtree-clusters.d.ts.map +1 -1
  80. package/dist/src/analysis/clusters/subtree-clusters.js +4 -4
  81. package/dist/src/analysis/clusters/subtree-clusters.js.map +1 -1
  82. package/dist/src/analysis/clusters/text-draft-cluster.d.ts.map +1 -1
  83. package/dist/src/analysis/clusters/text-draft-cluster.js +2 -11
  84. package/dist/src/analysis/clusters/text-draft-cluster.js.map +1 -1
  85. package/dist/src/analysis/commands/effect-owned-presentation.d.ts.map +1 -1
  86. package/dist/src/analysis/commands/effect-owned-presentation.js +2 -8
  87. package/dist/src/analysis/commands/effect-owned-presentation.js.map +1 -1
  88. package/dist/src/analysis/commands/memoized-option-command.d.ts +0 -2
  89. package/dist/src/analysis/commands/memoized-option-command.d.ts.map +1 -1
  90. package/dist/src/analysis/commands/memoized-option-command.js +4 -15
  91. package/dist/src/analysis/commands/memoized-option-command.js.map +1 -1
  92. package/dist/src/analysis/commands/reactive-mutation-paths.d.ts.map +1 -1
  93. package/dist/src/analysis/commands/reactive-mutation-paths.js +1 -2
  94. package/dist/src/analysis/commands/reactive-mutation-paths.js.map +1 -1
  95. package/dist/src/analysis/commands/self-refreshing-command.d.ts.map +1 -1
  96. package/dist/src/analysis/commands/self-refreshing-command.js +2 -8
  97. package/dist/src/analysis/commands/self-refreshing-command.js.map +1 -1
  98. package/dist/src/analysis/commit-sensitive-state.d.ts +2 -0
  99. package/dist/src/analysis/commit-sensitive-state.d.ts.map +1 -1
  100. package/dist/src/analysis/commit-sensitive-state.js +13 -0
  101. package/dist/src/analysis/commit-sensitive-state.js.map +1 -1
  102. package/dist/src/analysis/companion-writes.d.ts.map +1 -1
  103. package/dist/src/analysis/companion-writes.js +2 -10
  104. package/dist/src/analysis/companion-writes.js.map +1 -1
  105. package/dist/src/analysis/constants.d.ts +2 -1
  106. package/dist/src/analysis/constants.d.ts.map +1 -1
  107. package/dist/src/analysis/constants.js +9 -1
  108. package/dist/src/analysis/constants.js.map +1 -1
  109. package/dist/src/analysis/context/context-held-state.d.ts.map +1 -1
  110. package/dist/src/analysis/context/context-held-state.js +40 -56
  111. package/dist/src/analysis/context/context-held-state.js.map +1 -1
  112. package/dist/src/analysis/controlled-leaf-call-site.js +2 -13
  113. package/dist/src/analysis/controlled-leaf-call-site.js.map +1 -1
  114. package/dist/src/analysis/controlled-leaf-cuts.d.ts.map +1 -1
  115. package/dist/src/analysis/controlled-leaf-cuts.js +4 -2
  116. package/dist/src/analysis/controlled-leaf-cuts.js.map +1 -1
  117. package/dist/src/analysis/delayed-pending.js +2 -5
  118. package/dist/src/analysis/delayed-pending.js.map +1 -1
  119. package/dist/src/analysis/dialog/dialog-gates.d.ts.map +1 -1
  120. package/dist/src/analysis/dialog/dialog-gates.js +5 -3
  121. package/dist/src/analysis/dialog/dialog-gates.js.map +1 -1
  122. package/dist/src/analysis/dialog/nullable-payload-cut.d.ts.map +1 -1
  123. package/dist/src/analysis/dialog/nullable-payload-cut.js +3 -2
  124. package/dist/src/analysis/dialog/nullable-payload-cut.js.map +1 -1
  125. package/dist/src/analysis/discard-confidence.d.ts.map +1 -1
  126. package/dist/src/analysis/discard-confidence.js +4 -15
  127. package/dist/src/analysis/discard-confidence.js.map +1 -1
  128. package/dist/src/analysis/effect-findings.d.ts +1 -1
  129. package/dist/src/analysis/effect-findings.d.ts.map +1 -1
  130. package/dist/src/analysis/effect-findings.js +89 -18
  131. package/dist/src/analysis/effect-findings.js.map +1 -1
  132. package/dist/src/analysis/filter/collection-work.d.ts +0 -1
  133. package/dist/src/analysis/filter/collection-work.d.ts.map +1 -1
  134. package/dist/src/analysis/filter/collection-work.js +4 -16
  135. package/dist/src/analysis/filter/collection-work.js.map +1 -1
  136. package/dist/src/analysis/filter/filter-leaf-cut.d.ts.map +1 -1
  137. package/dist/src/analysis/filter/filter-leaf-cut.js +11 -22
  138. package/dist/src/analysis/filter/filter-leaf-cut.js.map +1 -1
  139. package/dist/src/analysis/finding-clusters.d.ts.map +1 -1
  140. package/dist/src/analysis/finding-clusters.js +7 -2
  141. package/dist/src/analysis/finding-clusters.js.map +1 -1
  142. package/dist/src/analysis/findings.d.ts.map +1 -1
  143. package/dist/src/analysis/findings.js +66 -19
  144. package/dist/src/analysis/findings.js.map +1 -1
  145. package/dist/src/analysis/lone-write-stretches.d.ts +9 -0
  146. package/dist/src/analysis/lone-write-stretches.d.ts.map +1 -0
  147. package/dist/src/analysis/lone-write-stretches.js +226 -0
  148. package/dist/src/analysis/lone-write-stretches.js.map +1 -0
  149. package/dist/src/analysis/membership-toggle.d.ts.map +1 -1
  150. package/dist/src/analysis/membership-toggle.js +1 -5
  151. package/dist/src/analysis/membership-toggle.js.map +1 -1
  152. package/dist/src/analysis/model.d.ts +9 -0
  153. package/dist/src/analysis/model.d.ts.map +1 -1
  154. package/dist/src/analysis/owner-bindings.js +1 -1
  155. package/dist/src/analysis/owner-bindings.js.map +1 -1
  156. package/dist/src/analysis/owner-scan.d.ts +0 -1
  157. package/dist/src/analysis/owner-scan.d.ts.map +1 -1
  158. package/dist/src/analysis/owner-scan.js +0 -32
  159. package/dist/src/analysis/owner-scan.js.map +1 -1
  160. package/dist/src/analysis/proofs/cluster-proofs.d.ts.map +1 -1
  161. package/dist/src/analysis/proofs/cluster-proofs.js +23 -13
  162. package/dist/src/analysis/proofs/cluster-proofs.js.map +1 -1
  163. package/dist/src/analysis/proofs/contracts.d.ts +5 -3
  164. package/dist/src/analysis/proofs/contracts.d.ts.map +1 -1
  165. package/dist/src/analysis/proofs/effect-proofs.js +2 -2
  166. package/dist/src/analysis/proofs/effect-proofs.js.map +1 -1
  167. package/dist/src/analysis/proofs/event-callbacks.js +1 -1
  168. package/dist/src/analysis/proofs/event-callbacks.js.map +1 -1
  169. package/dist/src/analysis/proofs/ownership-proofs.d.ts.map +1 -1
  170. package/dist/src/analysis/proofs/ownership-proofs.js +2 -0
  171. package/dist/src/analysis/proofs/ownership-proofs.js.map +1 -1
  172. package/dist/src/analysis/proofs/rule-proofs.d.ts.map +1 -1
  173. package/dist/src/analysis/proofs/rule-proofs.js +2 -0
  174. package/dist/src/analysis/proofs/rule-proofs.js.map +1 -1
  175. package/dist/src/analysis/render-phase-writes.d.ts +3 -0
  176. package/dist/src/analysis/render-phase-writes.d.ts.map +1 -0
  177. package/dist/src/analysis/render-phase-writes.js +62 -0
  178. package/dist/src/analysis/render-phase-writes.js.map +1 -0
  179. package/dist/src/analysis/return-call-sites.d.ts +1 -0
  180. package/dist/src/analysis/return-call-sites.d.ts.map +1 -1
  181. package/dist/src/analysis/return-call-sites.js +1 -1
  182. package/dist/src/analysis/return-call-sites.js.map +1 -1
  183. package/dist/src/analysis/review-guidance.js +1 -1
  184. package/dist/src/analysis/review-guidance.js.map +1 -1
  185. package/dist/src/analysis/sibling-render-cut.d.ts +5 -1
  186. package/dist/src/analysis/sibling-render-cut.d.ts.map +1 -1
  187. package/dist/src/analysis/sibling-render-cut.js +11 -9
  188. package/dist/src/analysis/sibling-render-cut.js.map +1 -1
  189. package/dist/src/analysis/split-commit-companions.d.ts +12 -0
  190. package/dist/src/analysis/split-commit-companions.d.ts.map +1 -0
  191. package/dist/src/analysis/split-commit-companions.js +94 -0
  192. package/dist/src/analysis/split-commit-companions.js.map +1 -0
  193. package/dist/src/analysis/state-usage.d.ts.map +1 -1
  194. package/dist/src/analysis/state-usage.js +14 -6
  195. package/dist/src/analysis/state-usage.js.map +1 -1
  196. package/dist/src/analysis/subtree/analyze-subtree.d.ts.map +1 -1
  197. package/dist/src/analysis/subtree/analyze-subtree.js +23 -16
  198. package/dist/src/analysis/subtree/analyze-subtree.js.map +1 -1
  199. package/dist/src/analysis/subtree/effect-split.d.ts.map +1 -1
  200. package/dist/src/analysis/subtree/effect-split.js +8 -5
  201. package/dist/src/analysis/subtree/effect-split.js.map +1 -1
  202. package/dist/src/analysis/subtree/extracted-render-work.d.ts +11 -0
  203. package/dist/src/analysis/subtree/extracted-render-work.d.ts.map +1 -0
  204. package/dist/src/analysis/subtree/extracted-render-work.js +197 -0
  205. package/dist/src/analysis/subtree/extracted-render-work.js.map +1 -0
  206. package/dist/src/analysis/subtree/materiality.d.ts +1 -1
  207. package/dist/src/analysis/subtree/materiality.d.ts.map +1 -1
  208. package/dist/src/analysis/subtree/materiality.js +5 -3
  209. package/dist/src/analysis/subtree/materiality.js.map +1 -1
  210. package/dist/src/analysis/subtree/projection-writes.d.ts.map +1 -1
  211. package/dist/src/analysis/subtree/projection-writes.js +7 -33
  212. package/dist/src/analysis/subtree/projection-writes.js.map +1 -1
  213. package/dist/src/analysis/transition-evidence.d.ts +4 -1
  214. package/dist/src/analysis/transition-evidence.d.ts.map +1 -1
  215. package/dist/src/analysis/transition-evidence.js +7 -3
  216. package/dist/src/analysis/transition-evidence.js.map +1 -1
  217. package/dist/src/analysis/verdicts/callee-transitions.d.ts +10 -0
  218. package/dist/src/analysis/verdicts/callee-transitions.d.ts.map +1 -0
  219. package/dist/src/analysis/verdicts/callee-transitions.js +98 -0
  220. package/dist/src/analysis/verdicts/callee-transitions.js.map +1 -0
  221. package/dist/src/analysis/verdicts/classification-context.d.ts +11 -0
  222. package/dist/src/analysis/verdicts/classification-context.d.ts.map +1 -1
  223. package/dist/src/analysis/verdicts/classification-context.js +15 -0
  224. package/dist/src/analysis/verdicts/classification-context.js.map +1 -1
  225. package/dist/src/analysis/verdicts/classify-state.d.ts.map +1 -1
  226. package/dist/src/analysis/verdicts/classify-state.js +22 -1
  227. package/dist/src/analysis/verdicts/classify-state.js.map +1 -1
  228. package/dist/src/analysis/verdicts/control-flow-gate.d.ts +9 -0
  229. package/dist/src/analysis/verdicts/control-flow-gate.d.ts.map +1 -0
  230. package/dist/src/analysis/verdicts/control-flow-gate.js +66 -0
  231. package/dist/src/analysis/verdicts/control-flow-gate.js.map +1 -0
  232. package/dist/src/analysis/verdicts/controlled-verdicts.d.ts.map +1 -1
  233. package/dist/src/analysis/verdicts/controlled-verdicts.js +3 -1
  234. package/dist/src/analysis/verdicts/controlled-verdicts.js.map +1 -1
  235. package/dist/src/analysis/verdicts/intrinsic-verdicts.d.ts.map +1 -1
  236. package/dist/src/analysis/verdicts/intrinsic-verdicts.js +6 -5
  237. package/dist/src/analysis/verdicts/intrinsic-verdicts.js.map +1 -1
  238. package/dist/src/analysis/verdicts/mount-identity.d.ts +17 -0
  239. package/dist/src/analysis/verdicts/mount-identity.d.ts.map +1 -0
  240. package/dist/src/analysis/verdicts/mount-identity.js +211 -0
  241. package/dist/src/analysis/verdicts/mount-identity.js.map +1 -0
  242. package/dist/src/analysis/verdicts/no-smaller-boundary.d.ts +9 -0
  243. package/dist/src/analysis/verdicts/no-smaller-boundary.d.ts.map +1 -0
  244. package/dist/src/analysis/verdicts/no-smaller-boundary.js +132 -0
  245. package/dist/src/analysis/verdicts/no-smaller-boundary.js.map +1 -0
  246. package/dist/src/analysis/verdicts/pass-through-leaf.d.ts +24 -0
  247. package/dist/src/analysis/verdicts/pass-through-leaf.d.ts.map +1 -0
  248. package/dist/src/analysis/verdicts/pass-through-leaf.js +62 -0
  249. package/dist/src/analysis/verdicts/pass-through-leaf.js.map +1 -0
  250. package/dist/src/analysis/verdicts/residual-verdicts.d.ts.map +1 -1
  251. package/dist/src/analysis/verdicts/residual-verdicts.js +40 -13
  252. package/dist/src/analysis/verdicts/residual-verdicts.js.map +1 -1
  253. package/dist/src/analysis/verdicts/setter-forwarding.d.ts.map +1 -1
  254. package/dist/src/analysis/verdicts/setter-forwarding.js +1 -1
  255. package/dist/src/analysis/verdicts/setter-forwarding.js.map +1 -1
  256. package/dist/src/analysis/verdicts/site-subscription-verdict.d.ts +16 -10
  257. package/dist/src/analysis/verdicts/site-subscription-verdict.d.ts.map +1 -1
  258. package/dist/src/analysis/verdicts/site-subscription-verdict.js +46 -44
  259. package/dist/src/analysis/verdicts/site-subscription-verdict.js.map +1 -1
  260. package/dist/src/analysis/verdicts/site-write-roots.d.ts +7 -0
  261. package/dist/src/analysis/verdicts/site-write-roots.d.ts.map +1 -1
  262. package/dist/src/analysis/verdicts/site-write-roots.js +19 -13
  263. package/dist/src/analysis/verdicts/site-write-roots.js.map +1 -1
  264. package/dist/src/analysis/verdicts/split-commit-verdict.d.ts +8 -0
  265. package/dist/src/analysis/verdicts/split-commit-verdict.d.ts.map +1 -0
  266. package/dist/src/analysis/verdicts/split-commit-verdict.js +18 -0
  267. package/dist/src/analysis/verdicts/split-commit-verdict.js.map +1 -0
  268. package/dist/src/analysis/verdicts/subtree-verdicts.d.ts.map +1 -1
  269. package/dist/src/analysis/verdicts/subtree-verdicts.js +19 -9
  270. package/dist/src/analysis/verdicts/subtree-verdicts.js.map +1 -1
  271. package/dist/src/analysis/verdicts/transport-mount-identity.d.ts +16 -0
  272. package/dist/src/analysis/verdicts/transport-mount-identity.d.ts.map +1 -0
  273. package/dist/src/analysis/verdicts/transport-mount-identity.js +57 -0
  274. package/dist/src/analysis/verdicts/transport-mount-identity.js.map +1 -0
  275. package/dist/src/analysis/verdicts/transport-verdicts.d.ts +22 -0
  276. package/dist/src/analysis/verdicts/transport-verdicts.d.ts.map +1 -1
  277. package/dist/src/analysis/verdicts/transport-verdicts.js +71 -9
  278. package/dist/src/analysis/verdicts/transport-verdicts.js.map +1 -1
  279. package/dist/src/analysis/verdicts/wrap-site-verdict.d.ts +13 -0
  280. package/dist/src/analysis/verdicts/wrap-site-verdict.d.ts.map +1 -0
  281. package/dist/src/analysis/verdicts/wrap-site-verdict.js +195 -0
  282. package/dist/src/analysis/verdicts/wrap-site-verdict.js.map +1 -0
  283. package/dist/src/cli/config.d.ts +0 -2
  284. package/dist/src/cli/config.d.ts.map +1 -1
  285. package/dist/src/cli/config.js +3 -8
  286. package/dist/src/cli/config.js.map +1 -1
  287. package/dist/src/cli/failures.d.ts +2 -1
  288. package/dist/src/cli/failures.d.ts.map +1 -1
  289. package/dist/src/cli/failures.js +7 -0
  290. package/dist/src/cli/failures.js.map +1 -1
  291. package/dist/src/cli/help.d.ts +1 -1
  292. package/dist/src/cli/help.d.ts.map +1 -1
  293. package/dist/src/cli/help.js +16 -12
  294. package/dist/src/cli/help.js.map +1 -1
  295. package/dist/src/cli/options.d.ts.map +1 -1
  296. package/dist/src/cli/options.js +6 -38
  297. package/dist/src/cli/options.js.map +1 -1
  298. package/dist/src/cli.js +8 -3
  299. package/dist/src/cli.js.map +1 -1
  300. package/dist/src/core/analysis-ast.d.ts +8 -1
  301. package/dist/src/core/analysis-ast.d.ts.map +1 -1
  302. package/dist/src/core/analysis-ast.js +41 -0
  303. package/dist/src/core/analysis-ast.js.map +1 -1
  304. package/dist/src/core/ast.d.ts +5 -0
  305. package/dist/src/core/ast.d.ts.map +1 -1
  306. package/dist/src/core/ast.js +49 -24
  307. package/dist/src/core/ast.js.map +1 -1
  308. package/dist/src/core/binding-references.d.ts +11 -0
  309. package/dist/src/core/binding-references.d.ts.map +1 -0
  310. package/dist/src/core/binding-references.js +68 -0
  311. package/dist/src/core/binding-references.js.map +1 -0
  312. package/dist/src/core/execution-units.d.ts +27 -0
  313. package/dist/src/core/execution-units.d.ts.map +1 -0
  314. package/dist/src/core/execution-units.js +97 -0
  315. package/dist/src/core/execution-units.js.map +1 -0
  316. package/dist/src/core/imports.d.ts +7 -3
  317. package/dist/src/core/imports.d.ts.map +1 -1
  318. package/dist/src/core/imports.js +25 -3
  319. package/dist/src/core/imports.js.map +1 -1
  320. package/dist/src/core/json.d.ts +9 -0
  321. package/dist/src/core/json.d.ts.map +1 -0
  322. package/dist/src/core/json.js +17 -0
  323. package/dist/src/core/json.js.map +1 -0
  324. package/dist/src/core/lexical-bindings.d.ts +27 -0
  325. package/dist/src/core/lexical-bindings.d.ts.map +1 -0
  326. package/dist/src/core/lexical-bindings.js +194 -0
  327. package/dist/src/core/lexical-bindings.js.map +1 -0
  328. package/dist/src/core/path-identity.d.ts +5 -1
  329. package/dist/src/core/path-identity.d.ts.map +1 -1
  330. package/dist/src/core/path-identity.js +19 -5
  331. package/dist/src/core/path-identity.js.map +1 -1
  332. package/dist/src/core/react-compiler-units.d.ts +9 -0
  333. package/dist/src/core/react-compiler-units.d.ts.map +1 -0
  334. package/dist/src/core/react-compiler-units.js +244 -0
  335. package/dist/src/core/react-compiler-units.js.map +1 -0
  336. package/dist/src/core/react-component-wrappers.d.ts.map +1 -1
  337. package/dist/src/core/react-component-wrappers.js +19 -9
  338. package/dist/src/core/react-component-wrappers.js.map +1 -1
  339. package/dist/src/core/render-output.d.ts +10 -0
  340. package/dist/src/core/render-output.d.ts.map +1 -0
  341. package/dist/src/core/render-output.js +67 -0
  342. package/dist/src/core/render-output.js.map +1 -0
  343. package/dist/src/core/scope-references.d.ts +9 -0
  344. package/dist/src/core/scope-references.d.ts.map +1 -0
  345. package/dist/src/core/scope-references.js +97 -0
  346. package/dist/src/core/scope-references.js.map +1 -0
  347. package/dist/src/core/subscriptions.d.ts +32 -4
  348. package/dist/src/core/subscriptions.d.ts.map +1 -1
  349. package/dist/src/core/subscriptions.js +61 -1
  350. package/dist/src/core/subscriptions.js.map +1 -1
  351. package/dist/src/core/text-edits.d.ts +22 -0
  352. package/dist/src/core/text-edits.d.ts.map +1 -0
  353. package/dist/src/core/text-edits.js +83 -0
  354. package/dist/src/core/text-edits.js.map +1 -0
  355. package/dist/src/core/types.d.ts +66 -24
  356. package/dist/src/core/types.d.ts.map +1 -1
  357. package/dist/src/core/types.js +86 -2
  358. package/dist/src/core/types.js.map +1 -1
  359. package/dist/src/core/use-value-import.d.ts +46 -0
  360. package/dist/src/core/use-value-import.d.ts.map +1 -0
  361. package/dist/src/core/use-value-import.js +139 -0
  362. package/dist/src/core/use-value-import.js.map +1 -0
  363. package/dist/src/practices/analyze-legend-practices.d.ts +16 -4
  364. package/dist/src/practices/analyze-legend-practices.d.ts.map +1 -1
  365. package/dist/src/practices/analyze-legend-practices.js +71 -29
  366. package/dist/src/practices/analyze-legend-practices.js.map +1 -1
  367. package/dist/src/practices/model.d.ts +21 -0
  368. package/dist/src/practices/model.d.ts.map +1 -1
  369. package/dist/src/practices/observable-bindings.d.ts.map +1 -1
  370. package/dist/src/practices/observable-bindings.js +178 -45
  371. package/dist/src/practices/observable-bindings.js.map +1 -1
  372. package/dist/src/practices/observable-paths.d.ts.map +1 -1
  373. package/dist/src/practices/observable-paths.js +20 -3
  374. package/dist/src/practices/observable-paths.js.map +1 -1
  375. package/dist/src/practices/observable-prop-types.d.ts +9 -0
  376. package/dist/src/practices/observable-prop-types.d.ts.map +1 -0
  377. package/dist/src/practices/observable-prop-types.js +111 -0
  378. package/dist/src/practices/observable-prop-types.js.map +1 -0
  379. package/dist/src/practices/observable-trackers.d.ts +11 -0
  380. package/dist/src/practices/observable-trackers.d.ts.map +1 -0
  381. package/dist/src/practices/observable-trackers.js +58 -0
  382. package/dist/src/practices/observable-trackers.js.map +1 -0
  383. package/dist/src/practices/observable-writes.d.ts.map +1 -1
  384. package/dist/src/practices/observable-writes.js +1 -10
  385. package/dist/src/practices/observable-writes.js.map +1 -1
  386. package/dist/src/practices/practice-rules.d.ts +7 -3
  387. package/dist/src/practices/practice-rules.d.ts.map +1 -1
  388. package/dist/src/practices/practice-rules.js +60 -31
  389. package/dist/src/practices/practice-rules.js.map +1 -1
  390. package/dist/src/practices/sole-binding-facts.d.ts +7 -0
  391. package/dist/src/practices/sole-binding-facts.d.ts.map +1 -0
  392. package/dist/src/practices/sole-binding-facts.js +18 -0
  393. package/dist/src/practices/sole-binding-facts.js.map +1 -0
  394. package/dist/src/practices/transaction-findings.d.ts +6 -1
  395. package/dist/src/practices/transaction-findings.d.ts.map +1 -1
  396. package/dist/src/practices/transaction-findings.js +13 -12
  397. package/dist/src/practices/transaction-findings.js.map +1 -1
  398. package/dist/src/practices/transaction-runs.d.ts.map +1 -1
  399. package/dist/src/practices/transaction-runs.js +9 -3
  400. package/dist/src/practices/transaction-runs.js.map +1 -1
  401. package/dist/src/project/analysis-coverage.d.ts +1 -1
  402. package/dist/src/project/analysis-coverage.d.ts.map +1 -1
  403. package/dist/src/project/analysis-coverage.js +2 -7
  404. package/dist/src/project/analysis-coverage.js.map +1 -1
  405. package/dist/src/project/analysis-project.d.ts +4 -1
  406. package/dist/src/project/analysis-project.d.ts.map +1 -1
  407. package/dist/src/project/analysis-project.js +26 -10
  408. package/dist/src/project/analysis-project.js.map +1 -1
  409. package/dist/src/project/analyze-path/analysis-context.d.ts +3 -2
  410. package/dist/src/project/analyze-path/analysis-context.d.ts.map +1 -1
  411. package/dist/src/project/analyze-path/analysis-context.js +9 -4
  412. package/dist/src/project/analyze-path/analysis-context.js.map +1 -1
  413. package/dist/src/project/analyze-path/analysis-pass.d.ts +5 -10
  414. package/dist/src/project/analyze-path/analysis-pass.d.ts.map +1 -1
  415. package/dist/src/project/analyze-path/analysis-pass.js +64 -39
  416. package/dist/src/project/analyze-path/analysis-pass.js.map +1 -1
  417. package/dist/src/project/analyze-path/analyze-path.d.ts.map +1 -1
  418. package/dist/src/project/analyze-path/analyze-path.js +10 -4
  419. package/dist/src/project/analyze-path/analyze-path.js.map +1 -1
  420. package/dist/src/project/analyze-path/child-contracts.d.ts.map +1 -1
  421. package/dist/src/project/analyze-path/child-contracts.js +39 -33
  422. package/dist/src/project/analyze-path/child-contracts.js.map +1 -1
  423. package/dist/src/project/analyze-path/component-prop-data.d.ts.map +1 -1
  424. package/dist/src/project/analyze-path/component-prop-data.js +10 -85
  425. package/dist/src/project/analyze-path/component-prop-data.js.map +1 -1
  426. package/dist/src/project/analyze-path/component-references.d.ts +15 -0
  427. package/dist/src/project/analyze-path/component-references.d.ts.map +1 -0
  428. package/dist/src/project/analyze-path/component-references.js +74 -0
  429. package/dist/src/project/analyze-path/component-references.js.map +1 -0
  430. package/dist/src/project/analyze-path/contract-cache.d.ts +2 -0
  431. package/dist/src/project/analyze-path/contract-cache.d.ts.map +1 -0
  432. package/dist/src/project/analyze-path/contract-cache.js +10 -0
  433. package/dist/src/project/analyze-path/contract-cache.js.map +1 -0
  434. package/dist/src/project/analyze-path/file-results.d.ts +14 -0
  435. package/dist/src/project/analyze-path/file-results.d.ts.map +1 -0
  436. package/dist/src/project/analyze-path/file-results.js +21 -0
  437. package/dist/src/project/analyze-path/file-results.js.map +1 -0
  438. package/dist/src/project/analyze-path/hook-closure-index.d.ts +44 -0
  439. package/dist/src/project/analyze-path/hook-closure-index.d.ts.map +1 -0
  440. package/dist/src/project/analyze-path/hook-closure-index.js +262 -0
  441. package/dist/src/project/analyze-path/hook-closure-index.js.map +1 -0
  442. package/dist/src/project/analyze-path/hook-closure-outside.d.ts +13 -0
  443. package/dist/src/project/analyze-path/hook-closure-outside.d.ts.map +1 -0
  444. package/dist/src/project/analyze-path/hook-closure-outside.js +54 -0
  445. package/dist/src/project/analyze-path/hook-closure-outside.js.map +1 -0
  446. package/dist/src/project/analyze-path/hook-consumer-closure.d.ts +30 -0
  447. package/dist/src/project/analyze-path/hook-consumer-closure.d.ts.map +1 -0
  448. package/dist/src/project/analyze-path/hook-consumer-closure.js +184 -0
  449. package/dist/src/project/analyze-path/hook-consumer-closure.js.map +1 -0
  450. package/dist/src/project/analyze-path/hook-consumers.d.ts.map +1 -1
  451. package/dist/src/project/analyze-path/hook-consumers.js +9 -4
  452. package/dist/src/project/analyze-path/hook-consumers.js.map +1 -1
  453. package/dist/src/project/analyze-path/parent-rerenders.d.ts +27 -0
  454. package/dist/src/project/analyze-path/parent-rerenders.d.ts.map +1 -0
  455. package/dist/src/project/analyze-path/parent-rerenders.js +267 -0
  456. package/dist/src/project/analyze-path/parent-rerenders.js.map +1 -0
  457. package/dist/src/project/analyze-path/source-declarations.d.ts +3 -0
  458. package/dist/src/project/analyze-path/source-declarations.d.ts.map +1 -1
  459. package/dist/src/project/analyze-path/source-declarations.js +22 -0
  460. package/dist/src/project/analyze-path/source-declarations.js.map +1 -1
  461. package/dist/src/project/analyze-path/unreferenced-components.d.ts +11 -0
  462. package/dist/src/project/analyze-path/unreferenced-components.d.ts.map +1 -0
  463. package/dist/src/project/analyze-path/unreferenced-components.js +135 -0
  464. package/dist/src/project/analyze-path/unreferenced-components.js.map +1 -0
  465. package/dist/src/project/capabilities.d.ts +3 -2
  466. package/dist/src/project/capabilities.d.ts.map +1 -1
  467. package/dist/src/project/capabilities.js +8 -1
  468. package/dist/src/project/capabilities.js.map +1 -1
  469. package/dist/src/project/git-scope.d.ts +0 -1
  470. package/dist/src/project/git-scope.d.ts.map +1 -1
  471. package/dist/src/project/git-scope.js.map +1 -1
  472. package/dist/src/project/react-compiler-package.d.ts +14 -4
  473. package/dist/src/project/react-compiler-package.d.ts.map +1 -1
  474. package/dist/src/project/react-compiler-package.js +36 -45
  475. package/dist/src/project/react-compiler-package.js.map +1 -1
  476. package/dist/src/project/read-optional-text.d.ts +3 -0
  477. package/dist/src/project/read-optional-text.d.ts.map +1 -0
  478. package/dist/src/project/read-optional-text.js +11 -0
  479. package/dist/src/project/read-optional-text.js.map +1 -0
  480. package/dist/src/project/scan-failure.d.ts +11 -0
  481. package/dist/src/project/scan-failure.d.ts.map +1 -0
  482. package/dist/src/project/scan-failure.js +11 -0
  483. package/dist/src/project/scan-failure.js.map +1 -0
  484. package/dist/src/project/source-components/context-readers.d.ts +6 -0
  485. package/dist/src/project/source-components/context-readers.d.ts.map +1 -1
  486. package/dist/src/project/source-components/context-readers.js +64 -16
  487. package/dist/src/project/source-components/context-readers.js.map +1 -1
  488. package/dist/src/project/source-components/context-value-stability.d.ts +19 -0
  489. package/dist/src/project/source-components/context-value-stability.d.ts.map +1 -0
  490. package/dist/src/project/source-components/context-value-stability.js +87 -0
  491. package/dist/src/project/source-components/context-value-stability.js.map +1 -0
  492. package/dist/src/project/source-components/declaration-shapes.d.ts +0 -1
  493. package/dist/src/project/source-components/declaration-shapes.d.ts.map +1 -1
  494. package/dist/src/project/source-components/declaration-shapes.js +1 -11
  495. package/dist/src/project/source-components/declaration-shapes.js.map +1 -1
  496. package/dist/src/project/source-components/deferred-registrations.d.ts.map +1 -1
  497. package/dist/src/project/source-components/deferred-registrations.js +1 -2
  498. package/dist/src/project/source-components/deferred-registrations.js.map +1 -1
  499. package/dist/src/project/source-components/function-declarations.d.ts.map +1 -1
  500. package/dist/src/project/source-components/function-declarations.js +4 -4
  501. package/dist/src/project/source-components/function-declarations.js.map +1 -1
  502. package/dist/src/project/source-components/function-references.d.ts +16 -0
  503. package/dist/src/project/source-components/function-references.d.ts.map +1 -0
  504. package/dist/src/project/source-components/function-references.js +88 -0
  505. package/dist/src/project/source-components/function-references.js.map +1 -0
  506. package/dist/src/project/source-components/import-signals.d.ts.map +1 -1
  507. package/dist/src/project/source-components/import-signals.js +5 -1
  508. package/dist/src/project/source-components/import-signals.js.map +1 -1
  509. package/dist/src/project/source-components/legend-value-bridges.js +1 -1
  510. package/dist/src/project/source-components/legend-value-bridges.js.map +1 -1
  511. package/dist/src/project/source-components/model.d.ts +18 -1
  512. package/dist/src/project/source-components/model.d.ts.map +1 -1
  513. package/dist/src/project/source-components/module-bindings.d.ts +5 -1
  514. package/dist/src/project/source-components/module-bindings.d.ts.map +1 -1
  515. package/dist/src/project/source-components/module-bindings.js +45 -11
  516. package/dist/src/project/source-components/module-bindings.js.map +1 -1
  517. package/dist/src/project/source-components/module-record.d.ts.map +1 -1
  518. package/dist/src/project/source-components/module-record.js +16 -0
  519. package/dist/src/project/source-components/module-record.js.map +1 -1
  520. package/dist/src/project/source-components/module-resolution.d.ts +7 -2
  521. package/dist/src/project/source-components/module-resolution.d.ts.map +1 -1
  522. package/dist/src/project/source-components/module-resolution.js +7 -0
  523. package/dist/src/project/source-components/module-resolution.js.map +1 -1
  524. package/dist/src/project/source-components/observable-containers.d.ts.map +1 -1
  525. package/dist/src/project/source-components/observable-containers.js +2 -13
  526. package/dist/src/project/source-components/observable-containers.js.map +1 -1
  527. package/dist/src/project/source-components/observable-contexts.d.ts +13 -0
  528. package/dist/src/project/source-components/observable-contexts.d.ts.map +1 -0
  529. package/dist/src/project/source-components/observable-contexts.js +84 -0
  530. package/dist/src/project/source-components/observable-contexts.js.map +1 -0
  531. package/dist/src/project/source-components/observable-declarations.d.ts.map +1 -1
  532. package/dist/src/project/source-components/observable-declarations.js +2 -10
  533. package/dist/src/project/source-components/observable-declarations.js.map +1 -1
  534. package/dist/src/project/source-components/observable-in-place-writes.d.ts +32 -0
  535. package/dist/src/project/source-components/observable-in-place-writes.d.ts.map +1 -0
  536. package/dist/src/project/source-components/observable-in-place-writes.js +251 -0
  537. package/dist/src/project/source-components/observable-in-place-writes.js.map +1 -0
  538. package/dist/src/project/source-components/observable-primitive-paths.d.ts +5 -0
  539. package/dist/src/project/source-components/observable-primitive-paths.d.ts.map +1 -1
  540. package/dist/src/project/source-components/observable-primitive-paths.js +22 -6
  541. package/dist/src/project/source-components/observable-primitive-paths.js.map +1 -1
  542. package/dist/src/project/source-components/plain-constants.d.ts +8 -0
  543. package/dist/src/project/source-components/plain-constants.d.ts.map +1 -0
  544. package/dist/src/project/source-components/plain-constants.js +21 -0
  545. package/dist/src/project/source-components/plain-constants.js.map +1 -0
  546. package/dist/src/project/source-components/reach-resolvers.d.ts +10 -0
  547. package/dist/src/project/source-components/reach-resolvers.d.ts.map +1 -0
  548. package/dist/src/project/source-components/reach-resolvers.js +137 -0
  549. package/dist/src/project/source-components/reach-resolvers.js.map +1 -0
  550. package/dist/src/project/source-components/react-traits.d.ts.map +1 -1
  551. package/dist/src/project/source-components/react-traits.js +1 -2
  552. package/dist/src/project/source-components/react-traits.js.map +1 -1
  553. package/dist/src/project/source-components/source-components.d.ts +27 -1
  554. package/dist/src/project/source-components/source-components.d.ts.map +1 -1
  555. package/dist/src/project/source-components/source-components.js +56 -24
  556. package/dist/src/project/source-components/source-components.js.map +1 -1
  557. package/dist/src/project/source-components/source-context.d.ts +2 -1
  558. package/dist/src/project/source-components/source-context.d.ts.map +1 -1
  559. package/dist/src/project/source-components/source-context.js +5 -0
  560. package/dist/src/project/source-components/source-context.js.map +1 -1
  561. package/dist/src/project/source-components/symbol-resolution.d.ts.map +1 -1
  562. package/dist/src/project/source-components/symbol-resolution.js +1 -0
  563. package/dist/src/project/source-components/symbol-resolution.js.map +1 -1
  564. package/dist/src/project/source-components/synchronous-reach.d.ts +64 -0
  565. package/dist/src/project/source-components/synchronous-reach.d.ts.map +1 -0
  566. package/dist/src/project/source-components/synchronous-reach.js +298 -0
  567. package/dist/src/project/source-components/synchronous-reach.js.map +1 -0
  568. package/dist/src/project/source-components/variable-declarations.d.ts.map +1 -1
  569. package/dist/src/project/source-components/variable-declarations.js +35 -7
  570. package/dist/src/project/source-components/variable-declarations.js.map +1 -1
  571. package/dist/src/project/source-components/write-units.d.ts +18 -0
  572. package/dist/src/project/source-components/write-units.d.ts.map +1 -0
  573. package/dist/src/project/source-components/write-units.js +152 -0
  574. package/dist/src/project/source-components/write-units.js.map +1 -0
  575. package/dist/src/project/state-flow/expression-lowering.d.ts.map +1 -1
  576. package/dist/src/project/state-flow/expression-lowering.js +8 -5
  577. package/dist/src/project/state-flow/expression-lowering.js.map +1 -1
  578. package/dist/src/project/state-flow/model.d.ts +2 -0
  579. package/dist/src/project/state-flow/model.d.ts.map +1 -1
  580. package/dist/src/project/state-flow/state-flow.d.ts +7 -0
  581. package/dist/src/project/state-flow/state-flow.d.ts.map +1 -1
  582. package/dist/src/project/state-flow/state-flow.js +33 -0
  583. package/dist/src/project/state-flow/state-flow.js.map +1 -1
  584. package/dist/src/project/subscription-measurements.d.ts.map +1 -1
  585. package/dist/src/project/subscription-measurements.js +7 -9
  586. package/dist/src/project/subscription-measurements.js.map +1 -1
  587. package/dist/src/project/workspace/link-index.d.ts +8 -0
  588. package/dist/src/project/workspace/link-index.d.ts.map +1 -0
  589. package/dist/src/project/workspace/link-index.js +44 -0
  590. package/dist/src/project/workspace/link-index.js.map +1 -0
  591. package/dist/src/project/workspace/link-policy.d.ts +10 -0
  592. package/dist/src/project/workspace/link-policy.d.ts.map +1 -0
  593. package/dist/src/project/workspace/link-policy.js +114 -0
  594. package/dist/src/project/workspace/link-policy.js.map +1 -0
  595. package/dist/src/project/workspace/packages.d.ts +8 -2
  596. package/dist/src/project/workspace/packages.d.ts.map +1 -1
  597. package/dist/src/project/workspace/packages.js +30 -9
  598. package/dist/src/project/workspace/packages.js.map +1 -1
  599. package/dist/src/project/workspace/resolution-host.d.ts.map +1 -1
  600. package/dist/src/project/workspace/resolution-host.js +3 -12
  601. package/dist/src/project/workspace/resolution-host.js.map +1 -1
  602. package/dist/src/project/workspace/source-closure.d.ts +2 -2
  603. package/dist/src/project/workspace/source-closure.d.ts.map +1 -1
  604. package/dist/src/project/workspace/source-closure.js +13 -11
  605. package/dist/src/project/workspace/source-closure.js.map +1 -1
  606. package/dist/src/report/finding-ids.d.ts +5 -0
  607. package/dist/src/report/finding-ids.d.ts.map +1 -0
  608. package/dist/src/report/finding-ids.js +51 -0
  609. package/dist/src/report/finding-ids.js.map +1 -0
  610. package/dist/src/report/format.d.ts +10 -2
  611. package/dist/src/report/format.d.ts.map +1 -1
  612. package/dist/src/report/format.js +23 -4
  613. package/dist/src/report/format.js.map +1 -1
  614. package/dist/src/report/subscription-plans.d.ts.map +1 -1
  615. package/dist/src/report/subscription-plans.js +2 -3
  616. package/dist/src/report/subscription-plans.js.map +1 -1
  617. package/dist/src/rules/async-leaf-status/async-leaf-status.d.ts.map +1 -1
  618. package/dist/src/rules/async-leaf-status/async-leaf-status.js +2 -6
  619. package/dist/src/rules/async-leaf-status/async-leaf-status.js.map +1 -1
  620. package/dist/src/rules/async-leaf-status/event-rooted-commands.d.ts.map +1 -1
  621. package/dist/src/rules/async-leaf-status/event-rooted-commands.js +5 -14
  622. package/dist/src/rules/async-leaf-status/event-rooted-commands.js.map +1 -1
  623. package/dist/src/rules/async-leaf-status/leaf-call-sites.d.ts.map +1 -1
  624. package/dist/src/rules/async-leaf-status/leaf-call-sites.js +4 -6
  625. package/dist/src/rules/async-leaf-status/leaf-call-sites.js.map +1 -1
  626. package/dist/src/rules/async-leaf-status/pending-command.d.ts +0 -1
  627. package/dist/src/rules/async-leaf-status/pending-command.d.ts.map +1 -1
  628. package/dist/src/rules/async-leaf-status/pending-command.js +2 -7
  629. package/dist/src/rules/async-leaf-status/pending-command.js.map +1 -1
  630. package/dist/src/rules/async-leaf-status/pending-segment.d.ts.map +1 -1
  631. package/dist/src/rules/async-leaf-status/pending-segment.js +2 -1
  632. package/dist/src/rules/async-leaf-status/pending-segment.js.map +1 -1
  633. package/dist/src/rules/callable-state.d.ts +7 -1
  634. package/dist/src/rules/callable-state.d.ts.map +1 -1
  635. package/dist/src/rules/callable-state.js +3 -3
  636. package/dist/src/rules/callable-state.js.map +1 -1
  637. package/dist/src/rules/child-contract/array-item-callbacks.d.ts.map +1 -1
  638. package/dist/src/rules/child-contract/array-item-callbacks.js +6 -6
  639. package/dist/src/rules/child-contract/array-item-callbacks.js.map +1 -1
  640. package/dist/src/rules/child-contract/array-prop-tracking.d.ts.map +1 -1
  641. package/dist/src/rules/child-contract/array-prop-tracking.js +4 -5
  642. package/dist/src/rules/child-contract/array-prop-tracking.js.map +1 -1
  643. package/dist/src/rules/child-contract/base-ui-render-events.js +2 -3
  644. package/dist/src/rules/child-contract/base-ui-render-events.js.map +1 -1
  645. package/dist/src/rules/child-contract/callback-hosting.d.ts.map +1 -1
  646. package/dist/src/rules/child-contract/callback-hosting.js +4 -13
  647. package/dist/src/rules/child-contract/callback-hosting.js.map +1 -1
  648. package/dist/src/rules/child-contract/carried-values.d.ts +0 -1
  649. package/dist/src/rules/child-contract/carried-values.d.ts.map +1 -1
  650. package/dist/src/rules/child-contract/carried-values.js +2 -14
  651. package/dist/src/rules/child-contract/carried-values.js.map +1 -1
  652. package/dist/src/rules/child-contract/child-contract.d.ts +6 -3
  653. package/dist/src/rules/child-contract/child-contract.d.ts.map +1 -1
  654. package/dist/src/rules/child-contract/child-contract.js +10 -4
  655. package/dist/src/rules/child-contract/child-contract.js.map +1 -1
  656. package/dist/src/rules/child-contract/context-consumers.js +5 -5
  657. package/dist/src/rules/child-contract/context-consumers.js.map +1 -1
  658. package/dist/src/rules/child-contract/context-publication.d.ts.map +1 -1
  659. package/dist/src/rules/child-contract/context-publication.js +3 -5
  660. package/dist/src/rules/child-contract/context-publication.js.map +1 -1
  661. package/dist/src/rules/child-contract/declared-prop-types.d.ts +4 -0
  662. package/dist/src/rules/child-contract/declared-prop-types.d.ts.map +1 -1
  663. package/dist/src/rules/child-contract/declared-prop-types.js +6 -8
  664. package/dist/src/rules/child-contract/declared-prop-types.js.map +1 -1
  665. package/dist/src/rules/child-contract/element-identity.d.ts +43 -0
  666. package/dist/src/rules/child-contract/element-identity.d.ts.map +1 -0
  667. package/dist/src/rules/child-contract/element-identity.js +227 -0
  668. package/dist/src/rules/child-contract/element-identity.js.map +1 -0
  669. package/dist/src/rules/child-contract/expression-stages.d.ts.map +1 -1
  670. package/dist/src/rules/child-contract/expression-stages.js +4 -4
  671. package/dist/src/rules/child-contract/expression-stages.js.map +1 -1
  672. package/dist/src/rules/child-contract/higher-order-factories.d.ts.map +1 -1
  673. package/dist/src/rules/child-contract/higher-order-factories.js +5 -5
  674. package/dist/src/rules/child-contract/higher-order-factories.js.map +1 -1
  675. package/dist/src/rules/child-contract/hook-boundary-paths.d.ts.map +1 -1
  676. package/dist/src/rules/child-contract/hook-boundary-paths.js +5 -5
  677. package/dist/src/rules/child-contract/hook-boundary-paths.js.map +1 -1
  678. package/dist/src/rules/child-contract/invocation-boolean-props.d.ts.map +1 -1
  679. package/dist/src/rules/child-contract/invocation-boolean-props.js +2 -3
  680. package/dist/src/rules/child-contract/invocation-boolean-props.js.map +1 -1
  681. package/dist/src/rules/child-contract/invocation-trace.d.ts.map +1 -1
  682. package/dist/src/rules/child-contract/invocation-trace.js +2 -3
  683. package/dist/src/rules/child-contract/invocation-trace.js.map +1 -1
  684. package/dist/src/rules/child-contract/jsx-event-attributes.js +2 -2
  685. package/dist/src/rules/child-contract/jsx-event-attributes.js.map +1 -1
  686. package/dist/src/rules/child-contract/jsx-owner.d.ts +1 -0
  687. package/dist/src/rules/child-contract/jsx-owner.d.ts.map +1 -1
  688. package/dist/src/rules/child-contract/jsx-owner.js +1 -1
  689. package/dist/src/rules/child-contract/jsx-owner.js.map +1 -1
  690. package/dist/src/rules/child-contract/leaf-render.d.ts +2 -1
  691. package/dist/src/rules/child-contract/leaf-render.d.ts.map +1 -1
  692. package/dist/src/rules/child-contract/leaf-render.js +48 -9
  693. package/dist/src/rules/child-contract/leaf-render.js.map +1 -1
  694. package/dist/src/rules/child-contract/model.d.ts +30 -3
  695. package/dist/src/rules/child-contract/model.d.ts.map +1 -1
  696. package/dist/src/rules/child-contract/model.js.map +1 -1
  697. package/dist/src/rules/child-contract/pass-through-hosts.d.ts +8 -0
  698. package/dist/src/rules/child-contract/pass-through-hosts.d.ts.map +1 -0
  699. package/dist/src/rules/child-contract/pass-through-hosts.js +75 -0
  700. package/dist/src/rules/child-contract/pass-through-hosts.js.map +1 -0
  701. package/dist/src/rules/child-contract/path-trace.d.ts.map +1 -1
  702. package/dist/src/rules/child-contract/path-trace.js +3 -3
  703. package/dist/src/rules/child-contract/path-trace.js.map +1 -1
  704. package/dist/src/rules/child-contract/prop-bindings.d.ts +0 -2
  705. package/dist/src/rules/child-contract/prop-bindings.d.ts.map +1 -1
  706. package/dist/src/rules/child-contract/prop-bindings.js +3 -19
  707. package/dist/src/rules/child-contract/prop-bindings.js.map +1 -1
  708. package/dist/src/rules/child-contract/react-effect-usage.d.ts.map +1 -1
  709. package/dist/src/rules/child-contract/react-effect-usage.js +6 -22
  710. package/dist/src/rules/child-contract/react-effect-usage.js.map +1 -1
  711. package/dist/src/rules/command-only-state/command-only-state.d.ts.map +1 -1
  712. package/dist/src/rules/command-only-state/command-only-state.js +5 -10
  713. package/dist/src/rules/command-only-state/command-only-state.js.map +1 -1
  714. package/dist/src/rules/command-only-state/local-callable-reads.d.ts +1 -0
  715. package/dist/src/rules/command-only-state/local-callable-reads.d.ts.map +1 -1
  716. package/dist/src/rules/command-only-state/local-callable-reads.js +2 -9
  717. package/dist/src/rules/command-only-state/local-callable-reads.js.map +1 -1
  718. package/dist/src/rules/command-only-state/published-getter.d.ts +5 -0
  719. package/dist/src/rules/command-only-state/published-getter.d.ts.map +1 -1
  720. package/dist/src/rules/command-only-state/published-getter.js +49 -20
  721. package/dist/src/rules/command-only-state/published-getter.js.map +1 -1
  722. package/dist/src/rules/command-only-state/returned-switch-command.d.ts.map +1 -1
  723. package/dist/src/rules/command-only-state/returned-switch-command.js +3 -9
  724. package/dist/src/rules/command-only-state/returned-switch-command.js.map +1 -1
  725. package/dist/src/rules/command-only-state/unknown-hook-escape.js +2 -8
  726. package/dist/src/rules/command-only-state/unknown-hook-escape.js.map +1 -1
  727. package/dist/src/rules/control-flow-components/control-flow-slots.d.ts +60 -0
  728. package/dist/src/rules/control-flow-components/control-flow-slots.d.ts.map +1 -0
  729. package/dist/src/rules/control-flow-components/control-flow-slots.js +233 -0
  730. package/dist/src/rules/control-flow-components/control-flow-slots.js.map +1 -0
  731. package/dist/src/rules/deferred-reveal/deferred-reveal.d.ts.map +1 -1
  732. package/dist/src/rules/deferred-reveal/deferred-reveal.js +1 -9
  733. package/dist/src/rules/deferred-reveal/deferred-reveal.js.map +1 -1
  734. package/dist/src/rules/deferred-reveal/safe-projections.d.ts.map +1 -1
  735. package/dist/src/rules/deferred-reveal/safe-projections.js +48 -84
  736. package/dist/src/rules/deferred-reveal/safe-projections.js.map +1 -1
  737. package/dist/src/rules/effect-drafts/draft-mutations.d.ts.map +1 -1
  738. package/dist/src/rules/effect-drafts/draft-mutations.js +3 -26
  739. package/dist/src/rules/effect-drafts/draft-mutations.js.map +1 -1
  740. package/dist/src/rules/effect-drafts/draft-render-cuts.js +4 -3
  741. package/dist/src/rules/effect-drafts/draft-render-cuts.js.map +1 -1
  742. package/dist/src/rules/effect-drafts/effect-drafts.d.ts.map +1 -1
  743. package/dist/src/rules/effect-drafts/effect-drafts.js +2 -1
  744. package/dist/src/rules/effect-drafts/effect-drafts.js.map +1 -1
  745. package/dist/src/rules/effect-drafts/member-boundary-controls.d.ts +6 -0
  746. package/dist/src/rules/effect-drafts/member-boundary-controls.d.ts.map +1 -1
  747. package/dist/src/rules/effect-drafts/member-boundary-controls.js +51 -36
  748. package/dist/src/rules/effect-drafts/member-boundary-controls.js.map +1 -1
  749. package/dist/src/rules/effect-drafts/model.d.ts +2 -6
  750. package/dist/src/rules/effect-drafts/model.d.ts.map +1 -1
  751. package/dist/src/rules/effects/browser-storage-persistence.d.ts +2 -7
  752. package/dist/src/rules/effects/browser-storage-persistence.d.ts.map +1 -1
  753. package/dist/src/rules/effects/browser-storage-persistence.js +3 -20
  754. package/dist/src/rules/effects/browser-storage-persistence.js.map +1 -1
  755. package/dist/src/rules/effects/callback-shape.d.ts +0 -2
  756. package/dist/src/rules/effects/callback-shape.d.ts.map +1 -1
  757. package/dist/src/rules/effects/callback-shape.js +0 -14
  758. package/dist/src/rules/effects/callback-shape.js.map +1 -1
  759. package/dist/src/rules/effects/command-support-calls.d.ts +1 -0
  760. package/dist/src/rules/effects/command-support-calls.d.ts.map +1 -1
  761. package/dist/src/rules/effects/command-support-calls.js +1 -1
  762. package/dist/src/rules/effects/command-support-calls.js.map +1 -1
  763. package/dist/src/rules/effects/committed-ref-integration.d.ts.map +1 -1
  764. package/dist/src/rules/effects/committed-ref-integration.js +1 -2
  765. package/dist/src/rules/effects/committed-ref-integration.js.map +1 -1
  766. package/dist/src/rules/effects/committed-ref-mirrors.d.ts.map +1 -1
  767. package/dist/src/rules/effects/committed-ref-mirrors.js +2 -8
  768. package/dist/src/rules/effects/committed-ref-mirrors.js.map +1 -1
  769. package/dist/src/rules/effects/declared-primitive-paths.d.ts +10 -0
  770. package/dist/src/rules/effects/declared-primitive-paths.d.ts.map +1 -0
  771. package/dist/src/rules/effects/declared-primitive-paths.js +111 -0
  772. package/dist/src/rules/effects/declared-primitive-paths.js.map +1 -0
  773. package/dist/src/rules/effects/dependency-identity.d.ts +11 -0
  774. package/dist/src/rules/effects/dependency-identity.d.ts.map +1 -0
  775. package/dist/src/rules/effects/dependency-identity.js +160 -0
  776. package/dist/src/rules/effects/dependency-identity.js.map +1 -0
  777. package/dist/src/rules/effects/derived-setters.d.ts.map +1 -1
  778. package/dist/src/rules/effects/derived-setters.js +2 -7
  779. package/dist/src/rules/effects/derived-setters.js.map +1 -1
  780. package/dist/src/rules/effects/effect-verdicts.d.ts +12 -5
  781. package/dist/src/rules/effects/effect-verdicts.d.ts.map +1 -1
  782. package/dist/src/rules/effects/effect-verdicts.js +53 -18
  783. package/dist/src/rules/effects/effect-verdicts.js.map +1 -1
  784. package/dist/src/rules/effects/effects.d.ts +5 -0
  785. package/dist/src/rules/effects/effects.d.ts.map +1 -1
  786. package/dist/src/rules/effects/effects.js +69 -46
  787. package/dist/src/rules/effects/effects.js.map +1 -1
  788. package/dist/src/rules/effects/guarded-mount-writes.d.ts +10 -0
  789. package/dist/src/rules/effects/guarded-mount-writes.d.ts.map +1 -0
  790. package/dist/src/rules/effects/guarded-mount-writes.js +122 -0
  791. package/dist/src/rules/effects/guarded-mount-writes.js.map +1 -0
  792. package/dist/src/rules/effects/incidental-observable-reads.d.ts +32 -0
  793. package/dist/src/rules/effects/incidental-observable-reads.d.ts.map +1 -0
  794. package/dist/src/rules/effects/incidental-observable-reads.js +311 -0
  795. package/dist/src/rules/effects/incidental-observable-reads.js.map +1 -0
  796. package/dist/src/rules/effects/model.d.ts +2 -2
  797. package/dist/src/rules/effects/model.d.ts.map +1 -1
  798. package/dist/src/rules/effects/model.js.map +1 -1
  799. package/dist/src/rules/effects/observable-reactions.d.ts +6 -0
  800. package/dist/src/rules/effects/observable-reactions.d.ts.map +1 -0
  801. package/dist/src/rules/effects/observable-reactions.js +54 -0
  802. package/dist/src/rules/effects/observable-reactions.js.map +1 -0
  803. package/dist/src/rules/effects/owner-snapshot-captures.d.ts +5 -0
  804. package/dist/src/rules/effects/owner-snapshot-captures.d.ts.map +1 -0
  805. package/dist/src/rules/effects/owner-snapshot-captures.js +22 -0
  806. package/dist/src/rules/effects/owner-snapshot-captures.js.map +1 -0
  807. package/dist/src/rules/effects/render-phase-resets.d.ts +31 -0
  808. package/dist/src/rules/effects/render-phase-resets.d.ts.map +1 -0
  809. package/dist/src/rules/effects/render-phase-resets.js +207 -0
  810. package/dist/src/rules/effects/render-phase-resets.js.map +1 -0
  811. package/dist/src/rules/effects/setter-event-boundaries.d.ts.map +1 -1
  812. package/dist/src/rules/effects/setter-event-boundaries.js +4 -12
  813. package/dist/src/rules/effects/setter-event-boundaries.js.map +1 -1
  814. package/dist/src/rules/effects/state-independent-effects.d.ts.map +1 -1
  815. package/dist/src/rules/effects/state-independent-effects.js +30 -15
  816. package/dist/src/rules/effects/state-independent-effects.js.map +1 -1
  817. package/dist/src/rules/effects/synchronous-dependency-reads.d.ts +3 -0
  818. package/dist/src/rules/effects/synchronous-dependency-reads.d.ts.map +1 -1
  819. package/dist/src/rules/effects/synchronous-dependency-reads.js +2 -2
  820. package/dist/src/rules/effects/synchronous-dependency-reads.js.map +1 -1
  821. package/dist/src/rules/event-scalar-leaf/event-owned-scalars.d.ts.map +1 -1
  822. package/dist/src/rules/event-scalar-leaf/event-owned-scalars.js +2 -5
  823. package/dist/src/rules/event-scalar-leaf/event-owned-scalars.js.map +1 -1
  824. package/dist/src/rules/event-scalar-leaf/event-scalar-leaf.d.ts.map +1 -1
  825. package/dist/src/rules/event-scalar-leaf/event-scalar-leaf.js +4 -3
  826. package/dist/src/rules/event-scalar-leaf/event-scalar-leaf.js.map +1 -1
  827. package/dist/src/rules/fresh-selector-results.d.ts +14 -0
  828. package/dist/src/rules/fresh-selector-results.d.ts.map +1 -0
  829. package/dist/src/rules/fresh-selector-results.js +198 -0
  830. package/dist/src/rules/fresh-selector-results.js.map +1 -0
  831. package/dist/src/rules/hook-consumer-contract/hook-consumer-contract.d.ts +5 -2
  832. package/dist/src/rules/hook-consumer-contract/hook-consumer-contract.d.ts.map +1 -1
  833. package/dist/src/rules/hook-consumer-contract/hook-consumer-contract.js +16 -7
  834. package/dist/src/rules/hook-consumer-contract/hook-consumer-contract.js.map +1 -1
  835. package/dist/src/rules/hook-consumer-contract/presentation-consumer.d.ts +2 -1
  836. package/dist/src/rules/hook-consumer-contract/presentation-consumer.d.ts.map +1 -1
  837. package/dist/src/rules/hook-consumer-contract/presentation-consumer.js +4 -4
  838. package/dist/src/rules/hook-consumer-contract/presentation-consumer.js.map +1 -1
  839. package/dist/src/rules/hook-keyed-cursor-contract/binding-references.d.ts +0 -1
  840. package/dist/src/rules/hook-keyed-cursor-contract/binding-references.d.ts.map +1 -1
  841. package/dist/src/rules/hook-keyed-cursor-contract/binding-references.js +6 -32
  842. package/dist/src/rules/hook-keyed-cursor-contract/binding-references.js.map +1 -1
  843. package/dist/src/rules/hook-keyed-cursor-contract/hook-keyed-cursor-contract.js +2 -1
  844. package/dist/src/rules/hook-keyed-cursor-contract/hook-keyed-cursor-contract.js.map +1 -1
  845. package/dist/src/rules/hook-keyed-cursor-contract/memoized-row-renderer.d.ts.map +1 -1
  846. package/dist/src/rules/hook-keyed-cursor-contract/memoized-row-renderer.js +2 -1
  847. package/dist/src/rules/hook-keyed-cursor-contract/memoized-row-renderer.js.map +1 -1
  848. package/dist/src/rules/in-place-memo-keys/compiler-memos.d.ts +9 -0
  849. package/dist/src/rules/in-place-memo-keys/compiler-memos.d.ts.map +1 -0
  850. package/dist/src/rules/in-place-memo-keys/compiler-memos.js +101 -0
  851. package/dist/src/rules/in-place-memo-keys/compiler-memos.js.map +1 -0
  852. package/dist/src/rules/in-place-memo-keys/finding.d.ts +4 -0
  853. package/dist/src/rules/in-place-memo-keys/finding.d.ts.map +1 -0
  854. package/dist/src/rules/in-place-memo-keys/finding.js +102 -0
  855. package/dist/src/rules/in-place-memo-keys/finding.js.map +1 -0
  856. package/dist/src/rules/in-place-memo-keys/identity-readers.d.ts +17 -0
  857. package/dist/src/rules/in-place-memo-keys/identity-readers.d.ts.map +1 -0
  858. package/dist/src/rules/in-place-memo-keys/identity-readers.js +112 -0
  859. package/dist/src/rules/in-place-memo-keys/identity-readers.js.map +1 -0
  860. package/dist/src/rules/in-place-memo-keys/in-place-memo-keys.d.ts +4 -0
  861. package/dist/src/rules/in-place-memo-keys/in-place-memo-keys.d.ts.map +1 -0
  862. package/dist/src/rules/in-place-memo-keys/in-place-memo-keys.js +73 -0
  863. package/dist/src/rules/in-place-memo-keys/in-place-memo-keys.js.map +1 -0
  864. package/dist/src/rules/in-place-memo-keys/memo-dependencies.d.ts +11 -0
  865. package/dist/src/rules/in-place-memo-keys/memo-dependencies.d.ts.map +1 -0
  866. package/dist/src/rules/in-place-memo-keys/memo-dependencies.js +68 -0
  867. package/dist/src/rules/in-place-memo-keys/memo-dependencies.js.map +1 -0
  868. package/dist/src/rules/in-place-memo-keys/memo-reads.d.ts +12 -0
  869. package/dist/src/rules/in-place-memo-keys/memo-reads.d.ts.map +1 -0
  870. package/dist/src/rules/in-place-memo-keys/memo-reads.js +192 -0
  871. package/dist/src/rules/in-place-memo-keys/memo-reads.js.map +1 -0
  872. package/dist/src/rules/in-place-memo-keys/model.d.ts +51 -0
  873. package/dist/src/rules/in-place-memo-keys/model.d.ts.map +1 -0
  874. package/dist/src/rules/in-place-memo-keys/model.js +2 -0
  875. package/dist/src/rules/in-place-memo-keys/model.js.map +1 -0
  876. package/dist/src/rules/in-place-memo-keys/primitive-selection.d.ts +10 -0
  877. package/dist/src/rules/in-place-memo-keys/primitive-selection.d.ts.map +1 -0
  878. package/dist/src/rules/in-place-memo-keys/primitive-selection.js +57 -0
  879. package/dist/src/rules/in-place-memo-keys/primitive-selection.js.map +1 -0
  880. package/dist/src/rules/in-place-memo-keys/raw-value-bindings.d.ts +9 -0
  881. package/dist/src/rules/in-place-memo-keys/raw-value-bindings.d.ts.map +1 -0
  882. package/dist/src/rules/in-place-memo-keys/raw-value-bindings.js +47 -0
  883. package/dist/src/rules/in-place-memo-keys/raw-value-bindings.js.map +1 -0
  884. package/dist/src/rules/in-place-memo-keys/write-conflicts.d.ts +14 -0
  885. package/dist/src/rules/in-place-memo-keys/write-conflicts.d.ts.map +1 -0
  886. package/dist/src/rules/in-place-memo-keys/write-conflicts.js +23 -0
  887. package/dist/src/rules/in-place-memo-keys/write-conflicts.js.map +1 -0
  888. package/dist/src/rules/keyed-selection/collection-summaries.d.ts +1 -1
  889. package/dist/src/rules/keyed-selection/collection-summaries.d.ts.map +1 -1
  890. package/dist/src/rules/keyed-selection/collection-summaries.js +11 -9
  891. package/dist/src/rules/keyed-selection/collection-summaries.js.map +1 -1
  892. package/dist/src/rules/keyed-selection/imperative-handle-exposure.js +2 -11
  893. package/dist/src/rules/keyed-selection/imperative-handle-exposure.js.map +1 -1
  894. package/dist/src/rules/keyed-selection/keyed-collections.d.ts +1 -1
  895. package/dist/src/rules/keyed-selection/keyed-collections.d.ts.map +1 -1
  896. package/dist/src/rules/keyed-selection/keyed-collections.js +15 -10
  897. package/dist/src/rules/keyed-selection/keyed-collections.js.map +1 -1
  898. package/dist/src/rules/keyed-selection/keyed-records.d.ts +5 -1
  899. package/dist/src/rules/keyed-selection/keyed-records.d.ts.map +1 -1
  900. package/dist/src/rules/keyed-selection/keyed-records.js +2 -2
  901. package/dist/src/rules/keyed-selection/keyed-records.js.map +1 -1
  902. package/dist/src/rules/keyed-selection/keyed-scalars.d.ts +2 -2
  903. package/dist/src/rules/keyed-selection/keyed-scalars.d.ts.map +1 -1
  904. package/dist/src/rules/keyed-selection/keyed-scalars.js +22 -31
  905. package/dist/src/rules/keyed-selection/keyed-scalars.js.map +1 -1
  906. package/dist/src/rules/keyed-selection/keyed-selection.d.ts +1 -0
  907. package/dist/src/rules/keyed-selection/keyed-selection.d.ts.map +1 -1
  908. package/dist/src/rules/keyed-selection/keyed-selection.js +13 -21
  909. package/dist/src/rules/keyed-selection/keyed-selection.js.map +1 -1
  910. package/dist/src/rules/keyed-selection/rendered-record-entries.d.ts +1 -1
  911. package/dist/src/rules/keyed-selection/rendered-record-entries.d.ts.map +1 -1
  912. package/dist/src/rules/keyed-selection/rendered-record-entries.js +4 -4
  913. package/dist/src/rules/keyed-selection/rendered-record-entries.js.map +1 -1
  914. package/dist/src/rules/keyed-selection/scalar-key-comparisons.d.ts +1 -1
  915. package/dist/src/rules/keyed-selection/scalar-key-comparisons.d.ts.map +1 -1
  916. package/dist/src/rules/keyed-selection/scalar-key-comparisons.js +7 -7
  917. package/dist/src/rules/keyed-selection/scalar-key-comparisons.js.map +1 -1
  918. package/dist/src/rules/keyed-selection/written-record-entries.d.ts.map +1 -1
  919. package/dist/src/rules/keyed-selection/written-record-entries.js +3 -12
  920. package/dist/src/rules/keyed-selection/written-record-entries.js.map +1 -1
  921. package/dist/src/rules/lazy-callback-leaf.d.ts.map +1 -1
  922. package/dist/src/rules/lazy-callback-leaf.js +3 -16
  923. package/dist/src/rules/lazy-callback-leaf.js.map +1 -1
  924. package/dist/src/rules/legacy-use-value-edits.d.ts +11 -0
  925. package/dist/src/rules/legacy-use-value-edits.d.ts.map +1 -0
  926. package/dist/src/rules/legacy-use-value-edits.js +120 -0
  927. package/dist/src/rules/legacy-use-value-edits.js.map +1 -0
  928. package/dist/src/rules/legacy-use-value.d.ts +3 -3
  929. package/dist/src/rules/legacy-use-value.d.ts.map +1 -1
  930. package/dist/src/rules/legacy-use-value.js +51 -40
  931. package/dist/src/rules/legacy-use-value.js.map +1 -1
  932. package/dist/src/rules/listener-ref-state/listener-callbacks.js +2 -7
  933. package/dist/src/rules/listener-ref-state/listener-callbacks.js.map +1 -1
  934. package/dist/src/rules/listener-ref-state/listener-ref-candidates.js +2 -10
  935. package/dist/src/rules/listener-ref-state/listener-ref-candidates.js.map +1 -1
  936. package/dist/src/rules/listener-ref-state/listener-ref-state.d.ts.map +1 -1
  937. package/dist/src/rules/listener-ref-state/listener-ref-state.js +2 -10
  938. package/dist/src/rules/listener-ref-state/listener-ref-state.js.map +1 -1
  939. package/dist/src/rules/listener-ref-state/synchronous-regions.d.ts.map +1 -1
  940. package/dist/src/rules/listener-ref-state/synchronous-regions.js +2 -5
  941. package/dist/src/rules/listener-ref-state/synchronous-regions.js.map +1 -1
  942. package/dist/src/rules/literal-boolean-leaf/boolean-setters.d.ts +1 -0
  943. package/dist/src/rules/literal-boolean-leaf/boolean-setters.d.ts.map +1 -1
  944. package/dist/src/rules/literal-boolean-leaf/boolean-setters.js +13 -44
  945. package/dist/src/rules/literal-boolean-leaf/boolean-setters.js.map +1 -1
  946. package/dist/src/rules/literal-boolean-leaf/presentation-surfaces.js +1 -12
  947. package/dist/src/rules/literal-boolean-leaf/presentation-surfaces.js.map +1 -1
  948. package/dist/src/rules/memo-parent-captures/captured-values.d.ts +15 -0
  949. package/dist/src/rules/memo-parent-captures/captured-values.d.ts.map +1 -0
  950. package/dist/src/rules/memo-parent-captures/captured-values.js +310 -0
  951. package/dist/src/rules/memo-parent-captures/captured-values.js.map +1 -0
  952. package/dist/src/rules/memo-parent-captures/computed-edits.d.ts +14 -0
  953. package/dist/src/rules/memo-parent-captures/computed-edits.d.ts.map +1 -0
  954. package/dist/src/rules/memo-parent-captures/computed-edits.js +124 -0
  955. package/dist/src/rules/memo-parent-captures/computed-edits.js.map +1 -0
  956. package/dist/src/rules/memo-parent-captures/finding.d.ts +4 -0
  957. package/dist/src/rules/memo-parent-captures/finding.d.ts.map +1 -0
  958. package/dist/src/rules/memo-parent-captures/finding.js +48 -0
  959. package/dist/src/rules/memo-parent-captures/finding.js.map +1 -0
  960. package/dist/src/rules/memo-parent-captures/memo-parent-captures.d.ts +10 -0
  961. package/dist/src/rules/memo-parent-captures/memo-parent-captures.d.ts.map +1 -0
  962. package/dist/src/rules/memo-parent-captures/memo-parent-captures.js +119 -0
  963. package/dist/src/rules/memo-parent-captures/memo-parent-captures.js.map +1 -0
  964. package/dist/src/rules/memo-parent-captures/model.d.ts +43 -0
  965. package/dist/src/rules/memo-parent-captures/model.d.ts.map +1 -0
  966. package/dist/src/rules/memo-parent-captures/model.js +2 -0
  967. package/dist/src/rules/memo-parent-captures/model.js.map +1 -0
  968. package/dist/src/rules/object-draft/independent-sinks.d.ts.map +1 -1
  969. package/dist/src/rules/object-draft/independent-sinks.js +9 -22
  970. package/dist/src/rules/object-draft/independent-sinks.js.map +1 -1
  971. package/dist/src/rules/object-draft/object-draft.d.ts.map +1 -1
  972. package/dist/src/rules/object-draft/object-draft.js +2 -16
  973. package/dist/src/rules/object-draft/object-draft.js.map +1 -1
  974. package/dist/src/rules/object-draft/property-writes.d.ts.map +1 -1
  975. package/dist/src/rules/object-draft/property-writes.js +4 -15
  976. package/dist/src/rules/object-draft/property-writes.js.map +1 -1
  977. package/dist/src/rules/observable-clone-writes/observable-clone-writes.d.ts +2 -0
  978. package/dist/src/rules/observable-clone-writes/observable-clone-writes.d.ts.map +1 -1
  979. package/dist/src/rules/observable-clone-writes/observable-clone-writes.js +9 -11
  980. package/dist/src/rules/observable-clone-writes/observable-clone-writes.js.map +1 -1
  981. package/dist/src/rules/{derived-use-value/derived-use-value.d.ts → observable-lists/observable-lists.d.ts} +3 -3
  982. package/dist/src/rules/observable-lists/observable-lists.d.ts.map +1 -0
  983. package/dist/src/rules/observable-lists/observable-lists.js +134 -0
  984. package/dist/src/rules/observable-lists/observable-lists.js.map +1 -0
  985. package/dist/src/rules/observable-lists/tracked-row-keys.d.ts +11 -0
  986. package/dist/src/rules/observable-lists/tracked-row-keys.d.ts.map +1 -0
  987. package/dist/src/rules/observable-lists/tracked-row-keys.js +108 -0
  988. package/dist/src/rules/observable-lists/tracked-row-keys.js.map +1 -0
  989. package/dist/src/rules/observable-ownership/observable-ownership.d.ts.map +1 -1
  990. package/dist/src/rules/observable-ownership/observable-ownership.js +1 -3
  991. package/dist/src/rules/observable-ownership/observable-ownership.js.map +1 -1
  992. package/dist/src/rules/observable-reads/conditional-jsx-slots.d.ts +9 -0
  993. package/dist/src/rules/observable-reads/conditional-jsx-slots.d.ts.map +1 -1
  994. package/dist/src/rules/observable-reads/conditional-jsx-slots.js +5 -10
  995. package/dist/src/rules/observable-reads/conditional-jsx-slots.js.map +1 -1
  996. package/dist/src/rules/observable-reads/control-flow-move-down.d.ts +13 -0
  997. package/dist/src/rules/observable-reads/control-flow-move-down.d.ts.map +1 -0
  998. package/dist/src/rules/observable-reads/control-flow-move-down.js +36 -0
  999. package/dist/src/rules/observable-reads/control-flow-move-down.js.map +1 -0
  1000. package/dist/src/rules/observable-reads/field-writes.d.ts +33 -0
  1001. package/dist/src/rules/observable-reads/field-writes.d.ts.map +1 -0
  1002. package/dist/src/rules/observable-reads/field-writes.js +48 -0
  1003. package/dist/src/rules/observable-reads/field-writes.js.map +1 -0
  1004. package/dist/src/rules/observable-reads/flow-expressions.d.ts.map +1 -1
  1005. package/dist/src/rules/observable-reads/flow-expressions.js +48 -9
  1006. package/dist/src/rules/observable-reads/flow-expressions.js.map +1 -1
  1007. package/dist/src/rules/observable-reads/independent-subscription-bindings.d.ts +2 -0
  1008. package/dist/src/rules/observable-reads/independent-subscription-bindings.d.ts.map +1 -1
  1009. package/dist/src/rules/observable-reads/independent-subscription-bindings.js +12 -6
  1010. package/dist/src/rules/observable-reads/independent-subscription-bindings.js.map +1 -1
  1011. package/dist/src/rules/observable-reads/keyed-narrowing.d.ts +9 -0
  1012. package/dist/src/rules/observable-reads/keyed-narrowing.d.ts.map +1 -0
  1013. package/dist/src/rules/observable-reads/keyed-narrowing.js +165 -0
  1014. package/dist/src/rules/observable-reads/keyed-narrowing.js.map +1 -0
  1015. package/dist/src/rules/observable-reads/model.d.ts +6 -1
  1016. package/dist/src/rules/observable-reads/model.d.ts.map +1 -1
  1017. package/dist/src/rules/observable-reads/move-down.d.ts +3 -1
  1018. package/dist/src/rules/observable-reads/move-down.d.ts.map +1 -1
  1019. package/dist/src/rules/observable-reads/move-down.js +24 -20
  1020. package/dist/src/rules/observable-reads/move-down.js.map +1 -1
  1021. package/dist/src/rules/observable-reads/move-into-child.d.ts.map +1 -1
  1022. package/dist/src/rules/observable-reads/move-into-child.js +18 -8
  1023. package/dist/src/rules/observable-reads/move-into-child.js.map +1 -1
  1024. package/dist/src/rules/observable-reads/narrow-use-value.d.ts +1 -1
  1025. package/dist/src/rules/observable-reads/narrow-use-value.d.ts.map +1 -1
  1026. package/dist/src/rules/observable-reads/narrow-use-value.js +49 -22
  1027. package/dist/src/rules/observable-reads/narrow-use-value.js.map +1 -1
  1028. package/dist/src/rules/observable-reads/non-tracking-snapshots.d.ts +2 -0
  1029. package/dist/src/rules/observable-reads/non-tracking-snapshots.d.ts.map +1 -1
  1030. package/dist/src/rules/observable-reads/non-tracking-snapshots.js +18 -6
  1031. package/dist/src/rules/observable-reads/non-tracking-snapshots.js.map +1 -1
  1032. package/dist/src/rules/observable-reads/observable-paths.d.ts +14 -1
  1033. package/dist/src/rules/observable-reads/observable-paths.d.ts.map +1 -1
  1034. package/dist/src/rules/observable-reads/observable-paths.js +41 -18
  1035. package/dist/src/rules/observable-reads/observable-paths.js.map +1 -1
  1036. package/dist/src/rules/observable-reads/observable-reads.d.ts +4 -1
  1037. package/dist/src/rules/observable-reads/observable-reads.d.ts.map +1 -1
  1038. package/dist/src/rules/observable-reads/observable-reads.js +24 -10
  1039. package/dist/src/rules/observable-reads/observable-reads.js.map +1 -1
  1040. package/dist/src/rules/observable-reads/owner-subscription-work.d.ts +6 -1
  1041. package/dist/src/rules/observable-reads/owner-subscription-work.d.ts.map +1 -1
  1042. package/dist/src/rules/observable-reads/owner-subscription-work.js +19 -33
  1043. package/dist/src/rules/observable-reads/owner-subscription-work.js.map +1 -1
  1044. package/dist/src/rules/observable-reads/plain-seed-paths.d.ts +13 -0
  1045. package/dist/src/rules/observable-reads/plain-seed-paths.d.ts.map +1 -0
  1046. package/dist/src/rules/observable-reads/plain-seed-paths.js +102 -0
  1047. package/dist/src/rules/observable-reads/plain-seed-paths.js.map +1 -0
  1048. package/dist/src/rules/observable-reads/primitive-paths.d.ts +2 -0
  1049. package/dist/src/rules/observable-reads/primitive-paths.d.ts.map +1 -1
  1050. package/dist/src/rules/observable-reads/primitive-paths.js +12 -16
  1051. package/dist/src/rules/observable-reads/primitive-paths.js.map +1 -1
  1052. package/dist/src/rules/observable-reads/raw-value-paths.d.ts.map +1 -1
  1053. package/dist/src/rules/observable-reads/raw-value-paths.js +3 -14
  1054. package/dist/src/rules/observable-reads/raw-value-paths.js.map +1 -1
  1055. package/dist/src/rules/observable-reads/render-exclusion.d.ts +10 -0
  1056. package/dist/src/rules/observable-reads/render-exclusion.d.ts.map +1 -0
  1057. package/dist/src/rules/observable-reads/render-exclusion.js +134 -0
  1058. package/dist/src/rules/observable-reads/render-exclusion.js.map +1 -0
  1059. package/dist/src/rules/observable-reads/render-gates.d.ts +17 -0
  1060. package/dist/src/rules/observable-reads/render-gates.d.ts.map +1 -0
  1061. package/dist/src/rules/observable-reads/render-gates.js +97 -0
  1062. package/dist/src/rules/observable-reads/render-gates.js.map +1 -0
  1063. package/dist/src/rules/observable-reads/selector-expressions.d.ts +19 -0
  1064. package/dist/src/rules/observable-reads/selector-expressions.d.ts.map +1 -0
  1065. package/dist/src/rules/observable-reads/selector-expressions.js +301 -0
  1066. package/dist/src/rules/observable-reads/selector-expressions.js.map +1 -0
  1067. package/dist/src/rules/observable-reads/selector-subscriptions.d.ts +24 -0
  1068. package/dist/src/rules/observable-reads/selector-subscriptions.d.ts.map +1 -0
  1069. package/dist/src/rules/observable-reads/selector-subscriptions.js +104 -0
  1070. package/dist/src/rules/observable-reads/selector-subscriptions.js.map +1 -0
  1071. package/dist/src/rules/observable-reads/sibling-writes.d.ts +24 -0
  1072. package/dist/src/rules/observable-reads/sibling-writes.d.ts.map +1 -0
  1073. package/dist/src/rules/observable-reads/sibling-writes.js +52 -0
  1074. package/dist/src/rules/observable-reads/sibling-writes.js.map +1 -0
  1075. package/dist/src/rules/observable-reads/snapshot-safe-reads.d.ts +17 -0
  1076. package/dist/src/rules/observable-reads/snapshot-safe-reads.d.ts.map +1 -0
  1077. package/dist/src/rules/observable-reads/snapshot-safe-reads.js +110 -0
  1078. package/dist/src/rules/observable-reads/snapshot-safe-reads.js.map +1 -0
  1079. package/dist/src/rules/observable-reads/split-leaves.d.ts.map +1 -1
  1080. package/dist/src/rules/observable-reads/split-leaves.js +76 -24
  1081. package/dist/src/rules/observable-reads/split-leaves.js.map +1 -1
  1082. package/dist/src/rules/observable-reads/stable-effect-dependencies.d.ts +12 -2
  1083. package/dist/src/rules/observable-reads/stable-effect-dependencies.d.ts.map +1 -1
  1084. package/dist/src/rules/observable-reads/stable-effect-dependencies.js +135 -6
  1085. package/dist/src/rules/observable-reads/stable-effect-dependencies.js.map +1 -1
  1086. package/dist/src/rules/observable-reads/subscription-flow.d.ts +8 -2
  1087. package/dist/src/rules/observable-reads/subscription-flow.d.ts.map +1 -1
  1088. package/dist/src/rules/observable-reads/subscription-flow.js +110 -29
  1089. package/dist/src/rules/observable-reads/subscription-flow.js.map +1 -1
  1090. package/dist/src/rules/observable-reads/subscription-inventory.d.ts +4 -2
  1091. package/dist/src/rules/observable-reads/subscription-inventory.d.ts.map +1 -1
  1092. package/dist/src/rules/observable-reads/subscription-inventory.js +73 -26
  1093. package/dist/src/rules/observable-reads/subscription-inventory.js.map +1 -1
  1094. package/dist/src/rules/observable-reads/subscription-leaf-targets.d.ts.map +1 -1
  1095. package/dist/src/rules/observable-reads/subscription-leaf-targets.js +24 -7
  1096. package/dist/src/rules/observable-reads/subscription-leaf-targets.js.map +1 -1
  1097. package/dist/src/rules/observable-reads/unrendered-subscriptions.d.ts +12 -0
  1098. package/dist/src/rules/observable-reads/unrendered-subscriptions.d.ts.map +1 -0
  1099. package/dist/src/rules/observable-reads/unrendered-subscriptions.js +262 -0
  1100. package/dist/src/rules/observable-reads/unrendered-subscriptions.js.map +1 -0
  1101. package/dist/src/rules/observable-reads/untracked-render-reads.d.ts +10 -0
  1102. package/dist/src/rules/observable-reads/untracked-render-reads.d.ts.map +1 -0
  1103. package/dist/src/rules/observable-reads/untracked-render-reads.js +48 -0
  1104. package/dist/src/rules/observable-reads/untracked-render-reads.js.map +1 -0
  1105. package/dist/src/rules/observable-reads/use-value-bindings.d.ts +18 -0
  1106. package/dist/src/rules/observable-reads/use-value-bindings.d.ts.map +1 -0
  1107. package/dist/src/rules/observable-reads/use-value-bindings.js +57 -0
  1108. package/dist/src/rules/observable-reads/use-value-bindings.js.map +1 -0
  1109. package/dist/src/rules/observable-reads/use-value-inputs.d.ts +5 -3
  1110. package/dist/src/rules/observable-reads/use-value-inputs.d.ts.map +1 -1
  1111. package/dist/src/rules/observable-reads/use-value-inputs.js +24 -11
  1112. package/dist/src/rules/observable-reads/use-value-inputs.js.map +1 -1
  1113. package/dist/src/rules/observable-reads/wrapped-use-value-results.d.ts +17 -0
  1114. package/dist/src/rules/observable-reads/wrapped-use-value-results.d.ts.map +1 -0
  1115. package/dist/src/rules/observable-reads/wrapped-use-value-results.js +98 -0
  1116. package/dist/src/rules/observable-reads/wrapped-use-value-results.js.map +1 -0
  1117. package/dist/src/rules/observable-toggle.d.ts.map +1 -1
  1118. package/dist/src/rules/observable-toggle.js +2 -1
  1119. package/dist/src/rules/observable-toggle.js.map +1 -1
  1120. package/dist/src/rules/observable-tracking/model.d.ts +6 -0
  1121. package/dist/src/rules/observable-tracking/model.d.ts.map +1 -1
  1122. package/dist/src/rules/observable-tracking/observable-tracking.d.ts.map +1 -1
  1123. package/dist/src/rules/observable-tracking/observable-tracking.js +1 -8
  1124. package/dist/src/rules/observable-tracking/observable-tracking.js.map +1 -1
  1125. package/dist/src/rules/observable-tracking/reactive-inputs.d.ts +16 -13
  1126. package/dist/src/rules/observable-tracking/reactive-inputs.d.ts.map +1 -1
  1127. package/dist/src/rules/observable-tracking/reactive-inputs.js +52 -125
  1128. package/dist/src/rules/observable-tracking/reactive-inputs.js.map +1 -1
  1129. package/dist/src/rules/observable-tracking/render-owners.d.ts +2 -0
  1130. package/dist/src/rules/observable-tracking/render-owners.d.ts.map +1 -1
  1131. package/dist/src/rules/observable-tracking/render-owners.js +1 -1
  1132. package/dist/src/rules/observable-tracking/render-owners.js.map +1 -1
  1133. package/dist/src/rules/observable-tracking/render-read-edits.d.ts +13 -0
  1134. package/dist/src/rules/observable-tracking/render-read-edits.d.ts.map +1 -0
  1135. package/dist/src/rules/observable-tracking/render-read-edits.js +44 -0
  1136. package/dist/src/rules/observable-tracking/render-read-edits.js.map +1 -0
  1137. package/dist/src/rules/observable-tracking/render-reads.d.ts +6 -3
  1138. package/dist/src/rules/observable-tracking/render-reads.d.ts.map +1 -1
  1139. package/dist/src/rules/observable-tracking/render-reads.js +119 -24
  1140. package/dist/src/rules/observable-tracking/render-reads.js.map +1 -1
  1141. package/dist/src/rules/observable-tracking/write-guards.d.ts +9 -0
  1142. package/dist/src/rules/observable-tracking/write-guards.d.ts.map +1 -0
  1143. package/dist/src/rules/observable-tracking/write-guards.js +45 -0
  1144. package/dist/src/rules/observable-tracking/write-guards.js.map +1 -0
  1145. package/dist/src/rules/opaque-instance-state.d.ts +8 -0
  1146. package/dist/src/rules/opaque-instance-state.d.ts.map +1 -0
  1147. package/dist/src/rules/opaque-instance-state.js +58 -0
  1148. package/dist/src/rules/opaque-instance-state.js.map +1 -0
  1149. package/dist/src/rules/primitive-projection/owner-hooks.d.ts +17 -0
  1150. package/dist/src/rules/primitive-projection/owner-hooks.d.ts.map +1 -0
  1151. package/dist/src/rules/primitive-projection/owner-hooks.js +112 -0
  1152. package/dist/src/rules/primitive-projection/owner-hooks.js.map +1 -0
  1153. package/dist/src/rules/primitive-projection/primitive-projection.d.ts +9 -0
  1154. package/dist/src/rules/primitive-projection/primitive-projection.d.ts.map +1 -0
  1155. package/dist/src/rules/primitive-projection/primitive-projection.js +148 -0
  1156. package/dist/src/rules/primitive-projection/primitive-projection.js.map +1 -0
  1157. package/dist/src/rules/primitive-projection/projection-domain.d.ts +18 -0
  1158. package/dist/src/rules/primitive-projection/projection-domain.d.ts.map +1 -0
  1159. package/dist/src/rules/primitive-projection/projection-domain.js +145 -0
  1160. package/dist/src/rules/primitive-projection/projection-domain.js.map +1 -0
  1161. package/dist/src/rules/primitive-projection/projection-sites.d.ts +29 -0
  1162. package/dist/src/rules/primitive-projection/projection-sites.d.ts.map +1 -0
  1163. package/dist/src/rules/primitive-projection/projection-sites.js +235 -0
  1164. package/dist/src/rules/primitive-projection/projection-sites.js.map +1 -0
  1165. package/dist/src/rules/primitive-projection/projection-subscriptions.d.ts +52 -0
  1166. package/dist/src/rules/primitive-projection/projection-subscriptions.d.ts.map +1 -0
  1167. package/dist/src/rules/primitive-projection/projection-subscriptions.js +109 -0
  1168. package/dist/src/rules/primitive-projection/projection-subscriptions.js.map +1 -0
  1169. package/dist/src/rules/primitive-projection/stale-render-reads.d.ts +22 -0
  1170. package/dist/src/rules/primitive-projection/stale-render-reads.d.ts.map +1 -0
  1171. package/dist/src/rules/primitive-projection/stale-render-reads.js +54 -0
  1172. package/dist/src/rules/primitive-projection/stale-render-reads.js.map +1 -0
  1173. package/dist/src/rules/primitive-projection/subscription-overlap.d.ts +19 -0
  1174. package/dist/src/rules/primitive-projection/subscription-overlap.d.ts.map +1 -0
  1175. package/dist/src/rules/primitive-projection/subscription-overlap.js +84 -0
  1176. package/dist/src/rules/primitive-projection/subscription-overlap.js.map +1 -0
  1177. package/dist/src/rules/primitive-projection/truthiness-projection.d.ts +9 -0
  1178. package/dist/src/rules/primitive-projection/truthiness-projection.d.ts.map +1 -0
  1179. package/dist/src/rules/primitive-projection/truthiness-projection.js +104 -0
  1180. package/dist/src/rules/primitive-projection/truthiness-projection.js.map +1 -0
  1181. package/dist/src/rules/primitive-projection/truthiness-sites.d.ts +16 -0
  1182. package/dist/src/rules/primitive-projection/truthiness-sites.d.ts.map +1 -0
  1183. package/dist/src/rules/primitive-projection/truthiness-sites.js +86 -0
  1184. package/dist/src/rules/primitive-projection/truthiness-sites.js.map +1 -0
  1185. package/dist/src/rules/primitive-projection/value-domains.d.ts +28 -0
  1186. package/dist/src/rules/primitive-projection/value-domains.d.ts.map +1 -0
  1187. package/dist/src/rules/primitive-projection/value-domains.js +241 -0
  1188. package/dist/src/rules/primitive-projection/value-domains.js.map +1 -0
  1189. package/dist/src/rules/react-commit-sensitivity/binding-resolution.d.ts.map +1 -1
  1190. package/dist/src/rules/react-commit-sensitivity/binding-resolution.js +2 -1
  1191. package/dist/src/rules/react-commit-sensitivity/binding-resolution.js.map +1 -1
  1192. package/dist/src/rules/react-commit-sensitivity/direct-transitions.d.ts.map +1 -1
  1193. package/dist/src/rules/react-commit-sensitivity/direct-transitions.js +2 -7
  1194. package/dist/src/rules/react-commit-sensitivity/direct-transitions.js.map +1 -1
  1195. package/dist/src/rules/react-commit-sensitivity/react-commit-sensitivity.js +2 -1
  1196. package/dist/src/rules/react-commit-sensitivity/react-commit-sensitivity.js.map +1 -1
  1197. package/dist/src/rules/react-commit-sensitivity/ref-identity.d.ts.map +1 -1
  1198. package/dist/src/rules/react-commit-sensitivity/ref-identity.js +18 -11
  1199. package/dist/src/rules/react-commit-sensitivity/ref-identity.js.map +1 -1
  1200. package/dist/src/rules/source-callback-contract/latest-callback-ref.d.ts.map +1 -1
  1201. package/dist/src/rules/source-callback-contract/latest-callback-ref.js +3 -2
  1202. package/dist/src/rules/source-callback-contract/latest-callback-ref.js.map +1 -1
  1203. package/dist/src/rules/source-callback-contract/react-effects.d.ts +0 -1
  1204. package/dist/src/rules/source-callback-contract/react-effects.d.ts.map +1 -1
  1205. package/dist/src/rules/source-callback-contract/react-effects.js +2 -4
  1206. package/dist/src/rules/source-callback-contract/react-effects.js.map +1 -1
  1207. package/dist/src/rules/source-callback-contract/source-callback-contract.d.ts.map +1 -1
  1208. package/dist/src/rules/source-callback-contract/source-callback-contract.js +7 -13
  1209. package/dist/src/rules/source-callback-contract/source-callback-contract.js.map +1 -1
  1210. package/dist/src/rules/state-proofs/binding-lookup.d.ts +0 -1
  1211. package/dist/src/rules/state-proofs/binding-lookup.d.ts.map +1 -1
  1212. package/dist/src/rules/state-proofs/binding-lookup.js +19 -14
  1213. package/dist/src/rules/state-proofs/binding-lookup.js.map +1 -1
  1214. package/dist/src/rules/state-proofs/builtin-read-calls.d.ts +19 -0
  1215. package/dist/src/rules/state-proofs/builtin-read-calls.d.ts.map +1 -0
  1216. package/dist/src/rules/state-proofs/builtin-read-calls.js +317 -0
  1217. package/dist/src/rules/state-proofs/builtin-read-calls.js.map +1 -0
  1218. package/dist/src/rules/state-proofs/callback-sites.d.ts.map +1 -1
  1219. package/dist/src/rules/state-proofs/callback-sites.js +2 -9
  1220. package/dist/src/rules/state-proofs/callback-sites.js.map +1 -1
  1221. package/dist/src/rules/state-proofs/event-roots.d.ts +2 -0
  1222. package/dist/src/rules/state-proofs/event-roots.d.ts.map +1 -1
  1223. package/dist/src/rules/state-proofs/event-roots.js +10 -19
  1224. package/dist/src/rules/state-proofs/event-roots.js.map +1 -1
  1225. package/dist/src/rules/state-proofs/jsx-subtrees.d.ts +10 -1
  1226. package/dist/src/rules/state-proofs/jsx-subtrees.d.ts.map +1 -1
  1227. package/dist/src/rules/state-proofs/jsx-subtrees.js +62 -2
  1228. package/dist/src/rules/state-proofs/jsx-subtrees.js.map +1 -1
  1229. package/dist/src/rules/state-proofs/presentation-calls.d.ts +28 -0
  1230. package/dist/src/rules/state-proofs/presentation-calls.d.ts.map +1 -0
  1231. package/dist/src/rules/state-proofs/presentation-calls.js +200 -0
  1232. package/dist/src/rules/state-proofs/presentation-calls.js.map +1 -0
  1233. package/dist/src/rules/state-proofs/projection-hops.d.ts.map +1 -1
  1234. package/dist/src/rules/state-proofs/projection-hops.js +3 -16
  1235. package/dist/src/rules/state-proofs/projection-hops.js.map +1 -1
  1236. package/dist/src/rules/state-proofs/receiver-types.d.ts +25 -0
  1237. package/dist/src/rules/state-proofs/receiver-types.d.ts.map +1 -0
  1238. package/dist/src/rules/state-proofs/receiver-types.js +202 -0
  1239. package/dist/src/rules/state-proofs/receiver-types.js.map +1 -0
  1240. package/dist/src/rules/state-proofs/state-proofs.d.ts +8 -1
  1241. package/dist/src/rules/state-proofs/state-proofs.d.ts.map +1 -1
  1242. package/dist/src/rules/state-proofs/state-proofs.js +40 -19
  1243. package/dist/src/rules/state-proofs/state-proofs.js.map +1 -1
  1244. package/dist/src/rules/state-proofs/unique-repeated-selection.d.ts +1 -0
  1245. package/dist/src/rules/state-proofs/unique-repeated-selection.d.ts.map +1 -1
  1246. package/dist/src/rules/state-proofs/unique-repeated-selection.js +6 -17
  1247. package/dist/src/rules/state-proofs/unique-repeated-selection.js.map +1 -1
  1248. package/dist/src/rules/state-proofs/uniqueness-filters.d.ts.map +1 -1
  1249. package/dist/src/rules/state-proofs/uniqueness-filters.js +12 -5
  1250. package/dist/src/rules/state-proofs/uniqueness-filters.js.map +1 -1
  1251. package/package.json +5 -2
  1252. package/skills/legend-doctor/SKILL.md +16 -13
  1253. package/dist/src/index.d.ts +0 -18
  1254. package/dist/src/index.d.ts.map +0 -1
  1255. package/dist/src/index.js +0 -9
  1256. package/dist/src/index.js.map +0 -1
  1257. package/dist/src/project/legend-state-package.d.ts +0 -4
  1258. package/dist/src/project/legend-state-package.d.ts.map +0 -1
  1259. package/dist/src/project/legend-state-package.js +0 -109
  1260. package/dist/src/project/legend-state-package.js.map +0 -1
  1261. package/dist/src/project/source-components/pure-projections.d.ts +0 -4
  1262. package/dist/src/project/source-components/pure-projections.d.ts.map +0 -1
  1263. package/dist/src/project/source-components/pure-projections.js +0 -65
  1264. package/dist/src/project/source-components/pure-projections.js.map +0 -1
  1265. package/dist/src/rules/derived-use-value/derived-memos.d.ts +0 -28
  1266. package/dist/src/rules/derived-use-value/derived-memos.d.ts.map +0 -1
  1267. package/dist/src/rules/derived-use-value/derived-memos.js +0 -162
  1268. package/dist/src/rules/derived-use-value/derived-memos.js.map +0 -1
  1269. package/dist/src/rules/derived-use-value/derived-use-value.d.ts.map +0 -1
  1270. package/dist/src/rules/derived-use-value/derived-use-value.js +0 -76
  1271. package/dist/src/rules/derived-use-value/derived-use-value.js.map +0 -1
  1272. package/dist/src/rules/derived-use-value/migration-owner.d.ts +0 -4
  1273. package/dist/src/rules/derived-use-value/migration-owner.d.ts.map +0 -1
  1274. package/dist/src/rules/derived-use-value/migration-owner.js +0 -100
  1275. package/dist/src/rules/derived-use-value/migration-owner.js.map +0 -1
  1276. package/dist/src/rules/derived-use-value/migration-proof.d.ts +0 -5
  1277. package/dist/src/rules/derived-use-value/migration-proof.d.ts.map +0 -1
  1278. package/dist/src/rules/derived-use-value/migration-proof.js +0 -168
  1279. package/dist/src/rules/derived-use-value/migration-proof.js.map +0 -1
  1280. package/dist/src/rules/derived-use-value/primitive-results.d.ts +0 -9
  1281. package/dist/src/rules/derived-use-value/primitive-results.d.ts.map +0 -1
  1282. package/dist/src/rules/derived-use-value/primitive-results.js +0 -154
  1283. package/dist/src/rules/derived-use-value/primitive-results.js.map +0 -1
  1284. package/dist/src/rules/effects/setup-only-mount.d.ts +0 -6
  1285. package/dist/src/rules/effects/setup-only-mount.d.ts.map +0 -1
  1286. package/dist/src/rules/effects/setup-only-mount.js +0 -65
  1287. package/dist/src/rules/effects/setup-only-mount.js.map +0 -1
  1288. package/dist/src/rules/observable-ownership/written-computed-initializers.d.ts +0 -5
  1289. package/dist/src/rules/observable-ownership/written-computed-initializers.d.ts.map +0 -1
  1290. package/dist/src/rules/observable-ownership/written-computed-initializers.js +0 -159
  1291. package/dist/src/rules/observable-ownership/written-computed-initializers.js.map +0 -1
  1292. package/dist/src/rules/observable-reads/fresh-selector-results.d.ts +0 -10
  1293. package/dist/src/rules/observable-reads/fresh-selector-results.d.ts.map +0 -1
  1294. package/dist/src/rules/observable-reads/fresh-selector-results.js +0 -191
  1295. package/dist/src/rules/observable-reads/fresh-selector-results.js.map +0 -1
  1296. package/dist/src/rules/observable-tracking/helper-summary.d.ts +0 -26
  1297. package/dist/src/rules/observable-tracking/helper-summary.d.ts.map +0 -1
  1298. package/dist/src/rules/observable-tracking/helper-summary.js +0 -247
  1299. package/dist/src/rules/observable-tracking/helper-summary.js.map +0 -1
  1300. package/dist/src/rules/observable-tracking/helper-tracking.d.ts +0 -5
  1301. package/dist/src/rules/observable-tracking/helper-tracking.d.ts.map +0 -1
  1302. package/dist/src/rules/observable-tracking/helper-tracking.js +0 -77
  1303. package/dist/src/rules/observable-tracking/helper-tracking.js.map +0 -1
  1304. package/dist/src/rules/plain-primitive-projection.d.ts +0 -12
  1305. package/dist/src/rules/plain-primitive-projection.d.ts.map +0 -1
  1306. package/dist/src/rules/plain-primitive-projection.js +0 -232
  1307. package/dist/src/rules/plain-primitive-projection.js.map +0 -1
package/EXAMPLES.md CHANGED
@@ -5,7 +5,8 @@ Use these examples after reading a finding. They show the shape of an edit, not
5
5
  - Apply `change` findings as written.
6
6
  - Inspect `candidate` findings first.
7
7
  - Preserve ownership, timing, mount identity, keys, cleanup, and atomic updates.
8
- - Check the installed Legend State version and types.
8
+ - When a finding carries `edits`, apply those instead of retyping the example. See
9
+ [REPORT.md](REPORT.md#machine-applicable-edits).
9
10
 
10
11
  The snippets assume these imports when needed:
11
12
 
@@ -13,10 +14,11 @@ The snippets assume these imports when needed:
13
14
  import { batch, type Observable } from "@legendapp/state";
14
15
  import {
15
16
  Computed,
16
- useMount,
17
+ For,
18
+ Show,
19
+ Switch,
17
20
  useObservable,
18
21
  useObserveEffect,
19
- useUnmount,
20
22
  useValue,
21
23
  } from "@legendapp/state/react";
22
24
  import { $React } from "@legendapp/state/react-web";
@@ -41,11 +43,12 @@ const refresh = () => {
41
43
 
42
44
  ### Calculate derived values during render
43
45
 
44
- `delete-derived-state` removes the stale first render and the effect-driven second render.
46
+ `delete-derived-state` removes the render that shows a stale value after an input changes and the effect-driven
47
+ render that corrects it.
45
48
 
46
49
  ```tsx
47
50
  // Before
48
- const [total, setTotal] = useState(0);
51
+ const [total, setTotal] = useState(price * quantity);
49
52
  useEffect(() => setTotal(price * quantity), [price, quantity]);
50
53
 
51
54
  // After
@@ -54,6 +57,9 @@ const total = price * quantity;
54
57
 
55
58
  If that was the effect's only work, `delete-effect` removes the empty effect too.
56
59
 
60
+ When the initializer differs from the value the effect writes, such as `useState(0)`, the first commit shows the
61
+ initializer. Calculating during render would change that first commit, so the finding is `keep-state`.
62
+
57
63
  ### Remove a React mirror
58
64
 
59
65
  `use-value` keeps the Legend value as the only owner.
@@ -202,15 +208,79 @@ const name = profile.name;
202
208
  const name = useValue(profile$.name);
203
209
  ```
204
210
 
211
+ The finding needs a production write that changes another field under the subscribed parent without touching the
212
+ read one. Otherwise nothing the narrow subscription skips ever changes, and the action abstains. That covers a parent
213
+ passed in as a prop, a parent that is only replaced whole, and a field only ever written together with the read one.
214
+
215
+ A single-property destructure such as `const { name } = useValue(profile$)` carries `edits` that produce
216
+ `const name = useValue(profile$.name)`. Renaming reads of a whole-value binding stays prose.
217
+
218
+ A map read at one key narrows the same way:
219
+
220
+ ```tsx
221
+ // Before: a write to any area wakes this label
222
+ const allAreas = useValue(areas$);
223
+ return <span>{allAreas[areaId]?.name}</span>;
224
+
225
+ // After: only areas$[areaId] can wake it
226
+ const area = useValue(areas$[areaId]);
227
+ return <span>{area?.name}</span>;
228
+ ```
229
+
230
+ Every read must index the value with the same key, and the key must be fixed for the render: a literal, a prop or
231
+ parameter, or a `const`. When that `const` comes after the subscription, the finding says to declare the narrowed
232
+ subscription after it, which holds only when nothing in between reads the value, returns, or throws. The finding
233
+ needs a production write that changes one entry without replacing the map, and no other subscription, observer
234
+ read, dependency-free effect, ref or `peek()` render read, or subscribing parent that renders the owner on the same
235
+ change.
236
+
205
237
  For a derived primitive, keep the comparison inside the selector:
206
238
 
207
239
  ```tsx
208
240
  const selected = useValue(() => selectedId$.get() === id);
209
241
  ```
210
242
 
243
+ ### Drop a subscription no render reads
244
+
245
+ Use `peek-unrendered-use-value` when a `useValue` result feeds only a hook initial value or a synchronous event
246
+ handler. The subscription reruns the component on every update for a value its output never shows.
247
+
248
+ ```tsx
249
+ // Before: every play or pause renders the whole playlist
250
+ const isPlaying = useValue(player$.isPlaying);
251
+ const wasPlayingRef = useRef(isPlaying);
252
+ const toggle = useCallback(() => setPlaying(!isPlaying), [isPlaying]);
253
+
254
+ // After: reads take a snapshot when they run
255
+ const wasPlayingRef = useRef(player$.isPlaying.peek());
256
+ const toggle = useCallback(() => setPlaying(!player$.isPlaying.peek()), []);
257
+ ```
258
+
259
+ The path must be seeded with plain data or a module constant of a literal, so dropping the subscription never
260
+ delays a lazy `synced` or computed source. A persisted store is lazy: its first read starts the load, so it stays
261
+ out of scope. The result may sit behind `!`, a type assertion, or `?? fallback`; each rewritten read keeps the
262
+ fallback, which must be a literal or a module `const`. The action abstains when a render reads a ref, `peek()`,
263
+ or an untracked `get()` that could depend on the forced rerender, and when a read is awaited, deferred, or captured
264
+ by a callback that omits the value from its dependencies. A `path$.get()` directly inside the synchronous selector of
265
+ `useValue`, `use$`, or `useSelector` is tracked by that hook and does not block it.
266
+
267
+ Two more reads take a snapshot safely. A compare-and-set guard, `if (value !== next) path$.set(next)`, in an inline
268
+ handler or a bare owner-level callback skips only writes Legend drops anyway, since `set` notifies nothing when the
269
+ stored value is identical; `next` must be a literal or a local name, and the comparison must be the guard's last
270
+ condition with no `else`. The initializer of an owner-level `const` that nothing references, and that assigns
271
+ nothing, never reaches output, so its read becomes a `peek()` as well.
272
+
211
273
  ### Split unrelated leaves
212
274
 
213
- `split-use-value-leaves` gives each leaf its own field subscription.
275
+ `split-use-value-leaves` gives each leaf its own field subscription. It requires an object-literal initial value
276
+ that proves the field set, and a production write that changes an unread data field without touching a read one.
277
+ When every field that changes is already read, or the only unread fields are constants and functions, the split
278
+ removes no render and the action abstains.
279
+
280
+ Both actions count writes by synchronous stretch, not by line. Writes in the same function body before an `await`,
281
+ or inside one `batch` or array callback, land in one render, so an unread field written beside a read one proves
282
+ nothing. A write after an `await`, or in a separate handler or listener, is its own stretch. Writes in the
283
+ module body run while the module loads, before any importer renders, so they never count.
214
284
 
215
285
  ```tsx
216
286
  function Profile() {
@@ -267,7 +337,8 @@ separate subscriptions add overhead and are justified only when their combined r
267
337
 
268
338
  ### Remove selector work and legacy names
269
339
 
270
- Use `pass-observable-to-use-value` for a direct value and `replace-legacy-use-value` for old APIs.
340
+ Use `pass-observable-to-use-value` for a direct value and `replace-legacy-use-value` for `use$` and `useSelector`,
341
+ which Legend State deprecates in favor of `useValue` and plans to remove.
271
342
 
272
343
  ```tsx
273
344
  useValue(() => profile$.name.get()); // Before
@@ -277,6 +348,14 @@ useSelector(profile$.name); // Before
277
348
  useValue(profile$.name); // After
278
349
  ```
279
350
 
351
+ The rename is `style`, since `useValue` is the same function, except for a `use$` call in a function the React Compiler
352
+ compiles. The Compiler gives hook semantics only to callees named `/^use[A-Z0-9]/`, so it can cache the `use$` result
353
+ and render a stale value; there the rename is `change`. `useSelector`, and an alias whose imported or local name passes
354
+ that test, stay `style`. A function counts as compiled when the project's config enables the Compiler and its default
355
+ `infer` mode compiles it: a component or hook by name that calls a hook or creates JSX, a `memo` or `forwardRef`
356
+ callback, or a `"use memo"` function, with no `"use no memo"` directive and no ESLint suppression of a React hook rule.
357
+ A function passed inline to `observer` is not compiled.
358
+
280
359
  The same-node synchronous selector rewrite without options is `style`: it selects the same value, with no proven
281
360
  render or lifecycle saving. Inside `observer`, direct input can use the enclosing observer's tracking instead of a
282
361
  separate selector hook. Async selectors and calls with options remain unchanged because their Promise or tracking
@@ -284,31 +363,60 @@ contracts can differ. An eager `useValue(profile$.name.get())` is still `change`
284
363
  an ordinary component or avoids redundant selector hooks inside `observer`. Keep `useValue(() => ...)` when the
285
364
  selector derives a value from one or more observables, including boolean projections and formatted computed values.
286
365
 
287
- ### Compute a derived primitive as an observable
366
+ Both actions carry `edits`. A legacy migration renames every legacy call in the file and removes the legacy import
367
+ specifiers together, so each of those findings carries the same file-wide edit set.
368
+
369
+ ### Select a derived primitive
288
370
 
289
- Use `derive-computed-observable` when every `useMemo` dependency is a `useValue` subscription read nowhere else and
290
- every result is a primitive.
371
+ This is a manual pattern; no action reports it on its own. When a `useMemo` derives a primitive from observable reads
372
+ that nothing else in the component reads, select the primitive instead.
291
373
 
292
374
  ```tsx
293
- // Before: any change to either field renders Header
294
- const selectedView = useValue(library$.selectedView);
295
- const selectedPlaylistId = useValue(library$.selectedPlaylistId);
296
- const title = useMemo(
297
- () => (selectedView === "playlist" ? `playlist-${selectedPlaylistId}` : "Library"),
298
- [selectedView, selectedPlaylistId],
375
+ // Before: every write under habits$.streaks renders the component
376
+ const streaks = useValue(habits$.streaks);
377
+ const longest = useMemo(
378
+ () => Math.max(0, ...Object.values(streaks).map((s) => s.longest)),
379
+ [streaks],
299
380
  );
300
381
 
301
- // After: the computed tracks both fields; Header renders only when the title string changes
302
- const title$ = useObservable(() =>
303
- library$.selectedView.get() === "playlist"
304
- ? `playlist-${library$.selectedPlaylistId.get()}`
305
- : "Library",
382
+ // After: the selector reruns on each render, and a write renders only when the number changes
383
+ const longest = useValue(() =>
384
+ Math.max(0, ...Object.values(habits$.streaks.get()).map((s) => s.longest)),
306
385
  );
307
- const title = useValue(title$);
308
386
  ```
309
387
 
310
- Keep the memo when it mixes props or component-local helpers with observable inputs, or when it returns an object or
311
- array: a selector would recompute on every render, and a reference result renders on every input change either way.
388
+ Keep the memo when an input is also read elsewhere in the component, since that read renders on every write anyway,
389
+ or when the result is an object or array, since `useValue` compares by reference and a new result always renders.
390
+ `snapshot-mutated-use-value` recommends this rewrite when an in-place write leaves such a memo stale.
391
+
392
+ ### Select fields instead of a new object
393
+
394
+ `select-stable-selector-result` asks about a selector that builds a new object or array on every run.
395
+
396
+ ```tsx
397
+ // Before: every viewport$.width change renders, even while `wide` stays false
398
+ const layout = useValue(() => ({
399
+ label: viewport$.label.get(),
400
+ wide: viewport$.width.get() > 800,
401
+ }));
402
+
403
+ // After: a width change renders only when `wide` flips
404
+ const label = useValue(viewport$.label);
405
+ const wide = useValue(() => viewport$.width.get() > 800);
406
+ ```
407
+
408
+ `useValue` reruns its selector on each change to an observable the selector read and renders when the result `!==`
409
+ the result of the last render; Legend State offers no shallow or custom equality option. A new literal never equals
410
+ the last one, so the component renders on every tracked change. That costs a render only when a change can leave the
411
+ contents equal: a field built from raw reads (`{ width: viewport$.width.get() }`) changes on every write anyway, and
412
+ the rule stays silent.
413
+
414
+ Every finding is a `candidate`, since only the app knows whether such changes happen. It is reported for a literal
415
+ result when a tracked path reaches it only through comparisons, negations, conditions, or `typeof`, and that path's
416
+ declared domain, when known, holds objects or three or more values; and for `filter`, `map`, `flatMap`, `Object.keys`,
417
+ `Object.values`, or `Object.entries` of a tracked read, where you can select the primitives the render needs or render
418
+ the items with `<For each={items$}>`. A selector that returns a fresh value on only some paths, passes options, reads
419
+ no proven observable, or shares its path with another subscription in the owner stays silent.
312
420
 
313
421
  ### Update one host prop
314
422
 
@@ -383,9 +491,15 @@ batch(() => {
383
491
 
384
492
  This preserves an atomic transition: subscribers see one completed update.
385
493
 
494
+ React already commits writes from one synchronous stretch in one render, so neither action saves a React render. Both
495
+ appear only when one non-React tracker in the same file reads two or more of the written paths: an `observe`,
496
+ `useObserve`, `useObserveEffect`, or `useComputed` body, or an `onChange` listener on a shared parent. Separate writes
497
+ rerun that tracker once per write, on torn state in between. `syncObservable` persistence queues changes until a
498
+ microtask, so it saves them together either way.
499
+
386
500
  ### Preserve a conditional child's mount behavior
387
501
 
388
- Keep the observable at the owner. Put the condition in a stable leaf.
502
+ Keep the observable at the owner. Let `Show` hold the condition.
389
503
 
390
504
  ```tsx
391
505
  function Page() {
@@ -394,17 +508,26 @@ function Page() {
394
508
  <>
395
509
  <Canvas />
396
510
  <button onClick={() => open$.set(true)}>Open</button>
397
- <PanelGate open$={open$} />
511
+ <Show if={open$}>{() => <Panel />}</Show>
398
512
  </>
399
513
  );
400
514
  }
401
-
402
- function PanelGate({ open$ }: { open$: Observable<boolean> }) {
403
- return useValue(open$) ? <Panel /> : null;
404
- }
405
515
  ```
406
516
 
407
- `PanelGate` stays mounted. `Panel` keeps its original conditional mount.
517
+ `Show` stays mounted as the only subscriber and calls its child function only while the condition holds, so
518
+ `Panel` keeps its original conditional mount. It re-renders with the owner, so values the child captures stay
519
+ current. `cond ? <A /> : <B />` becomes `<Show if={cond$} else={() => <B />}>{() => <A />}</Show>`, and a chain
520
+ of `tab === "posts" ? ... : tab === "media" ? ... : ...` becomes `<Switch value={tab$}>` with one arm per value
521
+ and a `default` arm. Both return the selected element from one position, so a branch keeps its state across
522
+ toggles exactly when it did before. A finding uses this form only when it renders the same thing:
523
+
524
+ - A `&&` condition must be boolean. A falsy `0` or `""` would render under `&&` but not under `Show`.
525
+ - A value narrowed by the condition is not read in a branch, because `get()` would lose the narrowing.
526
+ - The slot reads no other observable with `get()` and calls no hook, since `Show` tracks its child function.
527
+ - A ternary sits directly in a host element or fragment, which never inspects its children.
528
+ - `Switch` needs every value the state can hold to be a string literal outside `Object.prototype`.
529
+
530
+ Otherwise the finding asks for an always-mounted wrapper component that evaluates the slot as written.
408
531
 
409
532
  ### Subscribe once per keyed row
410
533
 
@@ -421,6 +544,39 @@ rows.map((row) => <RowState key={row.id} id={row.id} selectedId$={selectedId$} /
421
544
 
422
545
  Index keys and state-controlled row mounts need review.
423
546
 
547
+ ### Render an observable list with For
548
+
549
+ `render-list-with-for` changes a component whose only read of an observable array is a keyed map.
550
+
551
+ ```tsx
552
+ // Before: a change to one todo renders Todos and every row
553
+ const todos = useValue(todos$);
554
+ return (
555
+ <ul>
556
+ {todos.map((todo) => (
557
+ <TodoRow key={todo.id} todo={todo} />
558
+ ))}
559
+ </ul>
560
+ );
561
+
562
+ // After: a change to one todo renders its row
563
+ return (
564
+ <ul>
565
+ <For each={todos$}>
566
+ {(todo$) => {
567
+ const todo = todo$.get();
568
+ return <TodoRow todo={todo} />;
569
+ }}
570
+ </For>
571
+ </ul>
572
+ );
573
+ ```
574
+
575
+ `For` subscribes to the array shallowly and renders each row in its own observer, keyed by the item's `id`.
576
+ Rows do not re-render with the component, so a row that captures a prop, state, or other render value would keep
577
+ its first value; those maps, index keys, keys other than `item.id`, rows that read other observables, and maps
578
+ inside a component that inspects its children stay unchanged.
579
+
424
580
  ## Keep command state out of renders
425
581
 
426
582
  ### Replace render-free state with a ref
@@ -445,24 +601,39 @@ const send = () => socketRef.current?.send("ping");
445
601
 
446
602
  ### Use a non-tracking snapshot
447
603
 
448
- `use-peek-for-snapshot` changes a proven command read.
604
+ `use-peek-for-snapshot` marks a read that needs a snapshot, not a dependency. Handlers, effects, and `onChange`
605
+ listeners run outside any tracker, where `get()` already reads without subscribing, so there the finding is style. It is
606
+ a change only for a `useState` initializer inside an `observer` render, where `get()` would subscribe the component.
449
607
 
450
608
  ```tsx
451
609
  const save = () => persist(settings$.theme.get()); // Before
452
610
  const save = () => persist(settings$.theme.peek()); // After
453
611
  ```
454
612
 
455
- Render reads and reactive callbacks keep tracking reads.
613
+ Render reads and reactive callbacks keep tracking reads. The finding's `edits` rename `get` to `peek`.
614
+
615
+ A row `key` read with `get()` inside an `observer` render or a `Computed`, `Memo`, `Show`, or `For` child function
616
+ is a `candidate`. The tracked read subscribes the parent to every row's key; `For` derives keys without tracking
617
+ them. The two differ only when code rewrites a key in place, which remounts the row under `get()` and keeps it
618
+ under `peek()`, so confirm no such write exists.
619
+
620
+ ```tsx
621
+ <For each={todos$}>{(todo$) => <TodoRow key={todo$.id.get()} todo$={todo$} />}</For> // Before
622
+ <For each={todos$}>{(todo$) => <TodoRow key={todo$.id.peek()} todo$={todo$} />}</For> // After
623
+ ```
456
624
 
457
625
  ## Track every render read
458
626
 
459
627
  Legend tracks a `get()` only inside a tracking context: `useValue`, `observer`, a reactive component's selector, or
460
- `observe`/`when`. These findings catch reads that fall outside one.
628
+ `observe`/`when`. These findings catch reads that fall outside one, or whose change a memo hides. Legend State
629
+ discourages render-time `get()` even inside `observer`; read rendered values through `useValue`.
461
630
 
462
631
  ### Subscribe to a render read
463
632
 
464
633
  `use-value-for-render-read` changes a `get()` that runs in a component's or custom hook's render, including
465
- synchronous `.map`-style callbacks, with nothing tracking it.
634
+ synchronous `.map`-style callbacks, with nothing tracking it. When the package's Babel config lists
635
+ `@legendapp/state/babel`, reads among the element children of `Computed`, `Memo`, and `Show` are tracked, because the
636
+ plugin wraps those children in a function.
466
637
 
467
638
  ```tsx
468
639
  // Before: Counter renders the value once and never again
@@ -478,55 +649,73 @@ function Counter() {
478
649
  }
479
650
  ```
480
651
 
652
+ The direct initializer form carries `edits`, including a `useValue` specifier beside an existing
653
+ `@legendapp/state/react` import. It carries none after an early return, where the new hook would be conditional.
481
654
  A read inside a conditional, JSX, or iteration callback gets a hoisting instruction: add `const value =
482
- useValue(path$)` at the top of the owner and read the binding there. The rule stays silent for `observer` and
483
- `reactiveObserver` components, for paths a `useValue` in the same owner already covers (directly, through a selector,
484
- or through a `const` alias), for hook-argument snapshots such as `useState(x$.get())`, for `key` reads, and for
485
- `get(true)` or dynamically keyed paths.
655
+ useValue(path$)` at the top of the owner and read the binding there. Inside `observer` and `reactiveObserver`
656
+ components the read already tracks and `useValue(path$)` performs the same `get()`, so only the direct initializer
657
+ form is reported, as `style` with the same edit. When the React Compiler compiles the component (declared, then
658
+ wrapped as `observer(Counter)`) and the read's value reaches the rendered output, the Compiler memoizes the `get()` like
659
+ any call and observer's re-render can reuse the stale result, so the read is a `change`, in JSX too. The rule stays silent for paths a `useValue` in the same owner
660
+ already covers (directly, through a selector, or through a `const` alias), for hook-argument snapshots such as
661
+ `useState(x$.get())`, for reads handed to a Legend input that tracks on its own (`Show if`, `For each`, a `Memo`
662
+ child, a `$` prop, or `when`), for `key` reads, and for `get(true)` or dynamically keyed paths.
486
663
 
487
- ### Pass the observable to a reactive input
664
+ ### Select a copy when a memo keys on a mutated value
488
665
 
489
- `pass-observable-to-reactive-input` changes a `get()` or `peek()` handed to an input that tracks on its own.
666
+ `snapshot-mutated-use-value` changes a `useValue` whose raw result keys a `useMemo` while another write mutates that
667
+ value in place.
490
668
 
491
669
  ```tsx
492
- <Show if={ready$.get()}>{() => <Panel />}</Show>; // Before
493
- <Show if={ready$}>{() => <Panel />}</Show>; // After
670
+ // Elsewhere: library$.folders.push(folder), library$.folders[i].name.set(name), or counts$.assign({ b: 2 })
494
671
 
495
- <For each={items$.get()}>{(item$) => <Row item$={item$} />}</For>; // Before
496
- <For each={items$}>{(item$) => <Row item$={item$} />}</For>; // After
497
-
498
- <Memo>{name$.get()}</Memo>; // Before
499
- <Memo>{name$}</Memo>; // After
672
+ const folders = useValue(library$.folders); // Before
673
+ const folders = useValue(() => [...library$.folders.get()]); // After
674
+ const visible = useMemo(() => folders.filter((folder) => !folder.deleted), [folders]); // Unchanged
675
+ ```
500
676
 
501
- <$React.input $value={name$.get()} />; // Before
502
- <$React.input $value={name$} />; // After
677
+ Legend applies child writes, array mutators, `assign`, and `delete` to the object it already holds, so `useValue`
678
+ rerenders the component with the same reference and the memo returns its previous result. A copy selected inside
679
+ `useValue` gets a new reference on every tracked change. If the derivation is cheap, computing it without `useMemo`
680
+ is equally correct. When that memo is the value's only reader and computes a primitive without side effects, the
681
+ finding instead recommends [selecting the primitive](#select-a-derived-primitive) and deleting both the memo and the
682
+ `useValue` binding.
503
683
 
504
- when(ready$.get(), start); // Before
505
- when(ready$, start); // After
506
- ```
684
+ The finding names each in-place write and fires only when the memo reads what the write changes: a membership write
685
+ against any element read, a field write against a read of that field. It is a `change` when every other dependency
686
+ keeps its identity across renders (module constants, refs, state setters, owned observables) and a `candidate` when
687
+ another dependency could change in the same update and recompute the memo. Writes that replace the value with
688
+ `set(next)`, writes to unread fields, `get(true)` reads, and bindings that are reassigned stay silent.
507
689
 
508
- Covered inputs: `Show if`/`ifReady`, `Switch value`, `For each`, `Memo` and `Computed` children, `$`-prefixed props
509
- on `$React`, native `$View`-style hosts and `reactive()` components, and the first argument of `observe`, `when`,
510
- `whenReady`, `useObserve`, `useObserveEffect`, `useWhen`, and `useWhenReady`. The snapshot is evaluated once in the
511
- parent's render, so the input only updates when the parent happens to re-render; `For` also calls `get()` on what it
512
- receives, so a raw array breaks it. `useValue(x$.get())` stays with `pass-observable-to-use-value`.
690
+ In a function the React Compiler compiles, the Compiler memoizes by reference without a `useMemo`: a method chain on
691
+ the raw value, or a call that receives it, whose result reaches the rendered output, such as
692
+ `{folders.map((folder) => <Row folder={folder} />)}`, keeps its cached result after an in-place write. The same finding
693
+ covers those calls; reads through a property such as `folders.length`, results that stay inside the render, and
694
+ values handed to hooks stay silent, because the Compiler does not cache them on the raw reference.
513
695
 
514
- ### Split a selector that only builds a literal
696
+ ### Re-render a Memo child that reads parent values
515
697
 
516
- `split-use-value-result` offers a `style` rewrite for a const destructured selector whose members are direct reads or inert expressions.
698
+ `use-computed-for-parent-reads` changes a `<Memo>` whose child reads a value from its owner's render.
517
699
 
518
700
  ```tsx
519
- const { a, b } = useValue(() => ({ a: state$.a.get(), b: state$.b.get() })); // Before
520
- const a = useValue(state$.a); // After
521
- const b = useValue(state$.b);
701
+ const offset = useValue(feed$.offset);
702
+ const index = offset + position;
703
+
704
+ <Memo>{() => <Fork at={index} forks={forks$.get()} />}</Memo>; // Before
705
+ <Computed>{() => <Fork at={index} forks={forks$.get()} />}</Computed>; // After
522
706
  ```
523
707
 
524
- The aggregate object is fresh; its destructured values retain their own identities. This rewrite removes the result
525
- allocation and adds per-path subscriptions. It does not prove fewer owner renders, lower CPU cost, or less native
526
- work. Every observable read must remain represented, including reads in otherwise unused fields: they may invalidate
527
- ref-backed render snapshots. Omitted effects, duplicate properties, mutable declarations, results used whole, block
528
- bodies, async selectors, prototype-setting properties, reordered reads, spreads, defaults, rest elements, computed
529
- members, and calls stay as they are.
708
+ `Memo` wraps `Computed` in `React.memo` with an equality check that ignores new children unless `scoped` is set, so
709
+ the owner's renders never reach the child. The child tracks the observables it reads, but every value it captures
710
+ from the owner stays at the Memo's first render. `Computed` re-renders with its parent and keeps the same tracking.
711
+
712
+ It is a `change` when a captured value changes whenever the owner re-renders for it: a `useValue`, `use$`, or
713
+ `useSelector` result, React state whose setter is used, a `useSyncExternalStore` result, or a value, callback, or
714
+ local render helper computed from one. It is a `candidate` when the child reads only props, context or custom-hook
715
+ results, or values computed from them, which may stay constant for the Memo's lifetime. Observables, including props
716
+ the component's type declares `Observable`, refs, state setters, owned observables, module values, and callbacks
717
+ memoized without changing dependencies keep their identity and stay silent, as do `scoped` Memos and values read
718
+ only inside event handlers.
530
719
 
531
720
  ## Keep effect timing correct
532
721
 
@@ -548,6 +737,37 @@ const changeQuery = (next: string) => {
548
737
 
549
738
  Every query change must come through the proven event path.
550
739
 
740
+ ### Reset state when an input changes
741
+
742
+ `reset-during-render` removes the stale commit an effect renders before it resets state for new props, params, or
743
+ loaded data.
744
+
745
+ ```tsx
746
+ // Before
747
+ const [selected, setSelected] = useState(0);
748
+ useEffect(() => setSelected(0), [query]);
749
+
750
+ // After
751
+ const [selected, setSelected] = useState(0);
752
+ const [prevQuery, setPrevQuery] = useState(query);
753
+ if (!Object.is(query, prevQuery)) {
754
+ setPrevQuery(query);
755
+ setSelected(0);
756
+ }
757
+ ```
758
+
759
+ The effect body must only set the owner's state from pure values, under at most one `if`, with no cleanup, and must
760
+ not read the state it resets. The effect's mount write must be a no-op so the first commit stays the same: each value
761
+ is the state's own initializer, or the `if` pins one input to literals, as in `kind === "a" || kind === "b"`, under
762
+ each of which the initializer evaluates to the written value. An effect that replaces a placeholder after mount keeps
763
+ its timing. The comparison settles only when each dependency keeps its identity while React reruns the owner. A state
764
+ value, a module binding, a `length` or other primitive constant, a memo that returns only such values, or a component
765
+ prop proves that, since React reruns a component after a render-phase update with the same props; a destructuring
766
+ default must be a primitive or a module binding. A custom hook's parameter qualifies when its declared type is a
767
+ string, number, bigint, boolean, literal, `null`, or `undefined`, which a pure caller recomputes to a value the
768
+ `Object.is` guard finds equal, even `NaN`. Any other value the owner computes, such as a hook result, leaves a review
769
+ that asks about it. A function, object, or array the owner rebuilds every render keeps the effect.
770
+
551
771
  ### React to an observable without rendering
552
772
 
553
773
  Use `use-observe-effect` when a `useValue` result exists only to run an external side effect.
@@ -561,21 +781,75 @@ useEffect(() => syncTheme(theme), [theme]);
561
781
  useObserveEffect(() => syncTheme(settings$.theme.get()));
562
782
  ```
563
783
 
564
- Keep the React effect when the same value also renders. Moving it could change post-commit timing.
784
+ Keep the React effect when the same value also renders. Moving it could change post-commit timing. Keep it as well
785
+ when every parent that renders the component subscribes to the same observable: the parent's render already reruns
786
+ the component on each change, so dropping `useValue` saves nothing. When a parent might rerender it, through an
787
+ ancestor subscription or a memoized child whose props may be stable, the finding is a review.
565
788
 
566
- ### Express proven lifecycle intent
789
+ The observer tracks every `get()` it runs synchronously, including reads before the first `await` of an async
790
+ function it calls. A read of an observable that is not a dependency would become a new trigger, so the finding
791
+ names it and tells you to `peek()` it instead:
567
792
 
568
- Use `use-mount` and `use-unmount` only when lifecycle timing is proven equivalent.
793
+ ```tsx
794
+ // Before
795
+ const isPlaying = useValue(player$.isPlaying);
796
+ useEffect(() => {
797
+ if (!isPlaying && window$.isOpen.get()) closeWindow();
798
+ }, [isPlaying]);
799
+
800
+ // After
801
+ useObserveEffect(() => {
802
+ if (!player$.isPlaying.get() && window$.isOpen.peek()) closeWindow();
803
+ });
804
+ ```
805
+
806
+ Reads after an unconditional `await` and reads inside timers or promise callbacks stay untracked, so they are left
807
+ alone. The finding becomes a review when a read runs in a callback of unknown timing, or calls `get()` on a receiver
808
+ that is not proven to be an observable.
809
+
810
+ A function the effect calls runs inside the observer's pass too, and its reads cannot be peeked from the effect. A
811
+ project function, local or imported, is followed up to its first unconditional `await`; if it reads an observable
812
+ there, the finding becomes a review that names the call. So does any call whose code is not followed: an import from a
813
+ module out of view, a method of an application object, a callback prop, a value a hook returns, or a function held in
814
+ a variable. Globals, packages, React setters and refs, built-in methods of constants, and observable writes stay
815
+ convertible.
569
816
 
570
817
  ```tsx
571
- useEffect(() => start(), []); // Before
572
- useMount(() => start()); // After
818
+ // Stays a React effect: loadThread reads mail$.errorId before its first await, so an observer
819
+ // would refetch every time a failed load records its error.
820
+ useEffect(() => {
821
+ if (selectedId) void loadThread(selectedId);
822
+ }, [selectedId]);
823
+ ```
824
+
825
+ ### Keep empty-dependency lifecycle effects
826
+
827
+ Legend's `useMount(fn)` runs `useEffect(fn, [])` in production, and `useUnmount(fn)` is `useMount(() => fn)`. Rewriting
828
+ an empty-dependency effect with either removes no render or lifecycle cost, so the effect is `keep-effect`. Legend
829
+ State prefers `useMount` and `useUnmount` when writing new code; converting existing effects is optional.
830
+
831
+ ```tsx
832
+ useEffect(() => {
833
+ preload();
834
+ }, []);
573
835
 
574
- useEffect(() => () => stop(), []); // Before
575
- useUnmount(() => stop()); // After
836
+ useEffect(() => () => clearTimeout(timer.current), []);
576
837
  ```
577
838
 
578
- Keep the React effect when Strict Mode replay, setup work, or cleanup ownership could change.
839
+ The only difference is in development under Strict Mode: `useUnmount` skips the teardown of the simulated unmount. A
840
+ cleanup-free `useMount` setup still runs twice there, as the React effect does.
841
+
842
+ ### Keep layout work before paint
843
+
844
+ A `useLayoutEffect` finding reports `hook: "useEffect"`. The effect runs after DOM mutation and before paint, so it
845
+ can only be deleted with its derived state, move its write into the event, wait on the state it writes, or stay
846
+ `keep-effect`. `use-observe-effect`, Legend persistence, and lifecycle aliases would run its work after the first paint.
847
+
848
+ ```tsx
849
+ useLayoutEffect(() => {
850
+ setHeight(ref.current?.offsetHeight ?? 0);
851
+ }, [label]);
852
+ ```
579
853
 
580
854
  ### Persist an observable instead of writing storage
581
855
 
@@ -601,9 +875,7 @@ const filters$ = useObservable(
601
875
  `synced` and `syncObservable` come from `@legendapp/state/sync`; the plugin matching the storage the effect wrote comes
602
876
  from `@legendapp/state/persist-plugins/local-storage`. The finding stays a candidate because the storage key, the
603
877
  serialized shape, and any mount effect that hydrates the same key need a manual check. While the persisted state stays
604
- React, or a prop drives the write, the effect is `keep-effect`. When the installed `@legendapp/state` has no `sync`
605
- entry point, every such effect stays `keep-effect` and `capabilities.disabledRules` lists
606
- `browser-storage-persistence` with reason `sync-export-missing`.
878
+ React, or a prop drives the write, the effect is `keep-effect`.
607
879
 
608
880
  ### Keep an effect while changing its storage
609
881
 
@@ -650,7 +922,7 @@ menu$.open.set((value) => !value); // Before
650
922
  menu$.open.toggle(); // After
651
923
  ```
652
924
 
653
- `toggle-observable` is a style finding. Check that the installed API supports `toggle()`.
925
+ `toggle-observable` is a style finding.
654
926
 
655
927
  ## Own observables once
656
928
 
@@ -666,18 +938,6 @@ stability, or context. `useObservable` also deactivates the node it returns when
666
938
  node is the shared source. Nest one observable inside another only as an intentional link whose reads and writes
667
939
  forward to the source.
668
940
 
669
- ### Snapshot an initial value instead of writing a computed
670
-
671
- ```tsx
672
- const draft$ = useObservable(() => store$.user.name.get() || fallback); // Before
673
- const draft$ = useObservable(store$.user.name.peek() || fallback); // After
674
- draft$.set(event.target.value); // Unchanged
675
- ```
676
-
677
- A function initializer with a tracked `get()` creates a computed observable, and a computed replaces any written
678
- value on its next recomputation. The finding fires only when the owner also writes the observable; an initializer
679
- that is never written stays a legitimate derivation, and a `linked` or `synced` body already declares its own setter.
680
-
681
941
  ## Final check
682
942
 
683
943
  Before finishing: