legend-doctor 0.4.0 → 0.6.1

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