@kudzujs/core 0.8.61 → 0.9.0

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 (49) hide show
  1. package/MIGRATION_ROADMAP.md +37 -1
  2. package/PERFORMANCE.md +79 -1
  3. package/README.md +2 -2
  4. package/RELEASES.md +58 -0
  5. package/bin/kudzu.mjs +10 -1
  6. package/docs/next-architecture/0.9-baseline.md +1199 -0
  7. package/docs/next-architecture/0.9-benchmark-contracts.md +507 -0
  8. package/docs/next-architecture/0.9-component-property-contract.md +89 -0
  9. package/docs/next-architecture/0.9-compression-ledger.md +227 -0
  10. package/docs/next-architecture/0.9-final-proof-audit.md +176 -0
  11. package/docs/next-architecture/0.9-implementation-plan.md +1819 -0
  12. package/docs/next-architecture/0.9-resource-lifecycle.md +118 -0
  13. package/docs/next-architecture/0.9-semantic-compression.md +384 -0
  14. package/docs/next-architecture/README.md +16 -12
  15. package/docs/next-architecture/compiler-current-architecture.md +7 -7
  16. package/docs/next-architecture/large-application-ai-native-roadmap.md +6 -4
  17. package/docs/next-architecture/versioning.md +3 -2
  18. package/framework/README.md +3 -1
  19. package/framework/binding-runtime.js +4 -4
  20. package/framework/build.mjs +135 -30
  21. package/framework/compiler/ast-helpers.mjs +5 -0
  22. package/framework/compiler/browser-signal-passes.mjs +2 -7
  23. package/framework/compiler/collection-analysis.mjs +4 -0
  24. package/framework/compiler/descriptor-session.mjs +36 -12
  25. package/framework/compiler/effect-analysis.mjs +28 -8
  26. package/framework/compiler/effect-codegen.mjs +79 -36
  27. package/framework/compiler/effect-private-ref-pass.mjs +4 -8
  28. package/framework/compiler/handler-lowering.mjs +12 -7
  29. package/framework/compiler/ir/module-ir.mjs +26 -4
  30. package/framework/compiler/list-runtime-codegen.mjs +4 -2
  31. package/framework/compiler/optimize/command-specialization.mjs +4 -7
  32. package/framework/compiler/outside-click-pass.mjs +79 -0
  33. package/framework/compiler/react-migration-pass.mjs +27 -1
  34. package/framework/compiler/route-artifact-report.mjs +4 -3
  35. package/framework/compiler/route-build-record.mjs +12 -0
  36. package/framework/compiler/route-capability-planner.mjs +3 -3
  37. package/framework/compiler/route-ir.mjs +27 -11
  38. package/framework/compiler/runtime-codegen.mjs +2 -2
  39. package/framework/compiler/source-compiler.mjs +407 -74
  40. package/framework/core.d.ts +1 -0
  41. package/framework/core.mjs +18 -5
  42. package/framework/dependency-runtime.js +1 -1
  43. package/framework/effect-runtime.js +2 -2
  44. package/framework/list-runtime.js +67 -24
  45. package/framework/native-runtime.js +12 -9
  46. package/framework/runtime.js +1 -1
  47. package/framework/serialization.js +13 -6
  48. package/framework/shared-runtime.js +14 -12
  49. package/package.json +1 -1
@@ -0,0 +1,507 @@
1
+ # Kudzu 0.9 Cross-Framework Benchmark Contracts
2
+
3
+ ## Status
4
+
5
+ This document completes `0.9.0-01 / Session 01F`. It freezes comparison semantics before additional competitive timing is accepted.
6
+
7
+ ```text
8
+ Contract revision: 1
9
+ Production baseline: bada14585d112de8debf75a2bf914e9d5e0769ed
10
+ External commerce fixture: f2d5be1a516c539e30f7125f6870d42b1dd02ecd
11
+ Status: active contract; implementation gaps are explicit below
12
+ ```
13
+
14
+ A benchmark implementation may improve, but changing required content, behavior, accessibility, routes, or degradation expectations requires updating this contract before collecting replacement results.
15
+
16
+ ## Governing Rule
17
+
18
+ A timing or byte sample counts only after that variant passes the scenario's acceptance checks.
19
+
20
+ ```text
21
+ same content
22
+ + same data
23
+ + same routes
24
+ + same behavior
25
+ + same accessibility
26
+ + same hosting assumptions
27
+ + same browser conditions
28
+ = comparable sample
29
+ ```
30
+
31
+ A framework may use its idiomatic production configuration. It may not remove behavior, data, validation, accessibility, error handling, navigation steps, or resource cleanup to reduce cost.
32
+
33
+ ## Shared Environment Contract
34
+
35
+ | Field | Requirement |
36
+ |---|---|
37
+ | Source revision | Exact immutable Git commit per fixture and framework variant |
38
+ | Package versions | Exact lockfile resolution, not package ranges alone |
39
+ | Node/package manager | Exact versions recorded with raw results |
40
+ | Browser | Exact Chrome/Chromium version and launch flags |
41
+ | Hardware | CPU model, logical CPUs, memory, OS, and architecture |
42
+ | Server | Same local static-server implementation and headers per scenario |
43
+ | Compression | Raw, per-file gzip, and actual browser transfer where applicable |
44
+ | Cache | Explicit fresh-context, cold-cache, or in-session warm-cache state |
45
+ | Network | No throttle, Fast 4G, or Slow 4G profile recorded exactly |
46
+ | CPU | No throttle or exact CDP throttle rate |
47
+ | Viewport | Fixed per scenario; default commerce viewport is 1280 x 900 |
48
+ | Build cleanup | Exact output and framework-cache deletion rules |
49
+ | Sample order | Rotating or interleaved across variants |
50
+ | Warm-up | At least one discarded warm-up per target/size |
51
+ | Runs | At least seven; at least twenty-one when evidence overlaps or remains unstable |
52
+ | Failures | Recorded as failures; never dropped from the denominator silently |
53
+
54
+ ## Shared Success Rules
55
+
56
+ Every variant must pass before timing:
57
+
58
+ - production build exits successfully;
59
+ - expected route count or documented route set exists;
60
+ - direct entry returns complete expected content;
61
+ - browser reports no uncaught exception;
62
+ - required JavaScript and asset requests return expected statuses in the ordinary run;
63
+ - accessible names, roles, states, labels, errors, focus, and keyboard behavior pass;
64
+ - every required interaction changes the specified observable result;
65
+ - back/forward and native fallback behavior match the scenario contract;
66
+ - resource acquisition and cleanup balance where applicable;
67
+ - deterministic fixture data and expected values match.
68
+
69
+ ## Shared Measurement Contract
70
+
71
+ ### Artifacts
72
+
73
+ - complete deploy file count;
74
+ - emitted HTML page count;
75
+ - HTML raw and gzip bytes;
76
+ - CSS raw and gzip bytes;
77
+ - JavaScript raw and gzip bytes;
78
+ - other non-image artifact bytes;
79
+ - actual browser-fetched JavaScript by route;
80
+ - unique JavaScript transferred during the full session;
81
+ - output path manifest and deterministic digest where architecture permits;
82
+ - hydration/runtime bootstrap markers;
83
+ - static-route JavaScript count and bytes.
84
+
85
+ ### Browser
86
+
87
+ - content readiness from navigation start;
88
+ - action readiness proven by a successful action;
89
+ - event-to-next-paint latency;
90
+ - navigation content and action readiness;
91
+ - impatient interaction loss by delay after first paint;
92
+ - script parse/execute time;
93
+ - main-thread work where trace collection is available;
94
+ - heap after load, after journey, and after repeated navigation/disposal;
95
+ - browser exceptions and failed requests.
96
+
97
+ ### Build
98
+
99
+ - cold build raw samples and median;
100
+ - warm-cache build raw samples and median;
101
+ - incremental development build where supported;
102
+ - peak RSS;
103
+ - actual emitted route count;
104
+ - milliseconds per emitted route;
105
+ - output files and bytes;
106
+ - source-read, graph, compile, render, and emit phases where instrumentation exists.
107
+
108
+ ### Resilience
109
+
110
+ - JavaScript fully blocked;
111
+ - JavaScript responses delayed two seconds;
112
+ - one required JavaScript response returns 404;
113
+ - Slow 4G;
114
+ - 4x CPU throttle;
115
+ - navigation request failure where the application has enhanced navigation.
116
+
117
+ ## Statistical Contract
118
+
119
+ Deterministic bytes have no statistical tie. Fewer bytes wins.
120
+
121
+ Timing conclusions require:
122
+
123
+ - rotating or interleaved target order;
124
+ - raw samples published;
125
+ - median and range published;
126
+ - paired differences when targets are measured in paired rounds;
127
+ - at least seven samples;
128
+ - at least twenty-one samples when ranges overlap or the conclusion is unstable;
129
+ - no established median loss greater than the 5% materiality threshold for a claimed tie;
130
+ - an uncertainty method stated before final release claims.
131
+
132
+ No weighted aggregate may hide a primary-metric loss.
133
+
134
+ ## Comparator Set
135
+
136
+ | Class | Required framework |
137
+ |---|---|
138
+ | Primary migration baseline | React + Vite |
139
+ | Client framework | Vue |
140
+ | Compiler framework | Svelte |
141
+ | HTML-first/static framework | Astro |
142
+ | Production route framework | Capability-appropriate Next.js, React Router, TanStack, Nuxt, or SvelteKit variant |
143
+
144
+ Not every framework must appear in every scenario when the scenario is inapplicable, but React + Vite, Vue, Svelte, and Astro must each appear in at least one content or stateful matched scenario before `0.9.0`.
145
+
146
+ ## Contract C1: Content Application
147
+
148
+ ### Purpose
149
+
150
+ Prove complete HTML, static-route zero JavaScript, route-specific CSS/assets, metadata, native links, one small enhancement, and failure resilience without using a state-heavy benchmark.
151
+
152
+ ### Status
153
+
154
+ ```text
155
+ Contract: frozen
156
+ Local multi-framework acceptance: passes for Kudzu, React, Vue, Svelte, and Astro
157
+ Release use: native disclosure reaches the zero-byte JavaScript floor; scale/timing evidence remains incomplete
158
+ ```
159
+
160
+ ### Required Variants
161
+
162
+ ```text
163
+ Kudzu
164
+ React + Vite with matched static/SSR delivery
165
+ Vue
166
+ Svelte
167
+ Astro
168
+ ```
169
+
170
+ ### Required Route Set
171
+
172
+ ```text
173
+ /
174
+ /article/example
175
+ /category/example
176
+ /about
177
+ /static
178
+ ```
179
+
180
+ Equivalent paths may be used only if every variant uses the same paths.
181
+
182
+ ### Required Content
183
+
184
+ - site header and native navigation;
185
+ - metadata title and description;
186
+ - route-owned stylesheet plus shared global stylesheet;
187
+ - local image/font assets;
188
+ - article headings, paragraphs, code, links, and one accessible SVG;
189
+ - one locale or route parameter known at build time;
190
+ - one clipboard, tab, disclosure, or similarly small enhancement;
191
+ - one completely static sibling route.
192
+
193
+ ### Acceptance
194
+
195
+ - every route has complete meaningful HTML before JavaScript;
196
+ - heading hierarchy and landmarks match;
197
+ - native links work with JavaScript blocked;
198
+ - article and static sibling remain readable with missing JavaScript;
199
+ - enhancement has an accessible label and status result;
200
+ - route-specific CSS does not leak into unrelated routes;
201
+ - static sibling fetches zero JavaScript in Kudzu;
202
+ - metadata and canonical route content match.
203
+
204
+ ### Measurements
205
+
206
+ - route HTML/CSS/JS and session JavaScript;
207
+ - content readiness;
208
+ - enhancement action readiness and latency;
209
+ - native navigation under ordinary/blocked/delayed JavaScript;
210
+ - cold/warm build for 100, 1,000, and 10,000 generated articles where practical;
211
+ - peak RSS and output bytes.
212
+
213
+ ## Contract C2: Stateful Runtime Matrix
214
+
215
+ ### Purpose
216
+
217
+ Compare direct state, derived values, keyed ownership, effects, component boundaries, forms, and cleanup without the scale noise of a full catalog.
218
+
219
+ ### Status
220
+
221
+ ```text
222
+ Contract: frozen
223
+ Historical runtime matrix evidence: documented
224
+ Maintained tracked harness in this checkout: missing
225
+ Vue/Svelte/Astro current variants: missing
226
+ Release use: blocked until restored
227
+ ```
228
+
229
+ ### Required Variants
230
+
231
+ ```text
232
+ Kudzu
233
+ React + Vite
234
+ Vue + Vite
235
+ Svelte + Vite
236
+ Astro with the minimum framework integration required for matched behavior
237
+ ```
238
+
239
+ ### Required UI
240
+
241
+ - two primitive state controls;
242
+ - one immutable object state value;
243
+ - one multi-state derived display;
244
+ - one keyed 1,000-row collection with local row state;
245
+ - filter, append, reverse, remove, and restore actions;
246
+ - one controlled form property;
247
+ - one conditional child with mount effect and cleanup;
248
+ - one accessible SVG conditional or keyed row;
249
+ - one static sibling route.
250
+
251
+ ### Acceptance
252
+
253
+ - state setters/actions preserve each framework's documented semantics while observable results match;
254
+ - retained keyed rows preserve DOM identity;
255
+ - removed rows release local state/effects/refs;
256
+ - restored rows initialize fresh state;
257
+ - derived output matches after every operation;
258
+ - effect cleanup precedes replacement setup;
259
+ - conditional removal cleans up once and remount initializes fresh ownership;
260
+ - keyboard and accessible-state behavior match;
261
+ - static sibling content and zero-JavaScript Kudzu result pass;
262
+ - no uncaught errors.
263
+
264
+ ### Measurements
265
+
266
+ - initial and session JavaScript;
267
+ - content/action readiness;
268
+ - append/filter/restore/reverse event-to-next-paint;
269
+ - CPU trace and heap before/after repeated operations;
270
+ - build time and output bytes;
271
+ - blocked/delayed/missing-JavaScript behavior.
272
+
273
+ ## Contract C3: Stateful Commerce Journey
274
+
275
+ ### Purpose
276
+
277
+ Measure realistic content, navigation, filtering, sorting, multi-state variant selection, shared cart behavior, and checkout under one deterministic storefront.
278
+
279
+ ### Pinned Fixture
280
+
281
+ ```text
282
+ Repository: SimYunSup/kudzu-based-bench
283
+ Revision: f2d5be1a516c539e30f7125f6870d42b1dd02ecd
284
+ Current status: reproducible baseline; protocol updates require a new pinned revision
285
+ ```
286
+
287
+ ### Current Variants
288
+
289
+ ```text
290
+ shop-kudzu
291
+ shop-astro
292
+ shop-react-router
293
+ shop-tanstack
294
+ shop-next-app
295
+ ```
296
+
297
+ ### Required Routes
298
+
299
+ ```text
300
+ /
301
+ /search/
302
+ /search/outerwear/
303
+ /product/p-00000/
304
+ /product/p-00002/
305
+ /shipping/
306
+ /checkout/
307
+ ```
308
+
309
+ ### Required Data
310
+
311
+ - deterministic product IDs and handles;
312
+ - deterministic title, price, collection, variant, availability, image, tag, and update data;
313
+ - identical catalog size per run;
314
+ - same listing limit and displayed products;
315
+ - same base path and local assets.
316
+
317
+ ### Required Session
318
+
319
+ 1. Direct product entry with an empty browser cache.
320
+ 2. Navigate to listing.
321
+ 3. Sort by price and verify ascending semantic result.
322
+ 4. Filter by the fixed Korean query and verify every retained title.
323
+ 5. Navigate to a second product.
324
+ 6. Select an available variant and verify price/selected state.
325
+ 7. Add to cart and verify visible confirmation/shared state.
326
+ 8. Navigate to checkout and verify content.
327
+
328
+ ### Accessibility Acceptance
329
+
330
+ - one visible `h1` per route;
331
+ - product options grouped and named;
332
+ - selected option exposes a semantic selected/pressed state;
333
+ - unavailable options are disabled;
334
+ - filter and sort controls have labels;
335
+ - add-to-cart control has an accessible name;
336
+ - confirmation is available to assistive technology;
337
+ - focus remains usable after interaction and navigation;
338
+ - native links remain traversable under blocked JavaScript.
339
+
340
+ ### Progressive Enhancement Acceptance
341
+
342
+ | Condition | Required minimum |
343
+ |---|---|
344
+ | JavaScript blocked | Product content, category navigation, product detail entry, policy, and checkout content remain available |
345
+ | JavaScript delayed two seconds | Complete content and native navigation remain available; interactions eventually activate without lost state corruption |
346
+ | One JavaScript response missing | Content and unrelated native navigation remain available; failed enhancement is observable and does not corrupt later pages |
347
+
348
+ The final comparison reports each capability separately rather than converting resilience into one opaque score.
349
+
350
+ ### Measurements
351
+
352
+ - browser-fetched JS on home, search, collection, product, policy, and checkout;
353
+ - unique session JS;
354
+ - content readiness at entry/list/detail/checkout;
355
+ - action readiness and latency for sort/filter/variant/cart;
356
+ - impatient-click loss from first paint plus 0–5,000 ms;
357
+ - CPU/heap across the full session;
358
+ - navigation timing;
359
+ - degradation capability matrix;
360
+ - output files/bytes and build scaling.
361
+
362
+ ## Contract C4: Catalog Build Scaling
363
+
364
+ ### Purpose
365
+
366
+ Prove that static specialization scales without transferring route work to the browser.
367
+
368
+ ### Sizes
369
+
370
+ ```text
371
+ 100 products
372
+ 1,000 products
373
+ 10,000 products
374
+ ```
375
+
376
+ ### Required Variants
377
+
378
+ ```text
379
+ Kudzu
380
+ Astro
381
+ best applicable production static exporter from the commerce matrix
382
+ ```
383
+
384
+ All five commerce variants should run when the host and build architecture support the size. Unsupported size/variant pairs remain explicit failures or inapplicable results.
385
+
386
+ ### Required Protocol Upgrade
387
+
388
+ The current external `shop:scale` script must be updated in a new pinned revision to provide:
389
+
390
+ - actual emitted route count;
391
+ - one warm-up per target and size;
392
+ - at least seven rotating samples;
393
+ - cold and warm-cache builds;
394
+ - peak RSS;
395
+ - files, pages, and artifact-class bytes;
396
+ - deterministic manifest/digest where possible;
397
+ - correctness acceptance before timing;
398
+ - milliseconds per emitted route rather than requested product count;
399
+ - raw samples and failures.
400
+
401
+ ### Acceptance
402
+
403
+ - every expected product route exists;
404
+ - representative first/middle/last product content matches input data;
405
+ - listing and policy routes exist;
406
+ - JavaScript bytes do not scale with static product count except where route-specific files are independently requested;
407
+ - complete HTML remains emitted;
408
+ - no client fetch replaces build-known catalog generation.
409
+
410
+ ## Contract C5: Resource Ownership
411
+
412
+ ### Purpose
413
+
414
+ Compare imperative resource behavior and cleanup without creating a generic resource runtime.
415
+
416
+ ### Status
417
+
418
+ ```text
419
+ Contract: frozen
420
+ Kudzu Worker/effect fixture: available
421
+ Matched React/Vue/Svelte/Astro resource variants: missing
422
+ Release use: blocked until fixture family exists
423
+ ```
424
+
425
+ ### Required Resource Scenario
426
+
427
+ - one Worker or WebSocket-like transport;
428
+ - one route or conditional owner;
429
+ - one dependency replacement or reconnect;
430
+ - one listener/subscription;
431
+ - one bounded result collection or canvas update;
432
+ - one exact cleanup path;
433
+ - one late callback after owner release;
434
+ - one static sibling.
435
+
436
+ ### Acceptance
437
+
438
+ - resource starts only after its owner mounts;
439
+ - replacement invalidates the prior owner before cleanup;
440
+ - listener removal and terminate/close/disconnect happen exactly once;
441
+ - late callback cannot mutate replacement ownership;
442
+ - repeated navigation/mount cycles do not increase active handles/listeners;
443
+ - static sibling requests no resource code;
444
+ - application output and accessibility remain usable.
445
+
446
+ ### Measurements
447
+
448
+ - initial and route-specific JavaScript;
449
+ - Worker/resource graph bytes;
450
+ - action/content readiness;
451
+ - message-to-paint latency;
452
+ - CPU and heap over at least 30 mount/dispose cycles;
453
+ - active listener/handle balance;
454
+ - build and output cost.
455
+
456
+ ## Current Contract Implementation Matrix
457
+
458
+ | Contract | Kudzu | React | Vue | Svelte | Astro | Production router set |
459
+ |---|---|---|---|---|---|---|
460
+ | C1 Content | Application candidates exist; matched harness missing | Missing current matched variant | Missing | Missing | Candidate exists | Optional |
461
+ | C2 Stateful runtime | Historical/current fixtures exist; tracked matrix missing | Historical evidence | Historical evidence | Historical evidence | Missing | Not required |
462
+ | C3 Commerce | Reproduced | Through React Router/Next/TanStack | Not required in this contract | Not required in this contract | Reproduced | Reproduced |
463
+ | C4 Scale | 100/1,000 baseline paths available | Production variants available | Not required | Not required | Available | Available |
464
+ | C5 Resource | Worker/effect fixture available | Missing matched variant | Missing | Missing | Missing | Optional |
465
+
466
+ This matrix prevents the 100-product commerce asset result from being presented as the complete 0.9 cross-framework proof.
467
+
468
+ ## Raw Result Publication Contract
469
+
470
+ Final result storage must include:
471
+
472
+ ```text
473
+ scenario contract revision
474
+ fixture repository and commit
475
+ framework lockfile
476
+ environment JSON
477
+ acceptance result per variant
478
+ raw timing samples
479
+ failed attempts
480
+ artifact manifest
481
+ browser request log or summarized raw response data
482
+ CPU/heap trace references
483
+ resilience result per capability
484
+ known limitations
485
+ ```
486
+
487
+ Summary tables may be generated from raw data. Raw failures and primary metrics cannot be deleted because they make a summary unfavorable.
488
+
489
+ ## 01F Completion Record
490
+
491
+ | Deliverable | Result |
492
+ |---|---|
493
+ | Shared environment contract | Frozen |
494
+ | Shared acceptance contract | Frozen |
495
+ | Artifact/browser/build/resilience metrics | Frozen |
496
+ | Statistical rules | Frozen |
497
+ | Content contract | Frozen; implementation gap explicit |
498
+ | Stateful runtime contract | Frozen; tracked harness gap explicit |
499
+ | Commerce contract | Frozen against pinned external fixture |
500
+ | Scale contract | Frozen; protocol upgrade required |
501
+ | Resource contract | Frozen; comparator fixture gap explicit |
502
+ | Anti-gaming rules | Frozen |
503
+ | Raw result contract | Frozen |
504
+
505
+ ## Next Step
506
+
507
+ `0.9.0-01` remains the signed baseline and every explicit harness gap carries forward. `0.9.0-02` closed the Derived slice with pinned Medusa Product Actions and Mercury Profit Sharing reductions; `0.9.0-03` unified reduced Context and Zustand action semantics without changing deploy bytes. Session 04A is next. Final cross-framework use of these contracts remains blocked on the tracked harness gaps above.
@@ -0,0 +1,89 @@
1
+ # Kudzu 0.9 Component Property Contract
2
+
3
+ ## Status
4
+
5
+ This contract completes `0.9.0-05 / Session 05B` for the pinned WorkLedger
6
+ conversation fixture. It defines analysis authority before producer or consumer
7
+ changes.
8
+
9
+ ## Authorizing Edge
10
+
11
+ ```text
12
+ parent Conversation SignalIR
13
+ -> direct conversation prop
14
+ -> static label binding
15
+ -> static messages effect dependency
16
+ -> static messages keyed collection
17
+ ```
18
+
19
+ The parent object remains one logical state value. A property link is analysis
20
+ metadata, not a mutable field signal.
21
+
22
+ ## ComponentAnalysis Record
23
+
24
+ Each directly supplied state prop may record property links inside its existing
25
+ specialization prop entry:
26
+
27
+ ```json
28
+ {
29
+ "name": "conversation",
30
+ "local": "conversation",
31
+ "signals": [0],
32
+ "properties": [
33
+ {
34
+ "signal": 0,
35
+ "path": ["label"],
36
+ "consumers": ["binding"],
37
+ "equality": "object-is"
38
+ },
39
+ {
40
+ "signal": 0,
41
+ "path": ["messages"],
42
+ "consumers": ["effect", "list"],
43
+ "equality": "object-is"
44
+ }
45
+ ]
46
+ }
47
+ ```
48
+
49
+ The containing specialization is the owner. `signal` must reference the same
50
+ parent `SignalIR` already recorded in `signals`. `path` contains exactly one
51
+ static segment and excludes `__proto__`, `prototype`, and `constructor`. Consumers are limited
52
+ to `binding`, `effect`, and `list`.
53
+
54
+ ## Consumer Contract
55
+
56
+ - Binding: reuse `BindingIR` and its source-signal evaluator. No component
57
+ rerender or field state is created.
58
+ - Effect: encode the selected path as existing expression `DerivedIR`, subscribe
59
+ to the parent signal, and compare the selected value with `Object.is`.
60
+ - List: reuse a binding-backed `KeyedBlockIR` collection and its existing
61
+ compiler-owned array anchor. Skip reconciliation when the selected array is
62
+ `Object.is`-equal to the previous value.
63
+ - Ownership: repeated and conditional calls retain their existing
64
+ specialization, conditional, effect, and keyed owners. Property links do not
65
+ own browser lifetime.
66
+
67
+ Array-valued selected dependencies are allowed for this immutable collection
68
+ case. Calculation-result dependencies remain primitive-only. A selected list
69
+ value must remain an array on every update.
70
+
71
+ ## Rejected Boundary
72
+
73
+ - computed or dynamic property names;
74
+ - unsafe property names;
75
+ - property aliases used as collection or dependency roots;
76
+ - whole-object effect dependencies mixed with selected properties;
77
+ - object or array mutation;
78
+ - object expressions or opaque spreads at the component call site;
79
+ - property links from a prop that is not one direct parent state identifier;
80
+ - arbitrary callbacks or a browser component runtime.
81
+
82
+ ## Cost
83
+
84
+ ```text
85
+ Semantic primitives added: 0
86
+ ModuleIR record kinds added: 0
87
+ Runtime concepts added: 0
88
+ Authored field states added: 0
89
+ ```