@kudzujs/core 0.16.24 → 0.16.26
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.
- package/README.md +47 -5
- package/framework/compiler/effect-private-ref-pass.mjs +2 -0
- package/framework/compiler/source-compiler.mjs +6 -1
- package/package.json +2 -7
- package/GOAL_A.md +0 -116
- package/GOAL_B.md +0 -121
- package/MIGRATION_ROADMAP.md +0 -457
- package/PERFORMANCE.md +0 -2200
- package/RELEASES.md +0 -4653
- package/docs/next-architecture/0.9-baseline.md +0 -1199
- package/docs/next-architecture/0.9-benchmark-contracts.md +0 -507
- package/docs/next-architecture/0.9-component-property-contract.md +0 -89
- package/docs/next-architecture/0.9-compression-ledger.md +0 -227
- package/docs/next-architecture/0.9-final-proof-audit.md +0 -176
- package/docs/next-architecture/0.9-implementation-plan.md +0 -1819
- package/docs/next-architecture/0.9-resource-lifecycle.md +0 -118
- package/docs/next-architecture/0.9-semantic-compression.md +0 -384
- package/docs/next-architecture/1.0-large-application-compatibility-audit.md +0 -372
- package/docs/next-architecture/README.md +0 -56
- package/docs/next-architecture/application-capability-release-plan.md +0 -2358
- package/docs/next-architecture/compiler-current-architecture.md +0 -95
- package/docs/next-architecture/goal-a-compiler-foundation.md +0 -151
- package/docs/next-architecture/goal-b-optimization-benchmarks.md +0 -86
- package/docs/next-architecture/goal-c-state-resource-research.md +0 -88
- package/docs/next-architecture/goal-d-routing-compatibility-decisions.md +0 -52
- package/docs/next-architecture/large-application-ai-native-roadmap.md +0 -486
- package/docs/next-architecture/performance-gates.md +0 -50
- package/docs/next-architecture/versioning.md +0 -91
- package/framework/README.md +0 -105
package/RELEASES.md
DELETED
|
@@ -1,4653 +0,0 @@
|
|
|
1
|
-
# Kudzu Releases
|
|
2
|
-
|
|
3
|
-
## 0.16.24 - Imported Article Search And Benchmark Integrity
|
|
4
|
-
|
|
5
|
-
Kudzu 0.16.24 compiles the original authored imported-article search shape
|
|
6
|
-
without an inlined workaround and hardens evidence lifecycle integrity for
|
|
7
|
-
future AI delivery runs. This is source replay evidence, not a new AI score.
|
|
8
|
-
|
|
9
|
-
### Changed in 0.16.24
|
|
10
|
-
|
|
11
|
-
- Follows imported collection selector aliases, normalizes proven pure query
|
|
12
|
-
locals, and evaluates count dependencies from signal build values.
|
|
13
|
-
- Adds 39 net core semantic lines across two existing compiler files, with no
|
|
14
|
-
new semantic primitive, pass, IR kind, runtime concept, API, or dependency.
|
|
15
|
-
- Covers three byte-identical search variants, six rejected unsafe forms,
|
|
16
|
-
retained keyed identity, fresh remounts, and a zero-JavaScript static sibling.
|
|
17
|
-
- Replays the original authored application search successfully through the
|
|
18
|
-
unchanged content acceptance: 13 JavaScript files, 55,447 raw / 20,976 gzip
|
|
19
|
-
bytes, identical to the retained inlined application's JavaScript.
|
|
20
|
-
- Checkpoints adapter usage atomically, streams bounded output evidence, shares
|
|
21
|
-
the deadline with setup, kills owned process trees on timeout, and prevents
|
|
22
|
-
incomplete or timed-out attempts from becoming successful attribution.
|
|
23
|
-
- Freezes r4 protocols with published 0.16.23 starters for future runs only.
|
|
24
|
-
Historical raw evidence is unchanged. Linux lifecycle regressions cover the
|
|
25
|
-
termination paths; the Windows `taskkill` path remains untested.
|
|
26
|
-
- Makes no fresh timing, cost, or AI performance claim. The published 11/25
|
|
27
|
-
versus 24/25 comparison and the `1.0.0` block remain unchanged.
|
|
28
|
-
- Updates `create-kudzu@0.1.149` to generate `@kudzujs/core@^0.16.24` projects.
|
|
29
|
-
|
|
30
|
-
### Upgrade
|
|
31
|
-
|
|
32
|
-
```sh
|
|
33
|
-
npm install @kudzujs/core@^0.16.24
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## 0.16.23 - Reactive Conditional Branch Text
|
|
37
|
-
|
|
38
|
-
Kudzu 0.16.23 removes the second commerce compiler blocker selected by the
|
|
39
|
-
corrected `0.21.4` AI delivery evidence: scalar text inside a selected
|
|
40
|
-
conditional branch remains reactive without restructuring ordinary TSX.
|
|
41
|
-
|
|
42
|
-
### Changed in 0.16.23
|
|
43
|
-
|
|
44
|
-
- Lowers reactive scalar conditional branches through the existing text-binding
|
|
45
|
-
compiler path while preserving conditional ownership and static HTML.
|
|
46
|
-
- Verifies updates that remain in one branch and later replace that branch in
|
|
47
|
-
required Chrome.
|
|
48
|
-
- Passes all five retained commerce sources with `empty`, `below`, and `reached`
|
|
49
|
-
true while preserving their zero-JavaScript static siblings.
|
|
50
|
-
- Adds no semantic primitive, compiler pass, runtime concept, public API,
|
|
51
|
-
dependency, or shared-runtime source byte; `1.0.0` remains unauthorized pending
|
|
52
|
-
a complete equal-condition rerun.
|
|
53
|
-
- Updates `create-kudzu@0.1.148` to generate projects on
|
|
54
|
-
`@kudzujs/core@^0.16.23`.
|
|
55
|
-
|
|
56
|
-
### Upgrade
|
|
57
|
-
|
|
58
|
-
```sh
|
|
59
|
-
npm install @kudzujs/core@^0.16.23
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## 0.16.22 - Reactive Collection Count Reuse
|
|
63
|
-
|
|
64
|
-
Kudzu 0.16.22 removes the first compiler blocker selected by the corrected
|
|
65
|
-
`0.21.4` AI delivery evidence: an ordinary filtered collection alias can now
|
|
66
|
-
feed keyed rendering, a top-level count, reactive text, and a count-selected
|
|
67
|
-
conditional branch without duplicating state or restructuring the component.
|
|
68
|
-
|
|
69
|
-
### Changed in 0.16.22
|
|
70
|
-
|
|
71
|
-
- Normalizes supported collection alias `.length` reads through existing
|
|
72
|
-
collection analysis and reactive binding compilation.
|
|
73
|
-
- Expands count aliases before conditional compilation while preserving initial
|
|
74
|
-
server-rendered values and keyed DOM ownership across filter changes.
|
|
75
|
-
- Verifies reactive count updates, empty-branch unmount, keyed remount, and the
|
|
76
|
-
retained diagnostic for unsupported collection alias consumers in Chrome.
|
|
77
|
-
- Adds no semantic primitive, compiler pass, runtime concept, public API,
|
|
78
|
-
dependency, or shared-runtime byte; `1.0.0` remains unauthorized.
|
|
79
|
-
- Updates `create-kudzu@0.1.147` to generate projects on
|
|
80
|
-
`@kudzujs/core@^0.16.22`.
|
|
81
|
-
|
|
82
|
-
### Upgrade
|
|
83
|
-
|
|
84
|
-
```sh
|
|
85
|
-
npm install @kudzujs/core@^0.16.22
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## 0.16.21 - AI Evidence npm Recovery
|
|
89
|
-
|
|
90
|
-
Kudzu 0.16.21 retries npm publication of the unchanged corrected `0.21.4` AI
|
|
91
|
-
delivery evidence after npm rejected the `0.16.20` trusted-publishing signing
|
|
92
|
-
certificate with HTTP 403.
|
|
93
|
-
|
|
94
|
-
### Changed in 0.16.21
|
|
95
|
-
|
|
96
|
-
- Preserves the corrected protocols, 11/25 Kudzu versus 24/25 React + Vite
|
|
97
|
-
result, failed `1.0.0` gate, and `v0.16.19` raw evidence archive unchanged.
|
|
98
|
-
- Preserves the public `v0.16.20` tag and records its failed npm transaction
|
|
99
|
-
rather than moving or reusing it.
|
|
100
|
-
- Adds no compiler, runtime, public API, dependency, generated behavior, or
|
|
101
|
-
browser byte.
|
|
102
|
-
- Updates `create-kudzu@0.1.146` to generate projects on
|
|
103
|
-
`@kudzujs/core@^0.16.21`.
|
|
104
|
-
|
|
105
|
-
### Upgrade
|
|
106
|
-
|
|
107
|
-
```sh
|
|
108
|
-
npm install @kudzujs/core@^0.16.21
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
## 0.16.20 - AI Evidence Forward Release
|
|
112
|
-
|
|
113
|
-
Kudzu 0.16.20 forward-publishes the unchanged `0.16.19` AI delivery evidence
|
|
114
|
-
packet after that GitHub release's npm workflow stopped on an unrelated flaky
|
|
115
|
-
project browser journey before either package was published.
|
|
116
|
-
|
|
117
|
-
### Changed in 0.16.20
|
|
118
|
-
|
|
119
|
-
- Preserves the corrected `0.21.4` protocols, 11/25 Kudzu versus 24/25 React +
|
|
120
|
-
Vite result, failed `1.0.0` gate, and raw evidence archive byte-for-byte.
|
|
121
|
-
- Moves no tag and republishes no npm version; `0.16.19` remains the immutable
|
|
122
|
-
GitHub evidence release.
|
|
123
|
-
- Adds no compiler, runtime, public API, dependency, generated behavior, or
|
|
124
|
-
browser byte.
|
|
125
|
-
- Updates `create-kudzu@0.1.145` to generate projects on
|
|
126
|
-
`@kudzujs/core@^0.16.20`.
|
|
127
|
-
- Its npm workflow passed every repository gate, then npm rejected the core
|
|
128
|
-
trusted-publishing signing certificate with HTTP 403 before either package
|
|
129
|
-
was published. The immutable recovery release is `0.16.21` with generator
|
|
130
|
-
`0.1.146`.
|
|
131
|
-
|
|
132
|
-
### Upgrade
|
|
133
|
-
|
|
134
|
-
```sh
|
|
135
|
-
npm install @kudzujs/core@^0.16.20
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
## 0.16.19 - Corrected AI Delivery Evidence
|
|
139
|
-
|
|
140
|
-
Kudzu 0.16.19 publishes the corrected five-task `0.21.4` AI delivery proof and
|
|
141
|
-
records that the `1.0.0` gate did not pass.
|
|
142
|
-
|
|
143
|
-
### Changed in 0.16.19
|
|
144
|
-
|
|
145
|
-
- Adds five paired production-shaped Kudzu and React + Vite starters, frozen
|
|
146
|
-
prompts, independently hashed acceptance contracts, an OpenCode adapter, and
|
|
147
|
-
browser acceptance for content, forms, CRUD/shared state, commerce-derived
|
|
148
|
-
state, and realtime resource ownership.
|
|
149
|
-
- Excludes the first diagnostic batch after finding hidden content/form selector
|
|
150
|
-
assumptions and inconsistent React versions; retains that batch in the raw
|
|
151
|
-
archive instead of presenting it as framework evidence.
|
|
152
|
-
- Records the corrected result: Kudzu 11/25 attributable successes (44%) and
|
|
153
|
-
React + Vite 24/25 (96%), with one React realtime adapter timeout correctly
|
|
154
|
-
retained as incomplete.
|
|
155
|
-
- Records that Kudzu has no successful task-level result for content or commerce,
|
|
156
|
-
so its aggregate median token cost per successful task is unavailable and the
|
|
157
|
-
`1.0.0` success-and-cost gate is not authorized.
|
|
158
|
-
- Keeps React's aggregate failure-inclusive cost unavailable because its timed-out
|
|
159
|
-
realtime attempt has no attribution trace.
|
|
160
|
-
- Names the measured blockers: excessive correction cost for ordinary reactive
|
|
161
|
-
content search, filtered-collection count reuse in CRUD, and reactive text
|
|
162
|
-
frozen inside the selected commerce conditional branch.
|
|
163
|
-
- Publishes both batches as the release asset
|
|
164
|
-
`kudzu-ai-delivery-0.21.4-gpt-5.6-sol.tar.gz` with SHA-256
|
|
165
|
-
`4e37d15b4c4b0cf88720a3a7743996794b2e0172dbc43d40514f944fb01bd0f8`.
|
|
166
|
-
- Adds no semantic primitive, compiler pass, runtime concept, public API,
|
|
167
|
-
dependency, generated application behavior, or browser byte.
|
|
168
|
-
- Updates `create-kudzu@0.1.144` to generate projects on
|
|
169
|
-
`@kudzujs/core@^0.16.19`.
|
|
170
|
-
- The GitHub release and raw asset were published, but its npm workflow stopped
|
|
171
|
-
before publication on an unrelated project browser-test failure. The immutable
|
|
172
|
-
forward chain starts at `0.16.20` with generator `0.1.145`; npm recovery is
|
|
173
|
-
`0.16.21` with generator `0.1.146`.
|
|
174
|
-
|
|
175
|
-
### Upgrade
|
|
176
|
-
|
|
177
|
-
```sh
|
|
178
|
-
npm install @kudzujs/core@^0.16.19
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
## 0.16.18 - AI Attribution Integrity
|
|
182
|
-
|
|
183
|
-
Kudzu 0.16.18 makes the AI delivery evidence boundary fail closed before the
|
|
184
|
-
production-shaped `0.21.4` comparison.
|
|
185
|
-
|
|
186
|
-
### Changed in 0.16.18
|
|
187
|
-
|
|
188
|
-
- Requires a recorded raw attribution trace before an AI delivery attempt can
|
|
189
|
-
count as a success, even when its adapter, build, and acceptance all pass.
|
|
190
|
-
- Retains missing-trace attempts as incomplete failures and reports zero
|
|
191
|
-
successes instead of synthetic zero-token, zero-cost successes.
|
|
192
|
-
- Keeps per-success token and monetary claims unavailable when no attributable
|
|
193
|
-
success exists.
|
|
194
|
-
- Adds a focused exit-zero/no-trace regression while preserving the existing
|
|
195
|
-
paired success/failure and tooling-comparison checks.
|
|
196
|
-
- Records the production corpus boundary: existing complete applications cover
|
|
197
|
-
content, forms, CRUD/shared state, and resource ownership, while the pinned
|
|
198
|
-
public commerce comparator remains the smallest complete paired source.
|
|
199
|
-
- Claims no framework ranking and leaves `0.21.4` active until five attempts per
|
|
200
|
-
framework and task pass the complete behavior, accessibility, build, browser,
|
|
201
|
-
output, maintainability, and retained-performance contract.
|
|
202
|
-
- Adds one harness condition and no semantic primitive, compiler pass, runtime
|
|
203
|
-
concept, application API, dependency, or application browser byte.
|
|
204
|
-
- Updates `create-kudzu@0.1.143` to generate projects on
|
|
205
|
-
`@kudzujs/core@^0.16.18`.
|
|
206
|
-
|
|
207
|
-
### Upgrade
|
|
208
|
-
|
|
209
|
-
```sh
|
|
210
|
-
npm install @kudzujs/core@^0.16.18
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
## 0.16.17 - Browser Performance Gates
|
|
214
|
-
|
|
215
|
-
Kudzu 0.16.17 turns existing browser performance and memory evidence into
|
|
216
|
-
maintained release alarms without changing production compiler or runtime code.
|
|
217
|
-
|
|
218
|
-
### Changed in 0.16.17
|
|
219
|
-
|
|
220
|
-
- Enforces 100 ms median budgets for 2,000-row append, filter, restore, and
|
|
221
|
-
reverse operations and project table-save and enhanced-navigation actions.
|
|
222
|
-
- Enforces 1,000 ms bounded-list and 2,000 ms complete static 10,000-row load
|
|
223
|
-
budgets while preserving retained identity and fresh off-range state.
|
|
224
|
-
- Records exact initial, session, and lazy JavaScript ownership, including one
|
|
225
|
-
shared deferred CodeMirror chunk and zero JavaScript on static siblings.
|
|
226
|
-
- Revalidates 30 ownership cycles and 101 navigations with balanced editor
|
|
227
|
-
handles, stable document/listener/cache counts, and 79,988 B forced-GC heap
|
|
228
|
-
growth under the existing alarm.
|
|
229
|
-
- Keeps single-run diagnostic acceptance outside statistical median enforcement.
|
|
230
|
-
- Adds no semantic primitive, compiler pass, production source, runtime concept,
|
|
231
|
-
public API, deploy artifact, or browser byte.
|
|
232
|
-
- Updates `create-kudzu@0.1.142` to generate projects on
|
|
233
|
-
`@kudzujs/core@^0.16.17`.
|
|
234
|
-
|
|
235
|
-
### Upgrade
|
|
236
|
-
|
|
237
|
-
```sh
|
|
238
|
-
npm install @kudzujs/core@^0.16.17
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
## 0.16.16 - Bounded Compiler Module Cache
|
|
242
|
-
|
|
243
|
-
Kudzu 0.16.16 bounds canonical TypeScript AST retention so the complete
|
|
244
|
-
10,000-route production-scale contract runs under a 10 GiB V8 heap.
|
|
245
|
-
|
|
246
|
-
### Changed in 0.16.16
|
|
247
|
-
|
|
248
|
-
- Bounds complete canonical module records to a 1,024-entry LRU while preserving
|
|
249
|
-
stable position-based module symbols and reparsing evicted source on demand.
|
|
250
|
-
- Fixes the measured 10,000-route failure where roughly 90,000 retained
|
|
251
|
-
parent-linked TypeScript ASTs exhausted a 10,240 MiB heap.
|
|
252
|
-
- Completes the identical 100,000-module / 10,110,000-line topology with 5,461.0
|
|
253
|
-
MiB clean-build RSS and 8,266.9 MiB retained-session peak RSS.
|
|
254
|
-
- Verifies 10-module / one-page incremental scope, byte-identical changed-clean
|
|
255
|
-
output, deterministic digests, and clean and retained-session recovery.
|
|
256
|
-
- Adds scale-aware recovery timeout, diagnostic stage progress, and bounded
|
|
257
|
-
temporary-fixture cleanup retries to the maintained benchmark harness.
|
|
258
|
-
- Adds eight net production compiler lines, no semantic primitive, compiler
|
|
259
|
-
pass, runtime concept, application API, dependency, deploy artifact, or
|
|
260
|
-
browser byte.
|
|
261
|
-
- Updates `create-kudzu@0.1.141` to generate projects on
|
|
262
|
-
`@kudzujs/core@^0.16.16`.
|
|
263
|
-
|
|
264
|
-
### Upgrade
|
|
265
|
-
|
|
266
|
-
```sh
|
|
267
|
-
npm install @kudzujs/core@^0.16.16
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
## 0.16.15 - Production Evidence Gates
|
|
271
|
-
|
|
272
|
-
Kudzu 0.16.15 turns compiler scale, large-list parity, and AI attribution gaps
|
|
273
|
-
into maintained executable evidence instead of release-time assumptions.
|
|
274
|
-
|
|
275
|
-
### Changed in 0.16.15
|
|
276
|
-
|
|
277
|
-
- Adds opt-in internal source-read, graph, TypeScript parse, normalization,
|
|
278
|
-
compile/transform, render, and write timing to the existing project session.
|
|
279
|
-
- Extends `npm run benchmark:source-scale` with retained-session incremental
|
|
280
|
-
timing and RSS, clean changed-source equivalence, output digests, and clean
|
|
281
|
-
and retained-session failure recovery.
|
|
282
|
-
- Records repeated 100-route / 1,000-module and 1,000-route / 10,000-module
|
|
283
|
-
measurements. Every incremental sample recompiles 10 modules and renders one
|
|
284
|
-
page while matching a clean changed-source build byte-for-byte.
|
|
285
|
-
- Keeps the full 10,000-route / 100,000-module run explicitly pending a
|
|
286
|
-
separately provisioned host; no projection or reduced fixture is called a
|
|
287
|
-
pass.
|
|
288
|
-
- Promotes the 10,000-item pagination decision to ordinary Chrome acceptance,
|
|
289
|
-
including Enter navigation, focus retention, bounded 100-row DOM, state
|
|
290
|
-
release, and a zero-JavaScript direct-list control.
|
|
291
|
-
- Marks missing AI attribution traces incomplete and withholds token and cost
|
|
292
|
-
per-success claims instead of treating missing data as zero.
|
|
293
|
-
- Records the equal-condition OpenCode tooling trial: both conditions passed
|
|
294
|
-
5/5, while structured tools used 16,933 more tokens per success, so no AI cost
|
|
295
|
-
reduction is claimed.
|
|
296
|
-
- Adds no semantic primitive, compiler pass, runtime concept, application API,
|
|
297
|
-
dependency, deploy artifact, or browser byte.
|
|
298
|
-
- Passes `npm run check`, required-Chrome 300/300, package smoke, tarball
|
|
299
|
-
inspection, and both npm publish dry-runs on the exact versioned tree.
|
|
300
|
-
- Updates `create-kudzu@0.1.140` to generate projects on
|
|
301
|
-
`@kudzujs/core@^0.16.15`.
|
|
302
|
-
|
|
303
|
-
### Upgrade
|
|
304
|
-
|
|
305
|
-
```sh
|
|
306
|
-
npm install @kudzujs/core@^0.16.15
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
## 0.16.14 - Fair AI Delivery Evidence
|
|
310
|
-
|
|
311
|
-
Kudzu 0.16.14 adds a repository-owned protocol and runner for equal-condition,
|
|
312
|
-
fully retained Kudzu and React+Vite delivery attempts.
|
|
313
|
-
|
|
314
|
-
### Changed in 0.16.14
|
|
315
|
-
|
|
316
|
-
- Adds `npm run benchmark:ai-delivery`, backed only by Node standard-library
|
|
317
|
-
process, hash, filesystem, timing, and compression APIs.
|
|
318
|
-
- Pins model revision, pricing, tool permissions, prompt, budgets, adapter,
|
|
319
|
-
acceptance command, starter trees, public context, and paired attempt order.
|
|
320
|
-
- Runs every attempt in an isolated starter copy, then independently reruns the
|
|
321
|
-
declared build and framework-neutral acceptance command.
|
|
322
|
-
- Preserves raw adapter/build/acceptance output, final authored source, browser
|
|
323
|
-
artifacts, hashes, token/cost/tool/file/build metrics, and source retention.
|
|
324
|
-
- Includes deliberate failures in the evidence and total cost-per-success
|
|
325
|
-
numerator rather than cherry-picking successful attempts.
|
|
326
|
-
- Adds no compiler pass, semantic primitive, runtime concept, application API,
|
|
327
|
-
dependency, or browser byte.
|
|
328
|
-
- Uses a deterministic fixture only to validate the protocol. It does not claim
|
|
329
|
-
that Kudzu outperforms React+Vite; measured tooling-cost validation remains the
|
|
330
|
-
next packet.
|
|
331
|
-
- Updates `create-kudzu@0.1.139` to generate projects on
|
|
332
|
-
`@kudzujs/core@^0.16.14`.
|
|
333
|
-
|
|
334
|
-
### Upgrade
|
|
335
|
-
|
|
336
|
-
```sh
|
|
337
|
-
npm install @kudzujs/core@^0.16.14
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
## 0.16.13 - Route Artifact Explanations
|
|
341
|
-
|
|
342
|
-
Kudzu 0.16.13 lets tools ask why one exact emitted route owns its browser bytes
|
|
343
|
-
without reading raw semantic records or reconstructing an artifact graph.
|
|
344
|
-
|
|
345
|
-
### Changed in 0.16.13
|
|
346
|
-
|
|
347
|
-
- Adds `kudzu explain --route <route> --json`, which runs the authoritative build
|
|
348
|
-
and projects authored source, normalization provenance, semantic owners,
|
|
349
|
-
capability facts, selected artifacts, and byte reasons for one emitted route.
|
|
350
|
-
- Reports raw and gzip byte totals plus SHA-256 hashes for runtime, handler,
|
|
351
|
-
transitive chunk, stylesheet, and Worker artifacts already selected by the
|
|
352
|
-
existing route artifact report.
|
|
353
|
-
- Explains zero-JavaScript routes from an absent behavior runtime family and an
|
|
354
|
-
empty compiler-selected JavaScript closure.
|
|
355
|
-
- Uses exact configured-base route matching and returns the structured
|
|
356
|
-
`explain.route.not-found` diagnostic for missing routes.
|
|
357
|
-
- Sorts every bounded section before truncation and excludes HTML, generated
|
|
358
|
-
code, RouteIR, ModuleIR, captures, and state values.
|
|
359
|
-
- Adds no analyzer, semantic primitive, compiler pass, runtime concept, public
|
|
360
|
-
application API, or browser byte.
|
|
361
|
-
- Updates `create-kudzu@0.1.138` to generate projects on
|
|
362
|
-
`@kudzujs/core@^0.16.13`.
|
|
363
|
-
|
|
364
|
-
### Upgrade
|
|
365
|
-
|
|
366
|
-
```sh
|
|
367
|
-
npm install @kudzujs/core@^0.16.13
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
## 0.16.12 - Bounded Application Inspection
|
|
371
|
-
|
|
372
|
-
Kudzu 0.16.12 lets tools select the first migration blocker from a compact
|
|
373
|
-
reachable-application inventory instead of reading the compiler's raw semantic
|
|
374
|
-
records or scanning an entire source tree.
|
|
375
|
-
|
|
376
|
-
### Changed in 0.16.12
|
|
377
|
-
|
|
378
|
-
- Adds `kudzu inspect --json`, which runs the authoritative build graph and emits
|
|
379
|
-
one versioned report of reachable modules, routes, package compatibility,
|
|
380
|
-
capability families, semantic owners, and blocker candidates.
|
|
381
|
-
- Sorts every section before applying fixed limits and reports total and omitted
|
|
382
|
-
counts so large applications retain bounded deterministic context.
|
|
383
|
-
- Distinguishes confirmed structured diagnostic blockers from unsupported
|
|
384
|
-
compatibility sites and partial-package review candidates.
|
|
385
|
-
- Excludes unreachable source, generated module code, HTML, RouteIR, ModuleIR,
|
|
386
|
-
captures, state values, and complete artifact closures from inspection output.
|
|
387
|
-
- Reuses existing source, compatibility, ownership, capability, and artifact
|
|
388
|
-
records; it adds no analyzer, semantic primitive, runtime concept, public
|
|
389
|
-
application API, or browser byte.
|
|
390
|
-
- Updates `create-kudzu@0.1.137` to generate projects on
|
|
391
|
-
`@kudzujs/core@^0.16.12`.
|
|
392
|
-
|
|
393
|
-
`inspect` performs the ordinary authoritative build, including configured
|
|
394
|
-
`afterBuild()` behavior. A structured compiler failure returns a bounded blocked
|
|
395
|
-
report with incomplete inventory rather than pretending that later facts exist.
|
|
396
|
-
|
|
397
|
-
### Upgrade
|
|
398
|
-
|
|
399
|
-
```sh
|
|
400
|
-
npm install @kudzujs/core@^0.16.12
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
## 0.16.11 - Structured Compiler Diagnostics
|
|
404
|
-
|
|
405
|
-
Kudzu 0.16.11 gives tools and agents stable machine-readable authored-source
|
|
406
|
-
errors without replacing concise human diagnostics or exposing compiler internals.
|
|
407
|
-
|
|
408
|
-
### Changed in 0.16.11
|
|
409
|
-
|
|
410
|
-
- Adds `kudzu build --json`, which emits one versioned diagnostic envelope with
|
|
411
|
-
stable semantic code, stage, severity, project-relative source range, message,
|
|
412
|
-
nullable compatibility class, and nullable safe suggestion.
|
|
413
|
-
- Preserves readable source-located build and development errors; agents no
|
|
414
|
-
longer need to parse maintained error-message substrings.
|
|
415
|
-
- Covers unresolved imports and re-exports, unsupported dynamic imports,
|
|
416
|
-
TypeScript syntax errors, runtime-locale `react-i18next`, and invalid keyed-row
|
|
417
|
-
ref initializers through the shared diagnostic transport.
|
|
418
|
-
- Reuses the existing compatibility registry and keeps pass filenames, generated
|
|
419
|
-
source, IR slots, runtime records, and stack traces out of machine output.
|
|
420
|
-
- Adds no semantic primitive, compiler pass, runtime concept, browser module, or
|
|
421
|
-
deploy byte. Representative artifact manifests and hashes remain unchanged.
|
|
422
|
-
- Updates `create-kudzu@0.1.136` to generate projects on
|
|
423
|
-
`@kudzujs/core@^0.16.11`.
|
|
424
|
-
|
|
425
|
-
### Upgrade
|
|
426
|
-
|
|
427
|
-
```sh
|
|
428
|
-
npm install @kudzujs/core@^0.16.11
|
|
429
|
-
```
|
|
430
|
-
|
|
431
|
-
## 0.16.10 - Apache Answer Authentication Journey
|
|
432
|
-
|
|
433
|
-
Kudzu 0.16.10 promotes the existing Apache Answer authentication reduction from
|
|
434
|
-
build-only evidence to a complete deterministic browser journey.
|
|
435
|
-
|
|
436
|
-
### Changed in 0.16.10
|
|
437
|
-
|
|
438
|
-
- Proves anonymous startup, invalid login, valid login, token persistence, and
|
|
439
|
-
token restoration after a full document reload.
|
|
440
|
-
- Proves one layout-owned package-neutral session record updates the shared
|
|
441
|
-
header and settings route without a browser component tree.
|
|
442
|
-
- Proves a server 401 clears storage and shared state before native replacement
|
|
443
|
-
navigation returns to the anonymous login document.
|
|
444
|
-
- Runs the journey against a deterministic native test server while preserving
|
|
445
|
-
the public sibling as complete HTML with zero JavaScript.
|
|
446
|
-
- Adds no compiler behavior, semantic primitive, IR kind, runtime concept,
|
|
447
|
-
package adapter, public API, or browser bytes.
|
|
448
|
-
- Updates `create-kudzu@0.1.135` to generate projects on
|
|
449
|
-
`@kudzujs/core@^0.16.10`.
|
|
450
|
-
|
|
451
|
-
### Upgrade
|
|
452
|
-
|
|
453
|
-
```sh
|
|
454
|
-
npm install @kudzujs/core@^0.16.10
|
|
455
|
-
```
|
|
456
|
-
|
|
457
|
-
## 0.16.9 - Compatibility Boundary And Inventory
|
|
458
|
-
|
|
459
|
-
Kudzu 0.16.9 records deterministic package compatibility provenance from the
|
|
460
|
-
reachable authored source graph without changing semantic IR or browser output.
|
|
461
|
-
|
|
462
|
-
### Changed in 0.16.9
|
|
463
|
-
|
|
464
|
-
- Centralizes package identities and compatibility classifications used by
|
|
465
|
-
React, React Router, React Bootstrap, Zustand, `clsx`, and browser-signal
|
|
466
|
-
normalization.
|
|
467
|
-
- Writes `.kudzu/kudzu-compatibility.json` from original, pre-normalization
|
|
468
|
-
source with package/API identity and exact line/column ranges.
|
|
469
|
-
- Classifies sites as Native, Compiled, Normalized, Adapter, Owned External UI,
|
|
470
|
-
Partial, or Unsupported with stable rule names and deterministic ordering.
|
|
471
|
-
- Includes only modules reachable from page entries; unused migration source is
|
|
472
|
-
excluded from the report just as it is from compilation.
|
|
473
|
-
- Keeps package origin out of ComponentAnalysis, ModuleIR, RouteIR, codegen,
|
|
474
|
-
runtime modules, and deploy output. No plugin API or browser capability is
|
|
475
|
-
added.
|
|
476
|
-
- Updates `create-kudzu@0.1.134` to generate projects on
|
|
477
|
-
`@kudzujs/core@^0.16.9`.
|
|
478
|
-
|
|
479
|
-
### Upgrade
|
|
480
|
-
|
|
481
|
-
```sh
|
|
482
|
-
npm install @kudzujs/core@^0.16.9
|
|
483
|
-
```
|
|
484
|
-
|
|
485
|
-
## 0.16.8 - Shared Lazy Capability Graphs
|
|
486
|
-
|
|
487
|
-
Kudzu 0.16.8 shares one deferred package graph across route owners while
|
|
488
|
-
keeping loading interaction-triggered and ownership validation lexical.
|
|
489
|
-
|
|
490
|
-
### Changed in 0.16.8
|
|
491
|
-
|
|
492
|
-
- Records one deferred CodeMirror chunk as shared by both route owners without
|
|
493
|
-
duplicating its package graph.
|
|
494
|
-
- Keeps the shared chunk out of route HTML, module preload, navigation prefetch,
|
|
495
|
-
and static siblings until an owner activates.
|
|
496
|
-
- Uses the native browser module map for document-scoped deduplication and adds
|
|
497
|
-
no loader, prefetch registry, cache, or browser runtime.
|
|
498
|
-
- Resolves lazy `useEffect` ownership through lexical imports so a local
|
|
499
|
-
same-named function cannot bypass ordinary dynamic-import diagnostics.
|
|
500
|
-
- Preserves exact owner cleanup; native in-flight imports remain non-cancellable
|
|
501
|
-
and late callbacks cannot mount after disposal.
|
|
502
|
-
- Updates `create-kudzu@0.1.133` to generate projects on
|
|
503
|
-
`@kudzujs/core@^0.16.8`.
|
|
504
|
-
|
|
505
|
-
### Output And Browser Evidence
|
|
506
|
-
|
|
507
|
-
- Both owners share one 250,086 raw / 80,890 gzip byte deferred chunk. Their
|
|
508
|
-
eager graphs are 21,599 raw / 9,466 gzip and 21,609 raw / 9,468 gzip bytes.
|
|
509
|
-
- Required Chrome proves zero initial requests, one first-owner request, no
|
|
510
|
-
route-prefetch request, no second-owner duplicate, and exact cleanup.
|
|
511
|
-
- The static sibling emits zero JavaScript. The maintained Worker and window
|
|
512
|
-
graphs remain 907 raw / 477 gzip bytes and 14,456 raw / 6,160 gzip bytes.
|
|
513
|
-
|
|
514
|
-
### Upgrade
|
|
515
|
-
|
|
516
|
-
```sh
|
|
517
|
-
npm install @kudzujs/core@^0.16.8
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
## 0.16.7 - Lazy Retained Editor Lifecycle
|
|
521
|
-
|
|
522
|
-
Kudzu 0.16.7 applies owner-triggered package loading to the real retained
|
|
523
|
-
CodeMirror editor journey without losing update, error, identity, or cleanup
|
|
524
|
-
behavior.
|
|
525
|
-
|
|
526
|
-
### Changed in 0.16.7
|
|
527
|
-
|
|
528
|
-
- Lets one retained `useRef(null)` package handle receive its single setup
|
|
529
|
-
assignment inside the direct `.then()` callback of a guarded literal package
|
|
530
|
-
import.
|
|
531
|
-
- Reuses existing owner-scoped retained state across the lazy activation effect
|
|
532
|
-
and later read-only update effects.
|
|
533
|
-
- Keeps indirect promise callbacks, multiple assignments, update-effect writes,
|
|
534
|
-
attached refs, missing null-reset cleanup, and broader dynamic imports
|
|
535
|
-
unsupported.
|
|
536
|
-
- Preserves application-to-editor and editor-to-application updates, accessible
|
|
537
|
-
package errors and recovery, retained DOM identity, conditional disposal, and
|
|
538
|
-
fresh state on remount.
|
|
539
|
-
- Uses the native browser module map for cached remount and adds no loader,
|
|
540
|
-
resource registry, widget runtime, React, VDOM, hydration, or retained browser
|
|
541
|
-
component tree.
|
|
542
|
-
- Updates `create-kudzu@0.1.132` to generate projects on
|
|
543
|
-
`@kudzujs/core@^0.16.7`.
|
|
544
|
-
|
|
545
|
-
### Output And Browser Evidence
|
|
546
|
-
|
|
547
|
-
- The eager real editor owns 214,968 raw / 71,607 gzip bytes. The lazy journey
|
|
548
|
-
initially owns 15,896 raw / 7,230 gzip bytes and defers 250,086 raw / 80,890
|
|
549
|
-
gzip bytes, reducing initial gzip by 64,377 bytes (89.9%).
|
|
550
|
-
- Required Chrome proves zero initial chunk requests, one on-demand request,
|
|
551
|
-
bidirectional updates, accessible failure recovery, retained identity, exact
|
|
552
|
-
conditional cleanup, cached fresh remount, and document cleanup.
|
|
553
|
-
- The static sibling emits zero JavaScript. The maintained Worker and window
|
|
554
|
-
graphs remain 907 raw / 477 gzip bytes and 14,456 raw / 6,160 gzip bytes.
|
|
555
|
-
|
|
556
|
-
### Upgrade
|
|
557
|
-
|
|
558
|
-
```sh
|
|
559
|
-
npm install @kudzujs/core@^0.16.7
|
|
560
|
-
```
|
|
561
|
-
|
|
562
|
-
## 0.16.6 - Owner-Triggered Capability Imports
|
|
563
|
-
|
|
564
|
-
Kudzu 0.16.6 lets one guarded effect load a literal package dependency only
|
|
565
|
-
when its owner activates, using native ESM code splitting without a loader or
|
|
566
|
-
component runtime.
|
|
567
|
-
|
|
568
|
-
### Changed in 0.16.6
|
|
569
|
-
|
|
570
|
-
- Accepts one literal bare-package `import()` directly inside an inline
|
|
571
|
-
synchronous `useEffect` with a direct dependency-state early-return guard.
|
|
572
|
-
- Keeps relative, URL, render-time, event-handler, indirect, async-effect, and
|
|
573
|
-
multiple dynamic imports unsupported with source diagnostics.
|
|
574
|
-
- Removes the package edge from build-time component execution and preserves it
|
|
575
|
-
only in the route-owned effect bundle.
|
|
576
|
-
- Reports deferred handler closure separately as `handlers.lazyChunks` while
|
|
577
|
-
retaining exact route ownership and shared-chunk accounting.
|
|
578
|
-
- Uses native module-map deduplication across owner remounts and exact effect
|
|
579
|
-
cleanup on owner and document release.
|
|
580
|
-
- Adds no loader, retry cache, component runtime, React, VDOM, hydration, or
|
|
581
|
-
retained browser component tree.
|
|
582
|
-
- Updates `create-kudzu@0.1.131` to generate projects on
|
|
583
|
-
`@kudzujs/core@^0.16.6`.
|
|
584
|
-
|
|
585
|
-
### Output And Browser Evidence
|
|
586
|
-
|
|
587
|
-
- The eager CodeMirror route owns 214,968 raw / 71,607 gzip bytes. The lazy
|
|
588
|
-
route initially owns 12,982 raw / 6,153 gzip bytes and defers 250,086 raw /
|
|
589
|
-
80,890 gzip bytes, reducing initial gzip by 65,454 bytes (91.4%).
|
|
590
|
-
- Required Chrome proves zero initial chunk requests, one activation request,
|
|
591
|
-
package mount, exact owner cleanup, cached remount without another request,
|
|
592
|
-
and document cleanup.
|
|
593
|
-
- The static sibling emits zero JavaScript. The maintained Worker and window
|
|
594
|
-
graphs remain 907 raw / 477 gzip bytes and 14,456 raw / 6,160 gzip bytes.
|
|
595
|
-
|
|
596
|
-
### Upgrade
|
|
597
|
-
|
|
598
|
-
```sh
|
|
599
|
-
npm install @kudzujs/core@^0.16.6
|
|
600
|
-
```
|
|
601
|
-
|
|
602
|
-
## 0.16.5 - Bounded Navigation Cache
|
|
603
|
-
|
|
604
|
-
Kudzu 0.16.5 prevents superseded enhanced navigations from resurrecting pruned
|
|
605
|
-
prefetched documents and adds a reproducible long-session ownership gate.
|
|
606
|
-
|
|
607
|
-
### Changed in 0.16.5
|
|
608
|
-
|
|
609
|
-
- Checks the navigation revision before writing a completed prefetched document
|
|
610
|
-
back into the route cache.
|
|
611
|
-
- Prevents stale slow navigations from retaining parsed documents after a newer
|
|
612
|
-
route has committed and pruned their URLs.
|
|
613
|
-
- Adds a dedicated Chrome endurance harness with machine-readable heap, DOM,
|
|
614
|
-
listener, logical-state, resource, and navigation counters.
|
|
615
|
-
- Exercises ten deterministic stale-prefetch races followed by 30 route,
|
|
616
|
-
conditional, keyed, dialog, and real CodeMirror ownership cycles.
|
|
617
|
-
- Proves a layout-owned project notification WebSocket journey with validated
|
|
618
|
-
keyed updates, reconnect, stale-callback rejection, offline recovery, retained
|
|
619
|
-
navigation lifetime, and exact cleanup.
|
|
620
|
-
- Adds no cache abstraction, LRU, transport runtime, ResourceIR, VDOM, hydration,
|
|
621
|
-
React runtime, or retained component tree.
|
|
622
|
-
- Updates `create-kudzu@0.1.130` to generate projects on
|
|
623
|
-
`@kudzujs/core@^0.16.5`.
|
|
624
|
-
|
|
625
|
-
### Output And Browser Evidence
|
|
626
|
-
|
|
627
|
-
- Before the fix, five stale-prefetch races increased retained CDP documents
|
|
628
|
-
from 8 to 16 while logical state remained empty.
|
|
629
|
-
- With the fix, the default 101-navigation run keeps documents at 8,
|
|
630
|
-
`browserState.size` at 0, DOM nodes at 174, listeners at 7, and editor
|
|
631
|
-
mounts/disposals balanced at 71/71.
|
|
632
|
-
- Forced-GC heap moves from 1,826,244 to 2,022,160 bytes, below the declared
|
|
633
|
-
larger-of-2-MiB-or-15% alarm.
|
|
634
|
-
- The maintained Worker graph remains 907 raw / 477 gzip bytes; the window graph
|
|
635
|
-
remains 14,456 raw / 6,160 gzip bytes. Static routes remain zero JavaScript.
|
|
636
|
-
|
|
637
|
-
### Upgrade
|
|
638
|
-
|
|
639
|
-
```sh
|
|
640
|
-
npm install @kudzujs/core@^0.16.5
|
|
641
|
-
```
|
|
642
|
-
|
|
643
|
-
## 0.16.4 - Scoped GSAP Animation Lifecycle
|
|
644
|
-
|
|
645
|
-
Kudzu 0.16.4 lets inline GSAP callbacks remain inside one owned effect while
|
|
646
|
-
Kudzu retains structural DOM and exact route, conditional, and dependency
|
|
647
|
-
lifetime ownership.
|
|
648
|
-
|
|
649
|
-
### Changed in 0.16.4
|
|
650
|
-
|
|
651
|
-
- Accepts package references inside an unbroken chain of inline callbacks passed
|
|
652
|
-
directly within an owned effect setup or cleanup.
|
|
653
|
-
- Keeps named, local, imported, render-time, and mixed package indirection
|
|
654
|
-
unsupported.
|
|
655
|
-
- Preserves deterministic visible HTML before GSAP applies bounded opacity and
|
|
656
|
-
transform presentation.
|
|
657
|
-
- Uses native `prefers-reduced-motion` detection for a static presentation with
|
|
658
|
-
no residual inline opacity, transform, or visibility.
|
|
659
|
-
- Reverts the previous GSAP context before dependency replacement and on
|
|
660
|
-
conditional or enhanced-route disposal; remount creates a fresh owner.
|
|
661
|
-
- Adds no animation IR, scheduler, runtime concept, React, VDOM, hydration, or
|
|
662
|
-
retained component tree.
|
|
663
|
-
- Updates `create-kudzu@0.1.129` to generate projects on
|
|
664
|
-
`@kudzujs/core@^0.16.4`.
|
|
665
|
-
|
|
666
|
-
### Output And Browser Evidence
|
|
667
|
-
|
|
668
|
-
- The GSAP fixture emits 8 JavaScript files totaling 94,110 raw / 37,819
|
|
669
|
-
aggregate gzip bytes; its static sibling emits zero JavaScript.
|
|
670
|
-
- Required Chrome proves scoped mount, dependency replacement, reduced-motion
|
|
671
|
-
fallback, conditional and route disposal, retained structure, and fresh
|
|
672
|
-
remount.
|
|
673
|
-
- The maintained Worker and window graphs remain 907 raw / 477 gzip bytes and
|
|
674
|
-
14,456 raw / 6,159 gzip bytes respectively.
|
|
675
|
-
|
|
676
|
-
### Upgrade
|
|
677
|
-
|
|
678
|
-
```sh
|
|
679
|
-
npm install @kudzujs/core@^0.16.4
|
|
680
|
-
```
|
|
681
|
-
|
|
682
|
-
## 0.16.3 - State-Owned Drag And Drop
|
|
683
|
-
|
|
684
|
-
Kudzu 0.16.3 proves that a real SortableJS drag engine can remain a bounded
|
|
685
|
-
effect while existing keyed state owns durable order and DOM identity.
|
|
686
|
-
|
|
687
|
-
### Changed in 0.16.3
|
|
688
|
-
|
|
689
|
-
- Treats the browser `HTMLElement` constructor as a platform global inside
|
|
690
|
-
bundled effect callbacks while preserving lexical shadowing.
|
|
691
|
-
- Restores package-moved DOM before applying one immutable state reorder, so
|
|
692
|
-
Kudzu remains the only durable keyed DOM owner.
|
|
693
|
-
- Uses the same state operation for drag, keyboard movement, and reset.
|
|
694
|
-
- Recovers invalid package indexes without changing application state.
|
|
695
|
-
- Disposes on conditional and document release; remount creates a fresh package
|
|
696
|
-
instance.
|
|
697
|
-
- Adds no drag/drop IR, animation frame, runtime concept, React, VDOM, hydration,
|
|
698
|
-
or retained component tree.
|
|
699
|
-
- Updates `create-kudzu@0.1.128` to generate projects on
|
|
700
|
-
`@kudzujs/core@^0.16.3`.
|
|
701
|
-
|
|
702
|
-
### Output And Browser Evidence
|
|
703
|
-
|
|
704
|
-
- The SortableJS fixture emits 10 JavaScript files totaling 72,251 raw / 26,603
|
|
705
|
-
aggregate gzip bytes; its static sibling emits zero JavaScript.
|
|
706
|
-
- Required Chrome proves drag and keyboard reorder, state synchronization,
|
|
707
|
-
retained row/input identity, invalid-input recovery, disposal, and fresh
|
|
708
|
-
remount.
|
|
709
|
-
- The maintained Worker and window graphs remain 907 raw / 477 gzip bytes and
|
|
710
|
-
14,456 raw / 6,159 gzip bytes respectively.
|
|
711
|
-
|
|
712
|
-
### Upgrade
|
|
713
|
-
|
|
714
|
-
```sh
|
|
715
|
-
npm install @kudzujs/core@^0.16.3
|
|
716
|
-
```
|
|
717
|
-
|
|
718
|
-
## 0.16.1 - Retained External Editor Ownership
|
|
719
|
-
|
|
720
|
-
Kudzu 0.16.1 lets one CodeMirror-class package instance remain owned across a
|
|
721
|
-
mount effect and later dependency update effects without a React island or
|
|
722
|
-
generic widget runtime.
|
|
723
|
-
|
|
724
|
-
### Changed in 0.16.1
|
|
725
|
-
|
|
726
|
-
- Lowers one proven unattached `useRef(null)` retained-instance handle to
|
|
727
|
-
existing owner-scoped object state.
|
|
728
|
-
- Requires one empty-dependency mount effect, one direct setup assignment,
|
|
729
|
-
direct null-reset cleanup, and read-only later dependency effects.
|
|
730
|
-
- Preserves editor DOM identity across application-state and editor-to-state
|
|
731
|
-
updates, including accessible package errors and recovery.
|
|
732
|
-
- Disposes on conditional and document release; remount receives a fresh handle.
|
|
733
|
-
- Rejects malformed cleanup, update-effect writes, multiple retained handles,
|
|
734
|
-
aliases, event use, and attached retained refs.
|
|
735
|
-
- Adds no IR kind, runtime concept, resource registry, React, or widget runtime.
|
|
736
|
-
- Updates `create-kudzu@0.1.127` to generate projects on
|
|
737
|
-
`@kudzujs/core@^0.16.1`.
|
|
738
|
-
|
|
739
|
-
### Output And Browser Evidence
|
|
740
|
-
|
|
741
|
-
- The CodeMirror fixture emits 7 JavaScript files totaling 214,968 raw /
|
|
742
|
-
71,607 aggregate gzip bytes; its static sibling emits zero JavaScript.
|
|
743
|
-
- Required Chrome proves initial mount, retained application updates,
|
|
744
|
-
editor-to-state updates, package-error recovery, disposal, and fresh remount.
|
|
745
|
-
- The smaller Typed.js boundary fixture proves the same existing effect owner
|
|
746
|
-
without any production compiler change.
|
|
747
|
-
|
|
748
|
-
### Upgrade
|
|
749
|
-
|
|
750
|
-
```sh
|
|
751
|
-
npm install @kudzujs/core@^0.16.1
|
|
752
|
-
```
|
|
753
|
-
|
|
754
|
-
## 0.15.1 - Key-Scoped Native Popovers
|
|
755
|
-
|
|
756
|
-
Kudzu 0.15.1 lets ordinary keyed row components use `useId()` for native
|
|
757
|
-
Popover triggers and intrinsic ID relationships without duplicate cloned IDs.
|
|
758
|
-
|
|
759
|
-
### Changed in 0.15.1
|
|
760
|
-
|
|
761
|
-
- Key-scoped keyed-row `useId()` through the existing list ownership path.
|
|
762
|
-
- Rewrites cloned `id`, `htmlFor`, static ARIA IDREF, `form`, `headers`, `list`,
|
|
763
|
-
and `popovertarget` attributes.
|
|
764
|
-
- Rejects keyed IDs used in text, handlers, aliases, arbitrary attributes, or
|
|
765
|
-
component prop forwarding.
|
|
766
|
-
- Proves native Popover Escape, light dismiss, trigger focus restoration,
|
|
767
|
-
retained reorder identity, inserted and remounted IDs, and route cleanup.
|
|
768
|
-
- Adds no overlay runtime, focus manager, positioning engine, Portal/Slot
|
|
769
|
-
reconciliation, retained component tree, or public API.
|
|
770
|
-
- Updates `create-kudzu@0.1.126` to generate projects on
|
|
771
|
-
`@kudzujs/core@^0.15.1`.
|
|
772
|
-
|
|
773
|
-
### Output And Browser Evidence
|
|
774
|
-
|
|
775
|
-
- The maintained application emits 44 files totaling 171,202 raw / 53,629
|
|
776
|
-
aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
777
|
-
- The two-route session remains 17 JavaScript files totaling 77,779 raw /
|
|
778
|
-
27,050 aggregate gzip bytes.
|
|
779
|
-
- Seven Chrome profiles record a 0.5 ms table-update median and 2.5 ms
|
|
780
|
-
navigation median, within prior retained-path ranges.
|
|
781
|
-
|
|
782
|
-
### Upgrade
|
|
783
|
-
|
|
784
|
-
```sh
|
|
785
|
-
npm install @kudzujs/core@^0.15.1
|
|
786
|
-
```
|
|
787
|
-
|
|
788
|
-
## 0.14.3 - 10,000-Item Browser Decision
|
|
789
|
-
|
|
790
|
-
Kudzu 0.14.3 measures direct DOM, pagination, and scroll-window alternatives
|
|
791
|
-
for one deterministic 10,000-project table and selects native pagination.
|
|
792
|
-
|
|
793
|
-
### Changed in 0.14.3
|
|
794
|
-
|
|
795
|
-
- Added a tracked three-route large-list decision fixture.
|
|
796
|
-
- Added rotating fresh-Chrome load, range, DOM, heap, and identity measurement.
|
|
797
|
-
- Rejected direct 10,000-row DOM after its 90,023-node result.
|
|
798
|
-
- Rejected fixed-height scroll windowing for the project table because pagination
|
|
799
|
-
is faster to change range, uses less heap, and preserves native page/focus and
|
|
800
|
-
variable-row-height behavior.
|
|
801
|
-
- Added no range primitive, virtualization runtime, compiler pass, or public API.
|
|
802
|
-
- Updated `create-kudzu@0.1.125` to generate projects on
|
|
803
|
-
`@kudzujs/core@^0.14.3`.
|
|
804
|
-
|
|
805
|
-
### Browser Evidence
|
|
806
|
-
|
|
807
|
-
- Direct DOM loads in 806.6 ms median with 90,023 DOM nodes.
|
|
808
|
-
- Pagination loads in 165.4 ms and changes its 100-row page in 12.1 ms median
|
|
809
|
-
with 1,470 DOM nodes.
|
|
810
|
-
- The scroll window loads in 161.2 ms and changes range in 16.5 ms median with
|
|
811
|
-
1,471 DOM nodes.
|
|
812
|
-
- Both bounded strategies release an edited off-range row and restore fresh
|
|
813
|
-
native input identity.
|
|
814
|
-
|
|
815
|
-
### Decision
|
|
816
|
-
|
|
817
|
-
Use pagination for 10,000-item project tables. `0.14.4` virtual range ownership
|
|
818
|
-
remains blocked until three independent real fixtures prove pagination and
|
|
819
|
-
application-owned bounded ranges insufficient.
|
|
820
|
-
|
|
821
|
-
### Upgrade
|
|
822
|
-
|
|
823
|
-
```sh
|
|
824
|
-
npm install @kudzujs/core@^0.14.3
|
|
825
|
-
```
|
|
826
|
-
|
|
827
|
-
## 0.14.2 - Infinite Loading Composition
|
|
828
|
-
|
|
829
|
-
Kudzu 0.14.2 composes bounded sentinel-driven loading from ordinary state,
|
|
830
|
-
owned effects, native `IntersectionObserver`, fetch, and existing keyed lists.
|
|
831
|
-
|
|
832
|
-
### Changed in 0.14.2
|
|
833
|
-
|
|
834
|
-
- Added an intrinsic sentinel with an owned observer and exact disconnect.
|
|
835
|
-
- Added cursor-based incremental fetch with duplicate project suppression.
|
|
836
|
-
- Added accessible loading, error, retry, and terminal states.
|
|
837
|
-
- Aborted in-flight incremental work when enhanced navigation releases the route.
|
|
838
|
-
- Bounded successful incremental pages to two and retained projects to six.
|
|
839
|
-
- Updated `create-kudzu@0.1.124` to generate projects on
|
|
840
|
-
`@kudzujs/core@^0.14.2`.
|
|
841
|
-
|
|
842
|
-
### Output Evidence
|
|
843
|
-
|
|
844
|
-
- The application emits 44 files totaling 168,037 raw / 52,955 aggregate gzip
|
|
845
|
-
bytes with deploy digest
|
|
846
|
-
`230dea098442275e42a966ca595743a4da9c832327ba52d4d09de663c68f8f1a`.
|
|
847
|
-
- The maintained two-route session remains 17 JavaScript files and totals
|
|
848
|
-
76,889 raw / 26,750 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
849
|
-
- No semantic primitive, IR kind, compiler pass, production compiler/runtime
|
|
850
|
-
line, normalization rule, adapter, runtime concept, public API, infinite-query
|
|
851
|
-
runtime, or observer scheduler was added.
|
|
852
|
-
|
|
853
|
-
### Validation
|
|
854
|
-
|
|
855
|
-
- Required Chrome proves cursor progression, duplicate trigger and record
|
|
856
|
-
suppression, HTTP error and retry, terminal state, retained row identity,
|
|
857
|
-
bounded requests/results, observer disconnect, and route-owned fetch abort.
|
|
858
|
-
- The complete suite passes 274 tests, package smoke, and serialized required-
|
|
859
|
-
Chrome execution.
|
|
860
|
-
- Seven fresh Chrome 151 profiles record a 0.5 ms table-update median with a
|
|
861
|
-
0.3-0.6 ms range and a 2.3 ms navigation median with a 2.2-2.6 ms range.
|
|
862
|
-
|
|
863
|
-
### Limits
|
|
864
|
-
|
|
865
|
-
Incremental loading is capped at two successful pages of two records and six
|
|
866
|
-
retained projects. Unbounded datasets, automatic query caching, windowing, and
|
|
867
|
-
virtualization remain separate measured decisions.
|
|
868
|
-
|
|
869
|
-
### Upgrade
|
|
870
|
-
|
|
871
|
-
```sh
|
|
872
|
-
npm install @kudzujs/core@^0.14.2
|
|
873
|
-
```
|
|
874
|
-
|
|
875
|
-
## 0.14.1 - Nested And Object-State Collections
|
|
876
|
-
|
|
877
|
-
Kudzu 0.14.1 lets one direct immutable array field of ordinary object state own
|
|
878
|
-
a root keyed collection and its nested direct-property lists.
|
|
879
|
-
|
|
880
|
-
### Changed in 0.14.1
|
|
881
|
-
|
|
882
|
-
- Allowed compiler-proven object-state collection roots without authored field
|
|
883
|
-
state.
|
|
884
|
-
- Initialized binding-backed roots before nested row ownership mounts.
|
|
885
|
-
- Preserved project and issue DOM identity through immutable replacement and
|
|
886
|
-
nested update, reorder, and removal.
|
|
887
|
-
- Preserved latest-item handlers and released descendant row state exactly.
|
|
888
|
-
- Recreated removed and re-added nested rows with fresh local state.
|
|
889
|
-
- Updated `create-kudzu@0.1.123` to generate projects on
|
|
890
|
-
`@kudzujs/core@^0.14.1`.
|
|
891
|
-
|
|
892
|
-
### Output Evidence
|
|
893
|
-
|
|
894
|
-
- The application emits 44 files totaling 164,305 raw / 52,185 aggregate gzip
|
|
895
|
-
bytes with deploy digest
|
|
896
|
-
`0a3b7e10b3447a76a9c04ef34ad7c2bfa30400ea53c9d16fc85b1c7cbf2ea203`.
|
|
897
|
-
- The maintained two-route session remains 17 JavaScript files and totals
|
|
898
|
-
74,826 raw / 26,204 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
899
|
-
- No semantic primitive, IR kind, compiler pass, runtime concept, or public API
|
|
900
|
-
was added. One build-time validation line changed and one list-runtime line
|
|
901
|
-
was added.
|
|
902
|
-
|
|
903
|
-
### Validation
|
|
904
|
-
|
|
905
|
-
- Required Chrome proves immutable whole-object replacement, nested issue
|
|
906
|
-
insert, update, reorder, removal, re-addition, retained identity, latest
|
|
907
|
-
handlers, descendant state release, and fresh remount.
|
|
908
|
-
- The complete suite passes 274 tests, package smoke, and serialized required-
|
|
909
|
-
Chrome execution.
|
|
910
|
-
- Seven fresh Chrome profiles record a 0.8 ms table-update median with a
|
|
911
|
-
0.7-0.9 ms range and a 4.1 ms navigation median with a 3.7-4.5 ms range.
|
|
912
|
-
|
|
913
|
-
### Limits
|
|
914
|
-
|
|
915
|
-
Collection roots require one direct static array field and immutable whole-
|
|
916
|
-
object replacement. Dynamic or computed paths, mutation, and non-array fields
|
|
917
|
-
remain unsupported.
|
|
918
|
-
|
|
919
|
-
### Upgrade
|
|
920
|
-
|
|
921
|
-
```sh
|
|
922
|
-
npm install @kudzujs/core@^0.14.1
|
|
923
|
-
```
|
|
924
|
-
|
|
925
|
-
## 0.14.0 - Project Table CRUD And Identity
|
|
926
|
-
|
|
927
|
-
Kudzu 0.14.0 composes a complete native project table from ordinary state,
|
|
928
|
-
collection selectors, and keyed ownership without a data-grid runtime.
|
|
929
|
-
|
|
930
|
-
### Changed in 0.14.0
|
|
931
|
-
|
|
932
|
-
- Replaced the project article list with valid native table structure.
|
|
933
|
-
- Added project insertion, inline name editing, save, and deletion.
|
|
934
|
-
- Added reorder, immutable name sorting, active filtering, and row selection.
|
|
935
|
-
- Preserved keyed row and draft-input identity through reorder and sort.
|
|
936
|
-
- Recreated removed rows with fresh local state after filter restoration.
|
|
937
|
-
- Kept editor controls mounted with native `hidden` and verified keyboard focus.
|
|
938
|
-
- Updated `create-kudzu@0.1.122` to generate projects on
|
|
939
|
-
`@kudzujs/core@^0.14.0`.
|
|
940
|
-
|
|
941
|
-
### Output Evidence
|
|
942
|
-
|
|
943
|
-
- The application emits 44 files totaling 159,258 raw / 51,627 aggregate gzip
|
|
944
|
-
bytes with deploy digest
|
|
945
|
-
`ebb3358e7a03612459e723ae765c39d105498db9d293415b924f1066cddf4793`.
|
|
946
|
-
- The maintained two-route session remains 17 JavaScript files and totals
|
|
947
|
-
73,304 raw / 25,930 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
948
|
-
- No semantic primitive, IR kind, compiler pass, production compiler/runtime
|
|
949
|
-
line, runtime concept, public API, or data-grid runtime was added.
|
|
950
|
-
|
|
951
|
-
### Validation
|
|
952
|
-
|
|
953
|
-
- Required Chrome proves insert, update, delete, reorder, sort, filter,
|
|
954
|
-
selection, keyboard access, row-local edit state, and retained DOM identity.
|
|
955
|
-
- The complete suite passes 273 tests.
|
|
956
|
-
- Seven fresh Chrome profiles record a 0.8 ms table-update median with a
|
|
957
|
-
0.7-1.1 ms range and a 3.9 ms navigation median with a 3.4-6.1 ms range.
|
|
958
|
-
|
|
959
|
-
### Limits
|
|
960
|
-
|
|
961
|
-
This is an ordinary bounded table, not virtualization. Infinite loading,
|
|
962
|
-
windowing, dynamic row measurement, and 10,000-row strategy selection remain
|
|
963
|
-
separate evidence packets.
|
|
964
|
-
|
|
965
|
-
### Upgrade
|
|
966
|
-
|
|
967
|
-
```sh
|
|
968
|
-
npm install @kudzujs/core@^0.14.0
|
|
969
|
-
```
|
|
970
|
-
|
|
971
|
-
## 0.13.3 - File Upload Boundary
|
|
972
|
-
|
|
973
|
-
Kudzu 0.13.3 composes a bounded file-upload lifecycle from native controls,
|
|
974
|
-
ordinary state, owned effects, and keyed rows without an upload runtime.
|
|
975
|
-
|
|
976
|
-
### Changed in 0.13.3
|
|
977
|
-
|
|
978
|
-
- Added one native plain-text file input with type and 1 KiB size validation
|
|
979
|
-
before any request.
|
|
980
|
-
- Added application-owned `FormData` and fetch upload with an owned
|
|
981
|
-
`AbortController`.
|
|
982
|
-
- Added explicit user cancellation, delayed transport failure, and retry without
|
|
983
|
-
requiring file reselection.
|
|
984
|
-
- Aborted in-flight upload work when enhanced navigation releases the route.
|
|
985
|
-
- Added successful keyed attachment mutation and an explicit statement that
|
|
986
|
-
fetch does not expose upload progress.
|
|
987
|
-
- Updated `create-kudzu@0.1.121` to generate projects on
|
|
988
|
-
`@kudzujs/core@^0.13.3`.
|
|
989
|
-
|
|
990
|
-
### Output Evidence
|
|
991
|
-
|
|
992
|
-
- The application emits 44 files totaling 150,023 raw / 50,240 aggregate gzip
|
|
993
|
-
bytes with deploy digest
|
|
994
|
-
`a16fd5dbc08086aa6a7c0ec0aba3a38fbe2a63b96005a81e8747a7f4e45e214e`.
|
|
995
|
-
- The maintained two-route session remains 17 JavaScript files and totals
|
|
996
|
-
71,031 raw / 25,304 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
997
|
-
- No semantic primitive, IR kind, compiler pass, production compiler/runtime
|
|
998
|
-
line, normalization rule, adapter, runtime concept, public API, upload
|
|
999
|
-
scheduler, or transfer runtime was added.
|
|
1000
|
-
|
|
1001
|
-
### Validation
|
|
1002
|
-
|
|
1003
|
-
- Required Chrome proves pre-request validation, user cancellation, delayed
|
|
1004
|
-
`503` feedback, retry, successful attachment mutation, and route-departure
|
|
1005
|
-
cancellation.
|
|
1006
|
-
- The complete suite passes 273 tests, including the preserved draft, nested
|
|
1007
|
-
form, authentication, routing, and server retry journeys.
|
|
1008
|
-
- Seven fresh Chrome profiles record a 3.8 ms list-to-detail median with a
|
|
1009
|
-
3.5-5.0 ms range. The destination changed, so no same-content latency change
|
|
1010
|
-
is claimed.
|
|
1011
|
-
|
|
1012
|
-
### Limits
|
|
1013
|
-
|
|
1014
|
-
Fetch upload progress is unavailable and no fake progress is rendered. Chunking,
|
|
1015
|
-
resume, background sync, binary formats, concurrent files, and files above the
|
|
1016
|
-
authored 1 KiB in-memory text limit remain unsupported until a real application
|
|
1017
|
-
requires a different transport.
|
|
1018
|
-
|
|
1019
|
-
### Upgrade
|
|
1020
|
-
|
|
1021
|
-
```sh
|
|
1022
|
-
npm install @kudzujs/core@^0.13.3
|
|
1023
|
-
```
|
|
1024
|
-
|
|
1025
|
-
## 0.13.2 - Multistep Draft And Autosave
|
|
1026
|
-
|
|
1027
|
-
Kudzu 0.13.2 composes a persistent two-step draft and debounced server save
|
|
1028
|
-
from ordinary route state and owned effects without a wizard or autosave runtime.
|
|
1029
|
-
|
|
1030
|
-
### Changed in 0.13.2
|
|
1031
|
-
|
|
1032
|
-
- Added native first-step validation and conditional step navigation over
|
|
1033
|
-
parent-owned draft values.
|
|
1034
|
-
- Added guarded versioned local-storage restore and immediate draft persistence
|
|
1035
|
-
across enhanced navigation and document reload.
|
|
1036
|
-
- Added a direct dependency effect with timeout cleanup for debounced owned
|
|
1037
|
-
server writes.
|
|
1038
|
-
- Rejected stale server versions and ignored late stale completions while
|
|
1039
|
-
retaining the current draft through conflict and transport failures.
|
|
1040
|
-
- Added reset of step, values, status, version, storage, and pending debounce.
|
|
1041
|
-
- Updated `create-kudzu@0.1.120` to generate projects on
|
|
1042
|
-
`@kudzujs/core@^0.13.2`.
|
|
1043
|
-
|
|
1044
|
-
### Output Evidence
|
|
1045
|
-
|
|
1046
|
-
- The application emits 44 files totaling 144,633 raw / 49,217 aggregate gzip
|
|
1047
|
-
bytes with deploy digest
|
|
1048
|
-
`06a35341c5e70bfec48c46ad767ac351326b39ba701f5c1f1d03992a65ec8b9e`.
|
|
1049
|
-
- The maintained two-route session remains 17 JavaScript files and totals
|
|
1050
|
-
68,664 raw / 24,747 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
1051
|
-
- No semantic primitive, IR kind, compiler pass, production compiler/runtime
|
|
1052
|
-
line, normalization rule, adapter, runtime concept, public API, wizard
|
|
1053
|
-
scheduler, or autosave scheduler was added.
|
|
1054
|
-
|
|
1055
|
-
### Validation
|
|
1056
|
-
|
|
1057
|
-
- Required Chrome proves native validation, debounced save, server rejection of
|
|
1058
|
-
an older in-flight version, ignored stale completion, navigation and reload
|
|
1059
|
-
restoration, retained conflict input, and reset cleanup.
|
|
1060
|
-
- The complete serial suite passes 273 tests, including the preserved nested
|
|
1061
|
-
issue-form and server retry journey.
|
|
1062
|
-
- Seven fresh Chrome profiles record a 6.1 ms list-to-detail median with a
|
|
1063
|
-
3.7-10.7 ms range. The destination changed and the range is noisy, so no
|
|
1064
|
-
same-content latency change is claimed.
|
|
1065
|
-
|
|
1066
|
-
### Limits
|
|
1067
|
-
|
|
1068
|
-
Draft persistence remains application-owned and versioned per form. Dynamic
|
|
1069
|
-
step schemas, cross-document coordination, background sync, retry scheduling,
|
|
1070
|
-
and a general autosave scheduler remain unsupported until independent real
|
|
1071
|
-
applications prove a shared framework boundary.
|
|
1072
|
-
|
|
1073
|
-
### Upgrade
|
|
1074
|
-
|
|
1075
|
-
```sh
|
|
1076
|
-
npm install @kudzujs/core@^0.13.2
|
|
1077
|
-
```
|
|
1078
|
-
|
|
1079
|
-
## 0.13.1 - Nested Form Metadata
|
|
1080
|
-
|
|
1081
|
-
Kudzu 0.13.1 composes conditional fields, dynamic keyed rows, dirty/touched
|
|
1082
|
-
display, and reset from ordinary application state without a form registry.
|
|
1083
|
-
|
|
1084
|
-
### Changed in 0.13.1
|
|
1085
|
-
|
|
1086
|
-
- Added conditional assignee fields backed by one ordinary object state.
|
|
1087
|
-
- Added dynamic checklist rows with immutable add, reorder, remove, input, and
|
|
1088
|
-
touched updates over one ordinary array state.
|
|
1089
|
-
- Preserved exact keyed DOM identity through reorder and reset while releasing
|
|
1090
|
-
removed and reset-added rows.
|
|
1091
|
-
- Kept native constraints, field/form server errors, retained values, and retry
|
|
1092
|
-
behavior from `0.13.0`.
|
|
1093
|
-
- Updated `create-kudzu@0.1.119` to generate projects on
|
|
1094
|
-
`@kudzujs/core@^0.13.1`.
|
|
1095
|
-
|
|
1096
|
-
### Output Evidence
|
|
1097
|
-
|
|
1098
|
-
- The application emits 44 files totaling 138,064 raw / 47,964 aggregate gzip
|
|
1099
|
-
bytes with deploy digest
|
|
1100
|
-
`f0d96cfd5dee2cf3fa67f4ebe25d8b32cbb1bf66e72ed5ca1c29bd06fdcc0a33`.
|
|
1101
|
-
- The maintained two-route session remains 17 JavaScript files and totals
|
|
1102
|
-
65,404 raw / 23,899 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
1103
|
-
- No semantic primitive, IR kind, compiler pass, production compiler/runtime
|
|
1104
|
-
line, normalization rule, adapter, public API, registration function, proxy
|
|
1105
|
-
metadata graph, schema adapter, or form runtime was added.
|
|
1106
|
-
|
|
1107
|
-
### Validation
|
|
1108
|
-
|
|
1109
|
-
- Required Chrome proves dirty/touched output, conditional ownership, stable-key
|
|
1110
|
-
reorder, removal release, native reset, and exact retained/released identity.
|
|
1111
|
-
- The existing keyboard validation and delayed `422`, `503`, and `201` journey
|
|
1112
|
-
passes while nested assignee and checklist values survive failures.
|
|
1113
|
-
- Seven fresh Chrome profiles record a 3.3 ms list-to-detail median with a
|
|
1114
|
-
3.2-4.7 ms range. The range overlaps `0.13.0`, so no latency change is claimed.
|
|
1115
|
-
|
|
1116
|
-
### Limits
|
|
1117
|
-
|
|
1118
|
-
Dynamic field names, schema-driven registration, generic watchers, and proxy
|
|
1119
|
-
dirty/touched graphs remain unsupported. Add framework metadata only after
|
|
1120
|
-
independent real forms prove the same otherwise-inexpressible graph.
|
|
1121
|
-
|
|
1122
|
-
### Upgrade
|
|
1123
|
-
|
|
1124
|
-
```sh
|
|
1125
|
-
npm install @kudzujs/core@^0.13.1
|
|
1126
|
-
```
|
|
1127
|
-
|
|
1128
|
-
## 0.13.0 - Production Form And Server Validation
|
|
1129
|
-
|
|
1130
|
-
Kudzu 0.13.0 compiles an accessible issue-creation form from ordinary TSX
|
|
1131
|
-
without adding a form runtime, field registry, or metadata proxy.
|
|
1132
|
-
|
|
1133
|
-
### Changed in 0.13.0
|
|
1134
|
-
|
|
1135
|
-
- Added a native issue form with `required` and `minLength` constraints,
|
|
1136
|
-
keyboard submission, `FormData`, and application-owned pending state.
|
|
1137
|
-
- Preserved field-level and form-level server errors, focused and ARIA-linked
|
|
1138
|
-
field feedback, valid input across failures, and retry without re-entry.
|
|
1139
|
-
- Reused existing state, ref, conditional, binding, and async handler semantics;
|
|
1140
|
-
production compiler and runtime source remain unchanged.
|
|
1141
|
-
- Updated `create-kudzu@0.1.118` to generate projects on
|
|
1142
|
-
`@kudzujs/core@^0.13.0`.
|
|
1143
|
-
|
|
1144
|
-
### Output Evidence
|
|
1145
|
-
|
|
1146
|
-
- The application emits 44 files totaling 127,343 raw / 46,261 aggregate gzip
|
|
1147
|
-
bytes with deploy digest
|
|
1148
|
-
`183f5a7ca081f99ae38de6974e61fdcb32ca49de699359aac053d0154ae38036`.
|
|
1149
|
-
- The maintained two-route session uses 17 JavaScript files totaling 62,118 raw
|
|
1150
|
-
/ 23,096 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
1151
|
-
- No semantic primitive, IR kind, compiler pass, production compiler/runtime
|
|
1152
|
-
line, runtime concept, public API, form registry, schema adapter, or form
|
|
1153
|
-
runtime was added.
|
|
1154
|
-
|
|
1155
|
-
### Validation
|
|
1156
|
-
|
|
1157
|
-
- Required Chrome sends real Enter key input and proves native empty and
|
|
1158
|
-
minimum-length constraints make zero requests.
|
|
1159
|
-
- Deterministic delayed `422`, `503`, and `201` responses prove pending state,
|
|
1160
|
-
exact request counts, field and form feedback, retained input, and retry.
|
|
1161
|
-
- Seven fresh Chrome profiles record a 3.6 ms list-to-detail median with a
|
|
1162
|
-
2.6-5.6 ms range. This measures the changed destination form and handler, not
|
|
1163
|
-
a same-content compiler/runtime regression.
|
|
1164
|
-
|
|
1165
|
-
### Limits
|
|
1166
|
-
|
|
1167
|
-
Nested fields, field arrays, dirty/touched metadata, dynamic schemas, and form
|
|
1168
|
-
registries remain unsupported. The `0.13.1` packet must first prove which of
|
|
1169
|
-
those behaviors cannot be expressed with native controls and ordinary state.
|
|
1170
|
-
|
|
1171
|
-
### Upgrade
|
|
1172
|
-
|
|
1173
|
-
```sh
|
|
1174
|
-
npm install @kudzujs/core@^0.13.0
|
|
1175
|
-
```
|
|
1176
|
-
|
|
1177
|
-
## 0.12.4 - Nested Layout Evidence Decision
|
|
1178
|
-
|
|
1179
|
-
Kudzu 0.12.4 reviews executable route ownership evidence and keeps the existing
|
|
1180
|
-
single-layout model instead of adding a speculative nested owner chain.
|
|
1181
|
-
|
|
1182
|
-
### Changed in 0.12.4
|
|
1183
|
-
|
|
1184
|
-
- Reviewed the project application's list/detail/runtime routes, Apache Answer
|
|
1185
|
-
route and authentication shells, Context and Zustand carts, and independent
|
|
1186
|
-
navigation groups.
|
|
1187
|
-
- Recorded zero routes requiring an intermediate retained layout whose state,
|
|
1188
|
-
effects, or DOM survive descendant replacement and dispose on subtree exit.
|
|
1189
|
-
- Accepted one shared layout plus static composition, route ownership, native
|
|
1190
|
-
document navigation, and disjoint navigation groups as the current boundary.
|
|
1191
|
-
- Updated `create-kudzu@0.1.117` to generate projects on
|
|
1192
|
-
`@kudzujs/core@^0.12.4`.
|
|
1193
|
-
|
|
1194
|
-
### Output Evidence
|
|
1195
|
-
|
|
1196
|
-
- The application remains unchanged at 43 files, 123,835 raw / 45,379 aggregate
|
|
1197
|
-
gzip bytes, and deploy digest
|
|
1198
|
-
`fb9d24cc01791bf80b67b659738ba62beded6ff6ce14a86a278fa4b34d088acf`.
|
|
1199
|
-
- The maintained enhanced session remains 16 JavaScript files totaling 61,126
|
|
1200
|
-
raw / 22,663 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
1201
|
-
- No semantic primitive, IR kind, compiler pass, production compiler/runtime
|
|
1202
|
-
line, runtime concept, layout registry, disposal path, or browser byte was
|
|
1203
|
-
added.
|
|
1204
|
-
|
|
1205
|
-
### Validation
|
|
1206
|
-
|
|
1207
|
-
- The machine-readable project contract records six reviewed route sets, zero
|
|
1208
|
-
qualifying routes, no owner chain, and the reused ownership semantics.
|
|
1209
|
-
- The full 273-test suite, package smoke, registry metadata, and fresh
|
|
1210
|
-
installation are release gates.
|
|
1211
|
-
|
|
1212
|
-
### Limits
|
|
1213
|
-
|
|
1214
|
-
Nested retained-layout owners remain unsupported. Reconsideration requires
|
|
1215
|
-
three unrelated executable application routes proving the same intermediate
|
|
1216
|
-
lifetime and explicit deepest-first disposal order.
|
|
1217
|
-
|
|
1218
|
-
### Upgrade
|
|
1219
|
-
|
|
1220
|
-
```sh
|
|
1221
|
-
npm install @kudzujs/core@^0.12.4
|
|
1222
|
-
```
|
|
1223
|
-
|
|
1224
|
-
## 0.12.3 - Route Failure And Restoration Policy
|
|
1225
|
-
|
|
1226
|
-
Kudzu 0.12.3 defines recovery for enhanced route failures without adding an
|
|
1227
|
-
error-boundary renderer or client router.
|
|
1228
|
-
|
|
1229
|
-
### Changed in 0.12.3
|
|
1230
|
-
|
|
1231
|
-
- Retained the current document when an enhanced navigation fetch or response
|
|
1232
|
-
body fails in transit.
|
|
1233
|
-
- Announced transport failure through the existing polite status and restored
|
|
1234
|
-
focus to the initiating native link for explicit retry.
|
|
1235
|
-
- Kept invalid document identity, missing capability modules, and missing
|
|
1236
|
-
stylesheets on the existing native fallback path before route disposal.
|
|
1237
|
-
- Proved retry after a failed pending prefetch and subsequent click request.
|
|
1238
|
-
- Updated `create-kudzu@0.1.116` to generate projects on
|
|
1239
|
-
`@kudzujs/core@^0.12.3`.
|
|
1240
|
-
|
|
1241
|
-
### Output Evidence
|
|
1242
|
-
|
|
1243
|
-
- The application emits 43 files, 123,835 raw / 45,379 aggregate gzip bytes,
|
|
1244
|
-
and deploy digest
|
|
1245
|
-
`fb9d24cc01791bf80b67b659738ba62beded6ff6ce14a86a278fa4b34d088acf`.
|
|
1246
|
-
- The maintained enhanced session uses 16 JavaScript files totaling 61,126 raw
|
|
1247
|
-
/ 22,663 aggregate gzip bytes, 359 raw bytes above `0.12.2`.
|
|
1248
|
-
- `/help` remains complete HTML with 0 B JavaScript.
|
|
1249
|
-
- No semantic primitive, compiler pass, core compiler line, runtime concept,
|
|
1250
|
-
public API, error-boundary renderer, or browser file was added.
|
|
1251
|
-
|
|
1252
|
-
### Validation
|
|
1253
|
-
|
|
1254
|
-
- Required Chrome proves retained fetch and body failures, accessible status,
|
|
1255
|
-
restored link focus, retry, and native invalid-document/module/style fallback.
|
|
1256
|
-
- Seven fresh Chrome profiles record a 1.8 ms navigation median with a 1.5-2.4
|
|
1257
|
-
ms range. The host differs from `0.12.2`, so no latency change is claimed.
|
|
1258
|
-
- The full 273-test suite, package smoke, registry metadata, and fresh
|
|
1259
|
-
installation are release gates.
|
|
1260
|
-
|
|
1261
|
-
### Limits
|
|
1262
|
-
|
|
1263
|
-
The retained-document policy covers classified transport failures. Invalid
|
|
1264
|
-
documents and assets use native navigation; arbitrary corrupted generated mount
|
|
1265
|
-
descriptors are outside this packet.
|
|
1266
|
-
|
|
1267
|
-
### Upgrade
|
|
1268
|
-
|
|
1269
|
-
```sh
|
|
1270
|
-
npm install @kudzujs/core@^0.12.3
|
|
1271
|
-
```
|
|
1272
|
-
|
|
1273
|
-
## 0.12.2 - Authentication And Permission Boundary
|
|
1274
|
-
|
|
1275
|
-
Kudzu 0.12.2 completes the project application's login, restoration,
|
|
1276
|
-
permission-aware UI, server rejection, and logout journey using existing
|
|
1277
|
-
application primitives.
|
|
1278
|
-
|
|
1279
|
-
### Changed in 0.12.2
|
|
1280
|
-
|
|
1281
|
-
- Replaced the placeholder login route with a native constrained form and one
|
|
1282
|
-
application-owned async submit handler.
|
|
1283
|
-
- Added layout-owned token restoration, session validation, authenticated user
|
|
1284
|
-
state, role-aware admin controls, and explicit logout.
|
|
1285
|
-
- Added bearer authorization to project reads and mutations; the deterministic
|
|
1286
|
-
server rejects missing tokens with 401 and member mutations with 403.
|
|
1287
|
-
- Proved that protected static HTML is a UX shell while server authorization is
|
|
1288
|
-
the security boundary.
|
|
1289
|
-
- Updated `create-kudzu@0.1.115` to generate projects on
|
|
1290
|
-
`@kudzujs/core@^0.12.2`.
|
|
1291
|
-
|
|
1292
|
-
### Output Evidence
|
|
1293
|
-
|
|
1294
|
-
- The application emits 43 files, 123,476 raw / 45,305 aggregate gzip bytes,
|
|
1295
|
-
and deploy digest
|
|
1296
|
-
`81d0b3c5e0d1d1f72f29d219647601463f5317f215274e14a45fe5ba92eb033e`.
|
|
1297
|
-
- The maintained enhanced session uses 16 JavaScript files totaling 60,767 raw
|
|
1298
|
-
/ 22,561 aggregate gzip bytes, 1,793 raw / 432 gzip bytes above `0.12.1`.
|
|
1299
|
-
- The login route uses 12,093 raw / 5,795 aggregate gzip JavaScript bytes, while
|
|
1300
|
-
`/help` remains complete HTML with 0 B JavaScript.
|
|
1301
|
-
- No semantic primitive, compiler pass, core compiler line, runtime concept,
|
|
1302
|
-
public API, auth runtime, or server was added to Kudzu.
|
|
1303
|
-
|
|
1304
|
-
### Validation
|
|
1305
|
-
|
|
1306
|
-
- Required Chrome proves invalid and valid login, reload restoration, direct
|
|
1307
|
-
anonymous and rejected entry, member/admin UI, server 401/403 responses,
|
|
1308
|
-
token clearing, and logout.
|
|
1309
|
-
- Seven fresh Chrome profiles record a 1.4 ms navigation median with a 1.2-1.5
|
|
1310
|
-
ms range. The range overlaps `0.12.1`, so no latency change is claimed.
|
|
1311
|
-
- The full suite, package smoke, registry metadata, and fresh installation are
|
|
1312
|
-
release gates.
|
|
1313
|
-
|
|
1314
|
-
### Limits
|
|
1315
|
-
|
|
1316
|
-
Client conditional rendering only controls presentation. Applications and
|
|
1317
|
-
deployment hosts remain responsible for authorizing protected data and actions.
|
|
1318
|
-
|
|
1319
|
-
### Upgrade
|
|
1320
|
-
|
|
1321
|
-
```sh
|
|
1322
|
-
npm install @kudzujs/core@^0.12.2
|
|
1323
|
-
```
|
|
1324
|
-
|
|
1325
|
-
## 0.12.1 - Shared Layout, History, Focus, And Scroll
|
|
1326
|
-
|
|
1327
|
-
Kudzu 0.12.1 completes the accepted same-document project route group with
|
|
1328
|
-
explicit history, focus, announcement, and scroll behavior.
|
|
1329
|
-
|
|
1330
|
-
### Changed in 0.12.1
|
|
1331
|
-
|
|
1332
|
-
- Fixed non-hash enhanced navigation so the existing heading/main focus
|
|
1333
|
-
fallback runs instead of treating an empty hash as a target.
|
|
1334
|
-
- Proved push, back, and forward navigation with retained layout state and
|
|
1335
|
-
freshly recreated route state.
|
|
1336
|
-
- Added route titles, a native hash anchor, and an intrinsic hash destination to
|
|
1337
|
-
the maintained project application.
|
|
1338
|
-
- Proved polite navigation announcements, hash scrolling, top scrolling, and
|
|
1339
|
-
browser-native links outside the configured route group.
|
|
1340
|
-
- Updated `create-kudzu@0.1.114` to generate projects on
|
|
1341
|
-
`@kudzujs/core@^0.12.1`.
|
|
1342
|
-
|
|
1343
|
-
### Output Evidence
|
|
1344
|
-
|
|
1345
|
-
- The application emits 36 files, 106,096 raw / 38,201 aggregate gzip bytes,
|
|
1346
|
-
and deploy digest
|
|
1347
|
-
`4f1ce541af0794fcb17458ad37db7b32beb434f3a83cb7f949f13b3e4536fe1c`.
|
|
1348
|
-
- The maintained enhanced session uses 16 JavaScript files totaling 58,974 raw
|
|
1349
|
-
/ 22,129 aggregate gzip bytes, 4 raw / 5 gzip bytes above `0.12.0`.
|
|
1350
|
-
- `/help` remains complete HTML with 0 B JavaScript.
|
|
1351
|
-
- No semantic primitive, compiler pass, core compiler line, runtime concept,
|
|
1352
|
-
public API, or browser route registry was added.
|
|
1353
|
-
|
|
1354
|
-
### Validation
|
|
1355
|
-
|
|
1356
|
-
- Required Chrome proves focused anchor activation, back/forward, layout
|
|
1357
|
-
retention, route cleanup/reset, title/live updates, hash/heading focus, and
|
|
1358
|
-
hash/top scroll behavior.
|
|
1359
|
-
- Seven fresh Chrome profiles record a 1.3 ms navigation median with a 1.3-1.5
|
|
1360
|
-
ms range. The range overlaps `0.12.0`, so no latency change is claimed.
|
|
1361
|
-
- The full suite, package smoke, registry metadata, and fresh installation are
|
|
1362
|
-
release gates.
|
|
1363
|
-
|
|
1364
|
-
### Limits
|
|
1365
|
-
|
|
1366
|
-
Enhanced navigation remains explicit and route-group scoped. Routes outside the
|
|
1367
|
-
group use browser-native document navigation.
|
|
1368
|
-
|
|
1369
|
-
### Upgrade
|
|
1370
|
-
|
|
1371
|
-
```sh
|
|
1372
|
-
npm install @kudzujs/core@^0.12.1
|
|
1373
|
-
```
|
|
1374
|
-
|
|
1375
|
-
## 0.12.0 - Project Route Shell And Runtime Parameters
|
|
1376
|
-
|
|
1377
|
-
Kudzu 0.12.0 opens the routing and application-lifetime train with directly
|
|
1378
|
-
addressable project and issue routes.
|
|
1379
|
-
|
|
1380
|
-
### Changed in 0.12.0
|
|
1381
|
-
|
|
1382
|
-
- Added bracket project and nested issue pages using supported React Router
|
|
1383
|
-
`useParams()` migration syntax.
|
|
1384
|
-
- Emitted complete fallback HTML and pathname parameter ESM for both routes.
|
|
1385
|
-
- Preserved native project-to-issue links without an SPA route registry.
|
|
1386
|
-
- Emitted ordered host rewrite records while retaining exact-file precedence.
|
|
1387
|
-
- Updated `create-kudzu@0.1.113` to generate projects on
|
|
1388
|
-
`@kudzujs/core@^0.12.0`.
|
|
1389
|
-
|
|
1390
|
-
### Output Evidence
|
|
1391
|
-
|
|
1392
|
-
- The application emits 36 files, 105,577 raw / 38,067 aggregate gzip bytes,
|
|
1393
|
-
and deploy digest
|
|
1394
|
-
`6a6c5985cf2a7e9649b0bbd70506357051dac995a74225b0022c5f1ecedaf2b8`.
|
|
1395
|
-
- The standalone project route uses 17,905 raw / 8,455 aggregate gzip
|
|
1396
|
-
JavaScript bytes; the issue route uses 18,002 raw / 8,474 aggregate gzip.
|
|
1397
|
-
- The maintained enhanced session remains byte-identical at 58,970 raw /
|
|
1398
|
-
22,124 aggregate gzip bytes, and `/help` remains 0 B JavaScript.
|
|
1399
|
-
- No semantic primitive, compiler pass, production compiler line, runtime
|
|
1400
|
-
concept, server, or browser route registry was added.
|
|
1401
|
-
|
|
1402
|
-
### Validation
|
|
1403
|
-
|
|
1404
|
-
- Required Chrome proves direct project and issue entry plus issue reload.
|
|
1405
|
-
- The parameter module rejects invalid encoded path segments before mounting.
|
|
1406
|
-
- The full suite, package smoke, registry metadata, and fresh installation are
|
|
1407
|
-
release gates.
|
|
1408
|
-
|
|
1409
|
-
### Limits
|
|
1410
|
-
|
|
1411
|
-
The deployment host must install the generated runtime rewrites. Exact emitted
|
|
1412
|
-
files must be checked before those fallbacks.
|
|
1413
|
-
|
|
1414
|
-
### Upgrade
|
|
1415
|
-
|
|
1416
|
-
```sh
|
|
1417
|
-
npm install @kudzujs/core@^0.12.0
|
|
1418
|
-
```
|
|
1419
|
-
|
|
1420
|
-
## 0.11.4 - Pagination, Refresh, And Polling Policy
|
|
1421
|
-
|
|
1422
|
-
Kudzu 0.11.4 completes the `0.11.x` server-data train with bounded URL-owned
|
|
1423
|
-
pagination and application-owned refresh policy.
|
|
1424
|
-
|
|
1425
|
-
### Changed in 0.11.4
|
|
1426
|
-
|
|
1427
|
-
- Synchronized project page/filter values with URL query signals and browser
|
|
1428
|
-
back navigation.
|
|
1429
|
-
- Proved explicit refresh and exact list request counts without a query cache.
|
|
1430
|
-
- Added optional visibility-aware polling with interval/listener cleanup.
|
|
1431
|
-
- Bounded every server response to two retained rows.
|
|
1432
|
-
- Updated `create-kudzu@0.1.112` to generate projects on
|
|
1433
|
-
`@kudzujs/core@^0.11.4`.
|
|
1434
|
-
|
|
1435
|
-
### Output Evidence
|
|
1436
|
-
|
|
1437
|
-
- The application emits 20 files, 77,263 raw / 26,156 aggregate gzip bytes, and
|
|
1438
|
-
deploy digest
|
|
1439
|
-
`a3864a5155d658e86378fce80de94e082ef0894c5db5f5793d91b4de7f359b46`.
|
|
1440
|
-
- The list/detail session uses 16 JavaScript files totaling 58,970 raw / 22,124
|
|
1441
|
-
aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
1442
|
-
- Twenty-one fresh Chrome profiles record a 1.3 ms navigation median and
|
|
1443
|
-
1.2/1.6 ms range.
|
|
1444
|
-
- No semantic primitive, compiler pass, production compiler line, runtime
|
|
1445
|
-
concept, cache, retained result store, or scheduler was added.
|
|
1446
|
-
|
|
1447
|
-
### Validation
|
|
1448
|
-
|
|
1449
|
-
- Required Chrome proves query push/back, bounded results, exact requests,
|
|
1450
|
-
refresh, hidden polling suppression, visible refresh, and cleanup.
|
|
1451
|
-
- The full suite, package smoke, registry metadata, and fresh installation are
|
|
1452
|
-
release gates.
|
|
1453
|
-
|
|
1454
|
-
### Limits
|
|
1455
|
-
|
|
1456
|
-
Polling remains authored route policy. Kudzu does not ship a universal
|
|
1457
|
-
scheduler, request registry, invalidation graph, or retained query cache.
|
|
1458
|
-
|
|
1459
|
-
### Upgrade
|
|
1460
|
-
|
|
1461
|
-
```sh
|
|
1462
|
-
npm install @kudzujs/core@^0.11.4
|
|
1463
|
-
```
|
|
1464
|
-
|
|
1465
|
-
## 0.11.3 - Optimistic Mutation And Rollback
|
|
1466
|
-
|
|
1467
|
-
Kudzu 0.11.3 proves optimistic server mutation with ordinary shared state and
|
|
1468
|
-
one owned async handler rather than a transaction runtime.
|
|
1469
|
-
|
|
1470
|
-
### Changed in 0.11.3
|
|
1471
|
-
|
|
1472
|
-
- Added immediate optimistic project name/revision updates visible from list and
|
|
1473
|
-
detail routes.
|
|
1474
|
-
- Disabled duplicate submission after the synchronous-turn optimistic commit.
|
|
1475
|
-
- Restored the exact prior state after an HTTP 500 and exposed an accessible
|
|
1476
|
-
error.
|
|
1477
|
-
- Proved retry success, retained keyed row identity, enhanced navigation, and
|
|
1478
|
-
server restoration after document reload.
|
|
1479
|
-
- Updated `create-kudzu@0.1.111` to generate projects on
|
|
1480
|
-
`@kudzujs/core@^0.11.3`.
|
|
1481
|
-
|
|
1482
|
-
### Output Evidence
|
|
1483
|
-
|
|
1484
|
-
- The application emits 19 files, 73,202 raw / 25,057 aggregate gzip bytes, and
|
|
1485
|
-
deploy digest
|
|
1486
|
-
`40c68fef4eeba5ea4c1a92e9a8003b74e6a45b7a10671ee2f3e4952010117b26`.
|
|
1487
|
-
- The list/detail session uses 15 unique JavaScript files totaling 56,318 raw /
|
|
1488
|
-
21,211 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
1489
|
-
- Twenty-one fresh Chrome profiles record a 0.8 ms navigation median and
|
|
1490
|
-
0.7/1.0 ms range.
|
|
1491
|
-
- No semantic primitive, compiler pass, production compiler line, runtime
|
|
1492
|
-
concept, transaction primitive, cache, or scheduler was added.
|
|
1493
|
-
|
|
1494
|
-
### Validation
|
|
1495
|
-
|
|
1496
|
-
- Required Chrome proves optimistic state, one accepted attempt after failure,
|
|
1497
|
-
exact rollback, retry, identity, navigation, and reload.
|
|
1498
|
-
- The full suite, package smoke, registry metadata, and fresh installation are
|
|
1499
|
-
release gates.
|
|
1500
|
-
|
|
1501
|
-
### Limits
|
|
1502
|
-
|
|
1503
|
-
The authored handler owns one mutation and snapshot. Generic transactions and
|
|
1504
|
-
same-turn programmatic reentrancy are not application semantics.
|
|
1505
|
-
|
|
1506
|
-
### Upgrade
|
|
1507
|
-
|
|
1508
|
-
```sh
|
|
1509
|
-
npm install @kudzujs/core@^0.11.3
|
|
1510
|
-
```
|
|
1511
|
-
|
|
1512
|
-
## 0.11.2 - Request Coordination Evidence
|
|
1513
|
-
|
|
1514
|
-
Kudzu 0.11.2 reviews three unrelated server-data fixtures and closes shared
|
|
1515
|
-
request coordination without adding a new semantic primitive.
|
|
1516
|
-
|
|
1517
|
-
### Changed in 0.11.2
|
|
1518
|
-
|
|
1519
|
-
- Reviewed the project application, TanStack Query-shaped product loading, and
|
|
1520
|
-
Apache Answer/SWR-shaped question loading.
|
|
1521
|
-
- Machine-recorded that all three use one explicit owner, ordinary state, one
|
|
1522
|
-
owned fetch effect, dependency invalidation, cleanup, and static exclusion.
|
|
1523
|
-
- Recorded no repeated same-key independent owners, subscriber lifetime,
|
|
1524
|
-
mutation invalidation, retained query result, or cache-bound requirement.
|
|
1525
|
-
- Updated `create-kudzu@0.1.110` to generate projects on
|
|
1526
|
-
`@kudzujs/core@^0.11.2`.
|
|
1527
|
-
|
|
1528
|
-
### Output Evidence
|
|
1529
|
-
|
|
1530
|
-
- The project application remains byte-identical at 20 files, 69,501 raw /
|
|
1531
|
-
24,649 aggregate gzip bytes, and deploy digest
|
|
1532
|
-
`bc6335131b7867da2857621211919fad43ebfb9414aac711c45f0c8ed3803022`.
|
|
1533
|
-
- The list/detail session remains 55,736 raw / 21,208 aggregate gzip JavaScript
|
|
1534
|
-
bytes; `/help` remains 0 B JavaScript.
|
|
1535
|
-
- No semantic primitive, compiler pass, production compiler line, runtime
|
|
1536
|
-
concept, request registry, subscriber set, invalidation graph, cache, or
|
|
1537
|
-
browser byte was added.
|
|
1538
|
-
|
|
1539
|
-
### Validation
|
|
1540
|
-
|
|
1541
|
-
- Existing required-Chrome journeys remain the executable evidence for all
|
|
1542
|
-
three reviewed fixtures.
|
|
1543
|
-
- The full suite, package smoke, registry metadata, and fresh installation are
|
|
1544
|
-
release gates.
|
|
1545
|
-
|
|
1546
|
-
### Limits
|
|
1547
|
-
|
|
1548
|
-
Automatic same-key deduplication and retained query data remain unsupported.
|
|
1549
|
-
They require repeated executable pressure from independent owners before a
|
|
1550
|
-
shared primitive can be reconsidered.
|
|
1551
|
-
|
|
1552
|
-
### Upgrade
|
|
1553
|
-
|
|
1554
|
-
```sh
|
|
1555
|
-
npm install @kudzujs/core@^0.11.2
|
|
1556
|
-
```
|
|
1557
|
-
|
|
1558
|
-
## 0.11.1 - List/Detail Data Consistency
|
|
1559
|
-
|
|
1560
|
-
Kudzu 0.11.1 proves that ordinary layout-owned state and one native fetch effect
|
|
1561
|
-
keep list and detail routes consistent without a query framework.
|
|
1562
|
-
|
|
1563
|
-
### Changed in 0.11.1
|
|
1564
|
-
|
|
1565
|
-
- Added one server-backed project record owned by the retained application
|
|
1566
|
-
layout and consumed by both project routes.
|
|
1567
|
-
- Added a detail mutation whose confirmed result is immediately observed by the
|
|
1568
|
-
list without another read.
|
|
1569
|
-
- Counted exactly one initial GET, one mutation POST, no navigation GETs, and one
|
|
1570
|
-
document-reload GET.
|
|
1571
|
-
- Recorded document-lifetime retention and the absence of automatic
|
|
1572
|
-
deduplication, invalidation, subscribers, and retained query caches.
|
|
1573
|
-
- Updated `create-kudzu@0.1.109` to generate projects on
|
|
1574
|
-
`@kudzujs/core@^0.11.1`.
|
|
1575
|
-
|
|
1576
|
-
### Output Evidence
|
|
1577
|
-
|
|
1578
|
-
- The application fixture emits 20 files, 69,501 raw / 24,649 aggregate gzip
|
|
1579
|
-
bytes, and deploy digest
|
|
1580
|
-
`bc6335131b7867da2857621211919fad43ebfb9414aac711c45f0c8ed3803022`.
|
|
1581
|
-
- The list/detail session uses 16 unique JavaScript files totaling 55,736 raw /
|
|
1582
|
-
21,208 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
1583
|
-
- Twenty-one fresh Chrome profiles record a 0.9 ms navigation median and
|
|
1584
|
-
0.7/1.2 ms range after both initial fetches complete.
|
|
1585
|
-
- No semantic primitive, compiler pass, production compiler line, runtime
|
|
1586
|
-
concept, request registry, or query runtime was added.
|
|
1587
|
-
|
|
1588
|
-
### Validation
|
|
1589
|
-
|
|
1590
|
-
- Required Chrome proves mutation visibility, exact request counts, retained
|
|
1591
|
-
layout identity, route release, and server restoration after reload.
|
|
1592
|
-
- The full suite, package smoke, registry metadata, and fresh installation are
|
|
1593
|
-
release gates.
|
|
1594
|
-
|
|
1595
|
-
### Limits
|
|
1596
|
-
|
|
1597
|
-
Shared data lasts for one document and retained layout owner. Independently
|
|
1598
|
-
authored fetch owners are not deduplicated; coordinated requests remain blocked
|
|
1599
|
-
until unrelated fixtures require the same missing contract.
|
|
1600
|
-
|
|
1601
|
-
### Upgrade
|
|
1602
|
-
|
|
1603
|
-
```sh
|
|
1604
|
-
npm install @kudzujs/core@^0.11.1
|
|
1605
|
-
```
|
|
1606
|
-
|
|
1607
|
-
## 0.11.0 - Owned Fetch Lifecycle
|
|
1608
|
-
|
|
1609
|
-
Kudzu 0.11.0 proves browser-only server data as application-owned state, one
|
|
1610
|
-
native fetch effect, and exact route lifetime rather than a query framework.
|
|
1611
|
-
|
|
1612
|
-
### Changed in 0.11.0
|
|
1613
|
-
|
|
1614
|
-
- Added accessible loading, success, and HTTP error states to the maintained
|
|
1615
|
-
project application.
|
|
1616
|
-
- Added explicit refetch and recovery through one primitive request dependency.
|
|
1617
|
-
- Proved that a delayed prior continuation cannot overwrite newer keyed data.
|
|
1618
|
-
- Added authored `AbortController` cleanup for dependency replacement and route
|
|
1619
|
-
removal, with late route work denied state authority.
|
|
1620
|
-
- Updated `create-kudzu@0.1.108` to generate projects on
|
|
1621
|
-
`@kudzujs/core@^0.11.0`.
|
|
1622
|
-
|
|
1623
|
-
### Output Evidence
|
|
1624
|
-
|
|
1625
|
-
- The application fixture emits 19 files, 67,886 raw / 24,077 aggregate gzip
|
|
1626
|
-
bytes, and deploy digest
|
|
1627
|
-
`9c06d2a5d47b4ea2ae54cebbc0448bf161907691ee37a02a5dae0e7c37779ae4`.
|
|
1628
|
-
- The list/detail session uses 15 unique JavaScript files totaling 54,770 raw /
|
|
1629
|
-
20,763 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
1630
|
-
- Twenty-one fresh Chrome profiles record a 0.8 ms navigation median and
|
|
1631
|
-
0.6/1.3 ms range after fetch completion and persisted workspace setup.
|
|
1632
|
-
- No semantic primitive, compiler pass, production compiler line, runtime
|
|
1633
|
-
concept, cache, Provider, retry scheduler, or query runtime was added.
|
|
1634
|
-
|
|
1635
|
-
### Validation
|
|
1636
|
-
|
|
1637
|
-
- Required Chrome proves loading, stale completion rejection, accessible HTTP
|
|
1638
|
-
failure, recovery, cancellation, and route-removal authority loss.
|
|
1639
|
-
- The full suite, package smoke, registry metadata, and fresh installation are
|
|
1640
|
-
release gates.
|
|
1641
|
-
|
|
1642
|
-
### Limits
|
|
1643
|
-
|
|
1644
|
-
Shared request deduplication, invalidation, optimistic mutation, retries,
|
|
1645
|
-
polling, and retained caches remain later evidence packets.
|
|
1646
|
-
|
|
1647
|
-
### Upgrade
|
|
1648
|
-
|
|
1649
|
-
```sh
|
|
1650
|
-
npm install @kudzujs/core@^0.11.0
|
|
1651
|
-
```
|
|
1652
|
-
|
|
1653
|
-
## 0.10.3 - Application-Owned Persistence
|
|
1654
|
-
|
|
1655
|
-
Kudzu 0.10.3 proves guarded browser persistence as application code composed
|
|
1656
|
-
from ordinary state, effects, and native Web Storage.
|
|
1657
|
-
|
|
1658
|
-
### Changed in 0.10.3
|
|
1659
|
-
|
|
1660
|
-
- Added a versioned workspace restore recipe with deterministic static fallback
|
|
1661
|
-
and exact value/schema/version validation.
|
|
1662
|
-
- Added a readiness guard so dependency persistence cannot overwrite storage
|
|
1663
|
-
before mount restoration completes.
|
|
1664
|
-
- Added application-owned logout clearing and visible state reset in one native
|
|
1665
|
-
handler.
|
|
1666
|
-
- Added required-Chrome cases for valid, absent, malformed, wrong-schema, and
|
|
1667
|
-
wrong-version records, persistence writes, and logout removal.
|
|
1668
|
-
- Updated `create-kudzu@0.1.107` to generate projects on
|
|
1669
|
-
`@kudzujs/core@^0.10.3`.
|
|
1670
|
-
|
|
1671
|
-
### Output Evidence
|
|
1672
|
-
|
|
1673
|
-
- The application fixture emits 19 files, 65,376 raw / 23,471 aggregate gzip
|
|
1674
|
-
bytes, and deploy digest
|
|
1675
|
-
`bb58826876bdf090a85d2c1f8a1edcbbc9abd35d5335eb3d1e7fb1fafe6bed72`.
|
|
1676
|
-
- The list/detail session uses 15 unique JavaScript files totaling 53,562 raw /
|
|
1677
|
-
20,323 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
1678
|
-
- Matched 21-profile navigation medians are 1.9 ms for 0.10.2 and 1.5 ms for
|
|
1679
|
-
0.10.3 with overlapping ranges, so no latency change is claimed.
|
|
1680
|
-
- No semantic primitive, compiler pass, production compiler line, runtime
|
|
1681
|
-
concept, persistence API, store, or storage runtime was added.
|
|
1682
|
-
|
|
1683
|
-
### Validation
|
|
1684
|
-
|
|
1685
|
-
- Required Chrome proves restore, fallback, write, clear, conditional/keyed
|
|
1686
|
-
release and fresh remount, route draft reset, and fresh direct documents.
|
|
1687
|
-
- The full suite, package smoke, registry metadata, and fresh installation are
|
|
1688
|
-
release gates.
|
|
1689
|
-
|
|
1690
|
-
### Limits
|
|
1691
|
-
|
|
1692
|
-
Schema migration chains, expiry, encryption, cross-tab storage events, and
|
|
1693
|
-
server synchronization remain application concerns or later evidence packets.
|
|
1694
|
-
|
|
1695
|
-
### Upgrade
|
|
1696
|
-
|
|
1697
|
-
```sh
|
|
1698
|
-
npm install @kudzujs/core@^0.10.3
|
|
1699
|
-
```
|
|
1700
|
-
|
|
1701
|
-
## 0.10.2 - Shared-layout navigation
|
|
1702
|
-
|
|
1703
|
-
Kudzu 0.10.2 extends the tracked project-management application with explicit
|
|
1704
|
-
list/detail navigation, layout-owned workspace state, and route-owned drafts
|
|
1705
|
-
using the existing navigation and shared-state semantics.
|
|
1706
|
-
|
|
1707
|
-
### Changed in 0.10.2
|
|
1708
|
-
|
|
1709
|
-
- Added one Context-backed application layout that lowers through existing
|
|
1710
|
-
`SharedStateIR` and persists workspace selection across list/detail routes.
|
|
1711
|
-
- Added an exact Alpha detail route whose draft state releases on navigation and
|
|
1712
|
-
initializes fresh on revisit and direct document load.
|
|
1713
|
-
- Added a maintained seven-profile list-to-detail navigation benchmark with
|
|
1714
|
-
session JavaScript and lifetime metadata.
|
|
1715
|
-
- Kept `/help` and `/login` outside the navigation group; `/help` remains a
|
|
1716
|
-
complete zero-JavaScript native-navigation target.
|
|
1717
|
-
- Updated `create-kudzu@0.1.106` to generate projects on
|
|
1718
|
-
`@kudzujs/core@^0.10.2`.
|
|
1719
|
-
|
|
1720
|
-
### Output Evidence
|
|
1721
|
-
|
|
1722
|
-
- The application fixture emits 14 files, 57,293 raw / 19,985 aggregate gzip
|
|
1723
|
-
bytes, and deploy digest
|
|
1724
|
-
`1c867ee7119f7eb23b935c4506c2a46639acb75c13f0916b29c255421b0d123d`.
|
|
1725
|
-
- The list/detail session uses 10 unique JavaScript files totaling 46,418 raw /
|
|
1726
|
-
17,045 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
1727
|
-
- Seven fresh Chrome profiles record list-to-detail completion at a 2.3 ms
|
|
1728
|
-
median, with 1.3/6.5 ms minimum/maximum.
|
|
1729
|
-
- No semantic primitive, compiler pass, production compiler line, runtime
|
|
1730
|
-
concept, store, or SPA router was added.
|
|
1731
|
-
|
|
1732
|
-
### Validation
|
|
1733
|
-
|
|
1734
|
-
- Required Chrome proves layout identity and workspace persistence in both
|
|
1735
|
-
directions, route DOM release, fresh draft state, and direct-load reset.
|
|
1736
|
-
- The full suite, required-Chrome application journey, package smoke, registry
|
|
1737
|
-
metadata, and fresh installation are release gates.
|
|
1738
|
-
|
|
1739
|
-
### Limits
|
|
1740
|
-
|
|
1741
|
-
Navigation remains explicit and group-scoped with complete-document fallback.
|
|
1742
|
-
This release does not add a universal SPA router, persistence, authentication,
|
|
1743
|
-
server data, or cross-group shared state.
|
|
1744
|
-
|
|
1745
|
-
### Upgrade
|
|
1746
|
-
|
|
1747
|
-
```sh
|
|
1748
|
-
npm install @kudzujs/core@^0.10.2
|
|
1749
|
-
```
|
|
1750
|
-
|
|
1751
|
-
## 0.10.1 - Application state scale
|
|
1752
|
-
|
|
1753
|
-
Kudzu 0.10.1 extends the tracked project-management journey across ordinary
|
|
1754
|
-
primitive, object, array, derived, conditional, nested keyed, and row-local
|
|
1755
|
-
state while retaining static-first output and existing browser capabilities.
|
|
1756
|
-
|
|
1757
|
-
### Changed in 0.10.1
|
|
1758
|
-
|
|
1759
|
-
- Added deterministic workspace summary replacement, project filtering, saved
|
|
1760
|
-
filters, nested issue updates, conditional summary ownership, and keyed row
|
|
1761
|
-
state release/remount to the greenfield application contract.
|
|
1762
|
-
- Added a maintained 1/8/32-state Chrome commit benchmark with exact `v0.10.0`
|
|
1763
|
-
deploy comparison and runtime metadata.
|
|
1764
|
-
- Kept direct object-field nested-list replacement outside the accepted boundary
|
|
1765
|
-
after the isolated experiment failed browser replacement.
|
|
1766
|
-
- Updated `create-kudzu@0.1.105` to generate projects on
|
|
1767
|
-
`@kudzujs/core@^0.10.1`.
|
|
1768
|
-
|
|
1769
|
-
### Output Evidence
|
|
1770
|
-
|
|
1771
|
-
- The application fixture emits 12 files, 47,546 raw / 16,285 aggregate gzip
|
|
1772
|
-
bytes, and deploy digest
|
|
1773
|
-
`d50c9ff6dccba338559dd9e9141c4607ec62da30385658e617a86f7af3f52e0f`.
|
|
1774
|
-
- `/app/projects` emits 39,178 raw / 14,143 aggregate gzip JavaScript bytes;
|
|
1775
|
-
`/help` remains 0 B JavaScript.
|
|
1776
|
-
- The generated scale deploy is byte-identical to `v0.10.0`; 1/8/32-state
|
|
1777
|
-
commit medians are 0.5/0.6/0.9 ms across seven fresh Chrome processes.
|
|
1778
|
-
- No semantic primitive, compiler pass, browser runtime concept, normalized
|
|
1779
|
-
state, or generic rerender path was added.
|
|
1780
|
-
|
|
1781
|
-
### Validation
|
|
1782
|
-
|
|
1783
|
-
- Required Chrome verifies derived updates, nested keyed identity, conditional
|
|
1784
|
-
release/remount, keyed row state reset, and zero unrelated DOM mutations.
|
|
1785
|
-
- `npm run check`, the complete test suite, required-Chrome application test,
|
|
1786
|
-
package smoke, registry metadata, and fresh installation are release gates.
|
|
1787
|
-
|
|
1788
|
-
### Limits
|
|
1789
|
-
|
|
1790
|
-
This release does not support direct object-field nested-list replacement,
|
|
1791
|
-
arbitrary object mutation, normalized state, shared layout state, persistence,
|
|
1792
|
-
authentication, or server data.
|
|
1793
|
-
|
|
1794
|
-
### Upgrade
|
|
1795
|
-
|
|
1796
|
-
```sh
|
|
1797
|
-
npm install @kudzujs/core@^0.10.1
|
|
1798
|
-
```
|
|
1799
|
-
|
|
1800
|
-
## 0.10.0 - Application capability baseline
|
|
1801
|
-
|
|
1802
|
-
Kudzu 0.10.0 begins the application capability release train with a durable
|
|
1803
|
-
greenfield project-management contract. Later state, data, routing, form, list,
|
|
1804
|
-
overlay, external UI, lifecycle, lazy-loading, migration, and AI work must extend
|
|
1805
|
-
this application or another explicit evidence packet rather than claim success
|
|
1806
|
-
from isolated build output.
|
|
1807
|
-
|
|
1808
|
-
### Changed in 0.10.0
|
|
1809
|
-
|
|
1810
|
-
- Added tracked `/login`, `/app/projects`, and `/help` greenfield application
|
|
1811
|
-
routes with a machine-readable capability contract.
|
|
1812
|
-
- Reused the existing primitive state command and direct text output without a
|
|
1813
|
-
compiler pass, Handler ESM, new semantic primitive, or new runtime concept.
|
|
1814
|
-
- Added a dedicated browser journey for the project-state interaction and a
|
|
1815
|
-
static help control that emits no JavaScript.
|
|
1816
|
-
- Established the capability-by-minor and evidence-packet-by-patch release plan
|
|
1817
|
-
through the `1.0.0` application and AI delivery gate.
|
|
1818
|
-
- Updated `create-kudzu@0.1.104` to generate projects on
|
|
1819
|
-
`@kudzujs/core@^0.10.0`.
|
|
1820
|
-
|
|
1821
|
-
### Output Evidence
|
|
1822
|
-
|
|
1823
|
-
- The greenfield fixture emits 4 deploy files, 1,970 raw bytes, 1,265 aggregate
|
|
1824
|
-
gzip bytes, and deploy digest
|
|
1825
|
-
`94ce7d01cac2e80823a36279294015d2f22328acaed571abb9996f8ca6171121`.
|
|
1826
|
-
- `/app/projects` uses the existing 768 raw / 441 aggregate gzip byte command
|
|
1827
|
-
runtime graph.
|
|
1828
|
-
- `/help` emits complete HTML and 0 B JavaScript.
|
|
1829
|
-
- Production semantic primitives, compiler passes, compiler LOC, and runtime
|
|
1830
|
-
concepts are unchanged.
|
|
1831
|
-
|
|
1832
|
-
### Validation
|
|
1833
|
-
|
|
1834
|
-
- The focused greenfield browser contract passes in Chrome.
|
|
1835
|
-
- `npm run check`, all 273 non-browser tests, all 273 required-Chrome tests, and
|
|
1836
|
-
`npm run test:package` pass on the release worktree.
|
|
1837
|
-
- No performance comparison is claimed because production compiler and runtime
|
|
1838
|
-
sources are unchanged; the exact fixture output baseline is executable.
|
|
1839
|
-
|
|
1840
|
-
### Limits
|
|
1841
|
-
|
|
1842
|
-
This release does not claim project CRUD, authentication, server data, shared
|
|
1843
|
-
layout state, or a complete large application. Those remain ordered capability
|
|
1844
|
-
packets beginning with `0.10.1`.
|
|
1845
|
-
|
|
1846
|
-
### Upgrade
|
|
1847
|
-
|
|
1848
|
-
```sh
|
|
1849
|
-
npm install @kudzujs/core@^0.10.0
|
|
1850
|
-
```
|
|
1851
|
-
|
|
1852
|
-
## 0.9.3 - Large-app migration slices
|
|
1853
|
-
|
|
1854
|
-
Kudzu 0.9.3 adds evidence-backed compiler and source-migration paths derived
|
|
1855
|
-
from Apache Answer while preserving static-first output and fail-closed package
|
|
1856
|
-
boundaries.
|
|
1857
|
-
|
|
1858
|
-
### Changed in 0.9.3
|
|
1859
|
-
|
|
1860
|
-
- Exact static React Router `useMatch()` folds from the build-known route with
|
|
1861
|
-
zero browser JavaScript.
|
|
1862
|
-
- React Router query reads support numeric pagination and static imported-string
|
|
1863
|
-
fallbacks, including reactive effect dependencies and read-only `popstate`.
|
|
1864
|
-
- React Bootstrap `Row` and `Col` lower to native grid markup, including numeric
|
|
1865
|
-
literal breakpoint spans from 1 through 12.
|
|
1866
|
-
- Owned native fetch effects compose URL dependencies, stale-response isolation,
|
|
1867
|
-
loading/error/data state, and nested keyed results without SWR or axios.
|
|
1868
|
-
- Reduced shared-authentication build intake and route-shell, authoring, and
|
|
1869
|
-
admin fixtures prove package-neutral paths with static sibling exclusion.
|
|
1870
|
-
- Runtime-resource `react-i18next` receives an actionable locale-ownership
|
|
1871
|
-
diagnostic rather than silently folding English or shipping i18next.
|
|
1872
|
-
|
|
1873
|
-
### Validation
|
|
1874
|
-
|
|
1875
|
-
- Apache Answer-derived positive and negative fixtures cover router, query,
|
|
1876
|
-
layout, data, authentication, route-shell, authoring, and admin boundaries.
|
|
1877
|
-
- Static layout/legal/public siblings remain JavaScript-free.
|
|
1878
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass on the release
|
|
1879
|
-
worktree.
|
|
1880
|
-
|
|
1881
|
-
### Limits
|
|
1882
|
-
|
|
1883
|
-
This release does not claim a complete Apache Answer migration. Runtime i18n,
|
|
1884
|
-
rich CodeMirror ownership, upload progress, broader React Bootstrap compounds,
|
|
1885
|
-
plugins, AI screens, and all-route acceptance remain separate evidence gates.
|
|
1886
|
-
|
|
1887
|
-
### Upgrade
|
|
1888
|
-
|
|
1889
|
-
```sh
|
|
1890
|
-
npm install @kudzujs/core@^0.9.3
|
|
1891
|
-
```
|
|
1892
|
-
|
|
1893
|
-
## 0.9.2 - Legacy CSS safety
|
|
1894
|
-
|
|
1895
|
-
Kudzu 0.9.2 prevents pre-0.8.53 applications from silently producing an
|
|
1896
|
-
unstyled deploy after upgrading to route-aware CSS ownership.
|
|
1897
|
-
|
|
1898
|
-
### Changed in 0.9.2
|
|
1899
|
-
|
|
1900
|
-
- When no route imports CSS and `kudzu.config styles` is empty, source CSS is
|
|
1901
|
-
linked globally in deterministic path order using the legacy behavior.
|
|
1902
|
-
- The build prints an actionable warning directing applications to explicit
|
|
1903
|
-
source imports or global configuration.
|
|
1904
|
-
- Projects with any explicit CSS ownership retain unchanged route-aware output;
|
|
1905
|
-
the fallback adds no browser JavaScript or explicit-path build work.
|
|
1906
|
-
|
|
1907
|
-
### Validation
|
|
1908
|
-
|
|
1909
|
-
- A two-route legacy fixture emits both unimported styles on both routes in path
|
|
1910
|
-
order and keeps both routes JavaScript-free.
|
|
1911
|
-
- Configured global styles and explicit source-style tests retain their existing
|
|
1912
|
-
output.
|
|
1913
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with 254 tests.
|
|
1914
|
-
|
|
1915
|
-
### Upgrade
|
|
1916
|
-
|
|
1917
|
-
```sh
|
|
1918
|
-
npm install @kudzujs/core@^0.9.2
|
|
1919
|
-
```
|
|
1920
|
-
|
|
1921
|
-
## 0.9.1 - Positional primitive lists
|
|
1922
|
-
|
|
1923
|
-
Kudzu 0.9.1 allows JSON-safe primitive values in lists keyed by their authored
|
|
1924
|
-
position while retaining the plain-object requirement for property-keyed rows.
|
|
1925
|
-
|
|
1926
|
-
### Changed in 0.9.1
|
|
1927
|
-
|
|
1928
|
-
- Build and browser list validation now accept primitive positional rows.
|
|
1929
|
-
- Compact object-row serialization ignores primitive arrays instead of treating
|
|
1930
|
-
their values as object records.
|
|
1931
|
-
- Lupin-derived fixtures prove realtime rooms, lobby and private-room entry,
|
|
1932
|
-
stopwatch ownership, chat and spectator replacement, Canvas/RAF input,
|
|
1933
|
-
IME handling, panic shortcuts, and exact cleanup without a game runtime.
|
|
1934
|
-
|
|
1935
|
-
### Validation
|
|
1936
|
-
|
|
1937
|
-
- Static sibling routes remain complete HTML with zero JavaScript.
|
|
1938
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with 253 tests.
|
|
1939
|
-
|
|
1940
|
-
### Upgrade
|
|
1941
|
-
|
|
1942
|
-
```sh
|
|
1943
|
-
npm install @kudzujs/core@^0.9.1
|
|
1944
|
-
```
|
|
1945
|
-
|
|
1946
|
-
## 0.9.0 - Semantic compression
|
|
1947
|
-
|
|
1948
|
-
Kudzu 0.9.0 consolidates evidence-backed React migration shapes onto the existing signal, handler, effect, component-ownership, and keyed-list semantics without adding React, hydration, a VDOM, or a retained browser component tree.
|
|
1949
|
-
|
|
1950
|
-
### Changed in 0.9.0
|
|
1951
|
-
|
|
1952
|
-
- Relative calculated result fields, Context and reduced Zustand actions, object-property component consumers, custom hooks, refs, and multi-boundary callbacks specialize through existing package-neutral IR and ownership.
|
|
1953
|
-
- Keyed row state, effects, refs, conditions, nested collections, SVG, and reactive selectors preserve identity and cleanup with route-specific capabilities only.
|
|
1954
|
-
- One-shot production builds intern repeated route descriptors, stream plan evidence, release standalone plans, and stage rendered HTML until runtime families are known.
|
|
1955
|
-
- `create-kudzu@0.1.103` generates projects on the `@kudzujs/core@^0.9.0` line.
|
|
1956
|
-
|
|
1957
|
-
### Performance
|
|
1958
|
-
|
|
1959
|
-
- The frozen 21-profile C2 matrix passes all 19 behavior and ownership checks; row filter is faster than Vue, while row restore and search restore are within 3.5% and 1.8% of their nearest comparators.
|
|
1960
|
-
- At 10,000 products Kudzu emits 10,011 accepted pages with cold/warm medians of 22,614.0 / 22,150.6 ms and 542,484 KiB peak RSS, versus Astro's 23,198.1 / 23,438.2 ms and 612,412 KiB.
|
|
1961
|
-
- Static C1 routes ship zero JavaScript, and C5 Worker replacement/disposal finishes with balanced ownership and zero stale mutations or active handles.
|
|
1962
|
-
|
|
1963
|
-
### Validation
|
|
1964
|
-
|
|
1965
|
-
- `npm run check` and all 246 required-Chrome tests pass.
|
|
1966
|
-
- Fresh-install package smoke and maintained production benchmarks pass.
|
|
1967
|
-
- The 10,000-product deploy remains 96,379,876 B with SHA-256 `811234693329ebd61eeceb6cd05e5d52473e5c81972a820253bf1aea664a0910`.
|
|
1968
|
-
|
|
1969
|
-
### Upgrade
|
|
1970
|
-
|
|
1971
|
-
```sh
|
|
1972
|
-
npm install @kudzujs/core@^0.9.0
|
|
1973
|
-
```
|
|
1974
|
-
|
|
1975
|
-
## 0.8.62 - Outside-click hook ownership
|
|
1976
|
-
|
|
1977
|
-
Kudzu 0.8.62 compiles the ClimateCompatibleGrowth `createRef()` and parameterized outside-click custom-hook shape through existing DOM-ref, effect-capture, and cleanup ownership.
|
|
1978
|
-
|
|
1979
|
-
### Changed in 0.8.62
|
|
1980
|
-
|
|
1981
|
-
- A direct component `const ref = createRef<T>()` React migration input lowers to Kudzu's existing `useRef(null)` DOM ownership.
|
|
1982
|
-
- A relative outside-click hook may accept that direct ref and one inline direct literal setter callback.
|
|
1983
|
-
- The compiler specializes the callback into a serializable setter plus literal and retains only the ref, setter, and literal in existing effect scope.
|
|
1984
|
-
|
|
1985
|
-
### Boundaries
|
|
1986
|
-
|
|
1987
|
-
- The hook must own one static `document` `mousedown` listener, test `ref.current.contains(event.target)`, and remove the same listener in cleanup.
|
|
1988
|
-
- Ref aliases, callback aliases or captures, dynamic event names, multiple refs/listeners, and mismatched cleanup remain rejected.
|
|
1989
|
-
- No outside-click, listener, ref, or callback runtime is added.
|
|
1990
|
-
|
|
1991
|
-
### Validation
|
|
1992
|
-
|
|
1993
|
-
- A fixture reduced from ClimateCompatibleGrowth's MIT-licensed `useOutsideClickAlerter.ts` preserves its parameterized source shape.
|
|
1994
|
-
- Browser coverage proves inside-click retention, outside-click closure, exact listener cleanup on conditional removal, and fresh remount ownership.
|
|
1995
|
-
- A static sibling remains zero JavaScript and mismatched cleanup remains fail-closed.
|
|
1996
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 233 tests and 174 generated pages.
|
|
1997
|
-
|
|
1998
|
-
### Upgrade
|
|
1999
|
-
|
|
2000
|
-
```sh
|
|
2001
|
-
npm install @kudzujs/core@^0.8.62
|
|
2002
|
-
```
|
|
2003
|
-
|
|
2004
|
-
## 0.8.61 - Parameterized debounce hooks
|
|
2005
|
-
|
|
2006
|
-
Kudzu 0.8.61 compiles the common relative `useDebounce(state, literalDelay)` custom-hook shape through existing state and effect ownership.
|
|
2007
|
-
|
|
2008
|
-
### Changed in 0.8.61
|
|
2009
|
-
|
|
2010
|
-
- A named or default relative synchronous hook may accept one direct primitive state value and one numeric literal delay.
|
|
2011
|
-
- The hook may initialize one state from that value, own one timeout dependency effect with exact cleanup, and directly return the debounced state.
|
|
2012
|
-
- The compiler preserves the source signal dependency, treats the literal delay as stable scope, and initializes the debounced signal from the source signal's build value.
|
|
2013
|
-
|
|
2014
|
-
### Boundaries
|
|
2015
|
-
|
|
2016
|
-
- The hook body must be the direct `useState(value)`, `useEffect()`, and returned-state shape proven by the ClimateCompatibleGrowth fixture.
|
|
2017
|
-
- Dynamic delays, non-primitive source state, aliases, additional statements/effects, intervals, and missing timeout cleanup remain rejected.
|
|
2018
|
-
- No debounce/timer runtime, component tree, hydration, or new effect capability is added.
|
|
2019
|
-
|
|
2020
|
-
### Validation
|
|
2021
|
-
|
|
2022
|
-
- A fixture reduced from ClimateCompatibleGrowth's MIT-licensed `useDebouce.ts` preserves its generic parameterized custom-hook source shape.
|
|
2023
|
-
- Browser coverage proves rapid replacement, pending-timeout cleanup on conditional removal, fresh remount state, and latest-value commit.
|
|
2024
|
-
- A static sibling remains zero JavaScript and dynamic delay input fails at its authored call site.
|
|
2025
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 230 tests and 174 generated pages.
|
|
2026
|
-
|
|
2027
|
-
### Upgrade
|
|
2028
|
-
|
|
2029
|
-
```sh
|
|
2030
|
-
npm install @kudzujs/core@^0.8.61
|
|
2031
|
-
```
|
|
2032
|
-
|
|
2033
|
-
## 0.8.60 - Array draft effect sync
|
|
2034
|
-
|
|
2035
|
-
Kudzu 0.8.60 lets a specialized child synchronize direct prop-derived array draft state through the matching parent setter in an ordinary dependency effect.
|
|
2036
|
-
|
|
2037
|
-
### Changed in 0.8.60
|
|
2038
|
-
|
|
2039
|
-
- `useEffect(() => { setSelectedItems(items) }, [items, setSelectedItems])` compiles for the matching direct array prop-draft specialization.
|
|
2040
|
-
- The compiler proves the parent state/setter pair, removes the stable setter dependency, and tracks the child array state through existing `Object.is` effect scheduling.
|
|
2041
|
-
- Parent replacement still does not synchronize the independently owned child draft; the next authored child-state replacement reruns the effect.
|
|
2042
|
-
|
|
2043
|
-
### Boundaries
|
|
2044
|
-
|
|
2045
|
-
- The effect must be top-level, synchronous, inline, and contain exactly one direct setter call with exact `[state, setter]` dependencies.
|
|
2046
|
-
- Setter aliases, composed values, mismatched parent state/setter pairs, cleanup, and additional callback uses remain rejected.
|
|
2047
|
-
- Object and derived array dependencies remain unchanged; no runtime module, EffectIR kind, component tree, or automatic prop synchronization is added.
|
|
2048
|
-
|
|
2049
|
-
### Validation
|
|
2050
|
-
|
|
2051
|
-
- The ClimateCompatibleGrowth-derived dropdown now preserves its authored setter effect shape.
|
|
2052
|
-
- Browser coverage proves initial setup, child replacement commit, independent parent reset, and effect rerun; a static sibling remains zero JavaScript.
|
|
2053
|
-
- Existing effect ownership and object-dependency diagnostics remain covered.
|
|
2054
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 228 tests and 174 generated pages.
|
|
2055
|
-
|
|
2056
|
-
### Upgrade
|
|
2057
|
-
|
|
2058
|
-
```sh
|
|
2059
|
-
npm install @kudzujs/core@^0.8.60
|
|
2060
|
-
```
|
|
2061
|
-
|
|
2062
|
-
## 0.8.59 - Array prop draft state
|
|
2063
|
-
|
|
2064
|
-
Kudzu 0.8.59 lets a specialized child initialize independent local array draft state directly from one parent array-state prop while preserving an authored direct `set*` setter prop.
|
|
2065
|
-
|
|
2066
|
-
### Changed in 0.8.59
|
|
2067
|
-
|
|
2068
|
-
- `const [draft, setDraft] = useState(selectedItems)` compiles when `selectedItems` is one direct prop backed by a parent `useState([...])` literal.
|
|
2069
|
-
- A direct parent setter may enter that prop-draft specialization through an `on*` prop or an authored `set*` prop such as `setSelectedItems`.
|
|
2070
|
-
- Parent and child retain distinct state IDs and independently serialized arrays.
|
|
2071
|
-
- Mounted drafts remain local until the authored handler explicitly commits them to parent state.
|
|
2072
|
-
|
|
2073
|
-
### Boundaries
|
|
2074
|
-
|
|
2075
|
-
- `set*` support is limited to prop-derived state components; unrelated effect setter props retain their existing path.
|
|
2076
|
-
- Additional forwarding remains `on*`-only.
|
|
2077
|
-
- Aliases, property paths, array spreads, composed expressions, indirect callbacks, and automatic prop synchronization remain rejected.
|
|
2078
|
-
- No runtime module, VDOM, hydration, or retained component tree is added.
|
|
2079
|
-
|
|
2080
|
-
### Validation
|
|
2081
|
-
|
|
2082
|
-
- A fixture reduced from ClimateCompatibleGrowth's MIT-licensed teaching-kit `Dropdown` preserves its direct `selectedItems` and `setSelectedItems` source shape.
|
|
2083
|
-
- Browser coverage proves child draft independence, parent replacement without draft synchronization, explicit commit, and a static zero-JavaScript sibling.
|
|
2084
|
-
- Existing conditional-effect `setResult` props remain outside setter-callback specialization.
|
|
2085
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 225 tests and 174 generated pages.
|
|
2086
|
-
|
|
2087
|
-
### Upgrade
|
|
2088
|
-
|
|
2089
|
-
```sh
|
|
2090
|
-
npm install @kudzujs/core@^0.8.59
|
|
2091
|
-
```
|
|
2092
|
-
|
|
2093
|
-
## 0.8.58 - Keyed item draft state
|
|
2094
|
-
|
|
2095
|
-
Kudzu 0.8.58 lets a keyed row initialize independent local object draft state directly from its keyed item prop.
|
|
2096
|
-
|
|
2097
|
-
### Changed in 0.8.58
|
|
2098
|
-
|
|
2099
|
-
- `const [draft, setDraft] = useState(todo)` compiles when `todo` is the direct item prop of a keyed row.
|
|
2100
|
-
- RouteIR marks the state with a narrow `list-item` initializer descriptor.
|
|
2101
|
-
- New keys clone the current item into existing key-scoped row-state ownership without a component runtime.
|
|
2102
|
-
- Retained keys preserve their draft state and DOM identity through item updates and reorder.
|
|
2103
|
-
|
|
2104
|
-
### Boundaries
|
|
2105
|
-
|
|
2106
|
-
- Removing a key releases its draft; re-adding that key creates a fresh draft from the current item.
|
|
2107
|
-
- Aliases, property paths, composed expressions, and indirect item props remain rejected.
|
|
2108
|
-
- This does not add prop-to-state synchronization, array prop drafts, a VDOM, hydration, or a retained component tree.
|
|
2109
|
-
- Static sibling routes remain complete HTML with zero JavaScript.
|
|
2110
|
-
|
|
2111
|
-
### Validation
|
|
2112
|
-
|
|
2113
|
-
- The Todo reducer fixture proves independent row drafts, retained draft and DOM identity through reorder, exact removal, and fresh remount initialization.
|
|
2114
|
-
- A dedicated alias fixture remains fail-closed with a source-located diagnostic.
|
|
2115
|
-
- RouteIR records the `list-item` initializer and capability planning emits the existing complex row-state path only where required.
|
|
2116
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 224 tests and 173 generated pages.
|
|
2117
|
-
|
|
2118
|
-
### Upgrade
|
|
2119
|
-
|
|
2120
|
-
```sh
|
|
2121
|
-
npm install @kudzujs/core@^0.8.58
|
|
2122
|
-
```
|
|
2123
|
-
|
|
2124
|
-
## 0.8.57 - Plain-object prop draft state
|
|
2125
|
-
|
|
2126
|
-
Kudzu 0.8.57 lets a specialized setter-callback child initialize independent local draft state directly from one parent state prop authored with a JSON-safe plain-object literal.
|
|
2127
|
-
|
|
2128
|
-
### Changed in 0.8.57
|
|
2129
|
-
|
|
2130
|
-
- `const [draft, setDraft] = useState(value)` compiles when `value` is one direct prop backed by a parent `useState({ ... })` literal.
|
|
2131
|
-
- The existing parent SignalIR remains structural input while the child receives its own state slot and setter ownership.
|
|
2132
|
-
- Direct primitive prop initialization and primitive-only zero-argument `.toString()` retain their existing behavior.
|
|
2133
|
-
- The source compiler reuses its serializable literal proof; ModuleIR, RouteIR, runtime modules, and browser ABI are unchanged.
|
|
2134
|
-
|
|
2135
|
-
### Boundaries
|
|
2136
|
-
|
|
2137
|
-
- Parent arrays, aliases, property paths, composed expressions, lazy values, and object `.toString()` remain rejected.
|
|
2138
|
-
- The callback must still follow the existing direct setter-callback specialization and three-boundary limit.
|
|
2139
|
-
- This is an object-editor migration slice, not automatic prop-to-state synchronization or a general clone runtime.
|
|
2140
|
-
- Static siblings remain complete HTML with zero JavaScript.
|
|
2141
|
-
|
|
2142
|
-
### Validation
|
|
2143
|
-
|
|
2144
|
-
- A FIRE-derived editor proves that changing the child object draft leaves the parent unchanged until the authored save callback commits it.
|
|
2145
|
-
- Focused RouteIR coverage records separate, equal JSON-safe initial objects for parent and child ownership.
|
|
2146
|
-
- A dedicated array-prop fixture remains fail-closed with a source diagnostic.
|
|
2147
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 223 tests and 172 generated pages.
|
|
2148
|
-
|
|
2149
|
-
### Upgrade
|
|
2150
|
-
|
|
2151
|
-
```sh
|
|
2152
|
-
npm install @kudzujs/core@^0.8.57
|
|
2153
|
-
```
|
|
2154
|
-
|
|
2155
|
-
## 0.8.56 - Incremental affected-route development builds
|
|
2156
|
-
|
|
2157
|
-
Kudzu 0.8.56 keeps one project session alive during development so source edits recompile and rerender only the routes whose runtime graphs changed.
|
|
2158
|
-
|
|
2159
|
-
### Changed in 0.8.56
|
|
2160
|
-
|
|
2161
|
-
- The development server batches changed source paths and intersects them with current and prior per-page runtime graphs.
|
|
2162
|
-
- Unaffected compiled `SourceResult` and pre-family route render records are reused across successful rebuilds.
|
|
2163
|
-
- Every affected page recompiles its complete reachable graph so imported component specialization remains correct.
|
|
2164
|
-
- Enhanced-navigation groups invalidate together to preserve shared layout function and ESM singleton identity.
|
|
2165
|
-
- Generation-specific build-time module paths prevent stale Node ESM imports after both successful and failed builds.
|
|
2166
|
-
|
|
2167
|
-
### Safety
|
|
2168
|
-
|
|
2169
|
-
- Failed rebuilds retain the previous deployed output and carry every pending changed path into the next attempt.
|
|
2170
|
-
- Added and removed source files refresh the session index and reachable source set.
|
|
2171
|
-
- CSS, assets, and unknown source events conservatively invalidate every page.
|
|
2172
|
-
- Production builds retain the existing complete staging, collision checks, `afterBuild()`, and rollback-safe promotion.
|
|
2173
|
-
- No browser runtime, hydration layer, VDOM, retained component tree, or SPA router is added.
|
|
2174
|
-
|
|
2175
|
-
### Validation
|
|
2176
|
-
|
|
2177
|
-
- A focused independent-route fixture changes one route-owned helper and recompiles two of four modules while rerendering one of two pages.
|
|
2178
|
-
- Its unaffected interactive route is reused, its static sibling remains zero JavaScript, and incremental deploy output is byte-identical to a fresh-process full build.
|
|
2179
|
-
- Existing development error recovery, navigation groups, Workers, handlers, route families, and source-scale checks pass.
|
|
2180
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 222 tests and 171 generated pages.
|
|
2181
|
-
|
|
2182
|
-
### Upgrade
|
|
2183
|
-
|
|
2184
|
-
```sh
|
|
2185
|
-
npm install @kudzujs/core@^0.8.56
|
|
2186
|
-
```
|
|
2187
|
-
|
|
2188
|
-
## 0.8.55 - Signature-keyed runtime families
|
|
2189
|
-
|
|
2190
|
-
Kudzu 0.8.55 replaces site-wide runtime specialization with deterministic capability families loaded only by the routes that require them.
|
|
2191
|
-
|
|
2192
|
-
### Changed in 0.8.55
|
|
2193
|
-
|
|
2194
|
-
- Equal standalone CapabilityIR signatures share one runtime family under `assets/runtime/<family>/`.
|
|
2195
|
-
- Different route signatures emit isolated core, binding, list, effect, native, serialization, style, and selector modules.
|
|
2196
|
-
- Route-specific parameter, effect, and native entries import their assigned family directly.
|
|
2197
|
-
- Artifact report v2 records exact route signatures, assigned families, emitted family requirements, handlers, Workers, styles, and chunks.
|
|
2198
|
-
- Development state restoration discovers the family core module from the rendered document.
|
|
2199
|
-
|
|
2200
|
-
### Navigation ownership
|
|
2201
|
-
|
|
2202
|
-
- Every enhanced-navigation group unions its route capabilities into one family.
|
|
2203
|
-
- Persistent layout state, committers, mount hooks, unmount hooks, and native listeners retain one ESM singleton identity across group navigation.
|
|
2204
|
-
- Independent groups may reuse byte-identical family files while keeping their own route matcher and layout/application identity modules.
|
|
2205
|
-
|
|
2206
|
-
### Output
|
|
2207
|
-
|
|
2208
|
-
- Static routes emit no runtime family and remain zero JavaScript.
|
|
2209
|
-
- An unrelated standalone route capability no longer changes another route's loaded runtime bytes or cache URL.
|
|
2210
|
-
- Legacy root-level `assets/kudzu*.js` runtime files are no longer emitted.
|
|
2211
|
-
- No runtime loader, hydration layer, VDOM, component tree, or SPA router is added.
|
|
2212
|
-
|
|
2213
|
-
### Validation
|
|
2214
|
-
|
|
2215
|
-
- Focused tests cover signature deduplication, distinct capability isolation, deterministic IDs, navigation unions, static exclusion, shared handler/Worker chunks, and family-aware public collisions.
|
|
2216
|
-
- Existing navigation, effect, list, native, parameter, Worker, base-path, development restoration, and browser ownership journeys pass.
|
|
2217
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 221 tests and 170 generated pages.
|
|
2218
|
-
|
|
2219
|
-
### Upgrade
|
|
2220
|
-
|
|
2221
|
-
```sh
|
|
2222
|
-
npm install @kudzujs/core@^0.8.55
|
|
2223
|
-
```
|
|
2224
|
-
|
|
2225
|
-
## 0.8.54 - Inspectable route artifact closure
|
|
2226
|
-
|
|
2227
|
-
Kudzu 0.8.54 projects each validated route edge through the final handler and Worker bundle graphs into one inspectable artifact contract.
|
|
2228
|
-
|
|
2229
|
-
### Changed in 0.8.54
|
|
2230
|
-
|
|
2231
|
-
- `.kudzu/kudzu-artifacts.json` records every route in deterministic order.
|
|
2232
|
-
- Each route receives its exact CapabilityIR manifest, SHA-256 signature, and required runtime families.
|
|
2233
|
-
- Handler entry ownership derives from retained RouteBuildRecord references rather than HTML or filename inference.
|
|
2234
|
-
- Handler and Worker esbuild metafiles are followed transitively to report route-owned and shared chunks.
|
|
2235
|
-
- Chunks reached by multiple routes include a sorted reverse ownership list.
|
|
2236
|
-
- `afterBuild()` receives the same JSON-safe report as `artifacts`.
|
|
2237
|
-
|
|
2238
|
-
### Boundaries
|
|
2239
|
-
|
|
2240
|
-
- The report distinguishes exact route runtime requirements from the currently site-specialized runtime files.
|
|
2241
|
-
- Enhanced-navigation routes still share their existing ESM singleton and lifecycle boundary.
|
|
2242
|
-
- Signature-keyed runtime emission remains the next route-closure slice.
|
|
2243
|
-
- No runtime loader, manifest fetch, SPA router, or browser behavior is added.
|
|
2244
|
-
|
|
2245
|
-
### Validation
|
|
2246
|
-
|
|
2247
|
-
- Focused checks cover route-only and shared handler chunks, external-import exclusion, Worker ownership, shared Worker chunks, deterministic route order, and distinct capability signatures.
|
|
2248
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 220 tests and 169 generated pages.
|
|
2249
|
-
|
|
2250
|
-
### Upgrade
|
|
2251
|
-
|
|
2252
|
-
```sh
|
|
2253
|
-
npm install @kudzujs/core@^0.8.54
|
|
2254
|
-
```
|
|
2255
|
-
|
|
2256
|
-
## 0.8.53 - Route-aware CSS closure
|
|
2257
|
-
|
|
2258
|
-
Kudzu 0.8.53 links source styles only from routes whose reachable TypeScript graph imports them.
|
|
2259
|
-
|
|
2260
|
-
### Changed in 0.8.53
|
|
2261
|
-
|
|
2262
|
-
- Relative CSS imports follow each page's runtime import and re-export graph in deterministic source order.
|
|
2263
|
-
- RouteBuildRecord receives each route's exact source stylesheet URLs instead of one site-wide CSS list.
|
|
2264
|
-
- `kudzu.config styles` remains explicitly global, deduplicated, and excluded from route-managed ownership.
|
|
2265
|
-
- CSS `?url` imports emit downloadable assets without creating stylesheet links.
|
|
2266
|
-
- Unimported source CSS is no longer implicitly linked; applications import route/layout styles or configure true globals.
|
|
2267
|
-
|
|
2268
|
-
### Enhanced navigation
|
|
2269
|
-
|
|
2270
|
-
- Navigable documents mark route-managed source styles separately from configured global links.
|
|
2271
|
-
- Destination styles load before route cleanup and DOM replacement.
|
|
2272
|
-
- Shared layout stylesheet links retain URL, DOM identity, and cascade order across navigation.
|
|
2273
|
-
- Outgoing route styles are removed after successful preparation.
|
|
2274
|
-
- Overlapping navigation cancels and rolls back provisional stylesheet transactions without disturbing the newer route.
|
|
2275
|
-
- Invalid, duplicate, cross-origin, or failed managed stylesheets fall back to native document navigation.
|
|
2276
|
-
|
|
2277
|
-
### Migration evidence
|
|
2278
|
-
|
|
2279
|
-
- The React/Vite static sibling excludes the interactive app stylesheet while retaining zero JavaScript.
|
|
2280
|
-
- Independent navigation groups exclude one another's layout and route styles.
|
|
2281
|
-
- A delayed stylesheet browser test verifies cancellation rollback, shared-link identity, destination activation, and outgoing-link removal.
|
|
2282
|
-
- Global style fixtures prove configured source/URL deduplication, while dynamic routes now import their intended CSS explicitly.
|
|
2283
|
-
- The starter imports shared CSS through its common header so both generated routes reach the style intentionally.
|
|
2284
|
-
|
|
2285
|
-
### Output and performance
|
|
2286
|
-
|
|
2287
|
-
- Route HTML omits unrelated feature CSS and its cascade effects.
|
|
2288
|
-
- Static pages remain JavaScript-free; only configured enhanced-navigation routes receive managed-style reconciliation.
|
|
2289
|
-
- No CSS bundler, style runtime, SPA router, or new performance claim is added.
|
|
2290
|
-
|
|
2291
|
-
### Validation
|
|
2292
|
-
|
|
2293
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 219 tests and 168 generated pages.
|
|
2294
|
-
|
|
2295
|
-
### Upgrade
|
|
2296
|
-
|
|
2297
|
-
```bash
|
|
2298
|
-
npm install @kudzujs/core@^0.8.53
|
|
2299
|
-
```
|
|
2300
|
-
|
|
2301
|
-
## 0.8.52 - Effect-private mutable refs
|
|
2302
|
-
|
|
2303
|
-
Kudzu 0.8.52 compiles component-authored mutable refs when one inline effect exclusively owns their complete lifecycle.
|
|
2304
|
-
|
|
2305
|
-
### Changed in 0.8.52
|
|
2306
|
-
|
|
2307
|
-
- Top-level `useRef(null)` and `useRef(0)` values lower when every direct `.current` reference belongs to one inline block-bodied effect setup, its nested callbacks, and cleanup.
|
|
2308
|
-
- The compiler removes those component declarations and creates fresh mutable objects inside each effect setup invocation.
|
|
2309
|
-
- Existing effect ownership handles dependency replacement, stale setter invalidation, conditional/keyed ownership, navigation, document disposal, and BFCache preservation.
|
|
2310
|
-
- Animation-frame refs use the same invocation-private lowering while retaining exact scheduler, reset, and cancellation validation.
|
|
2311
|
-
- JSX DOM refs remain component-owned; aliases, nonzero initializers, cross-effect/event use, missing cleanup invalidation, and escaped ref objects remain source-diagnosed.
|
|
2312
|
-
|
|
2313
|
-
### Migration evidence
|
|
2314
|
-
|
|
2315
|
-
- The E2B terminal fixture now preserves asynchronous generation invalidation, BFCache retain/resume, discard cleanup, and a static sibling without ResourceIR.
|
|
2316
|
-
- A native WebSocket fixture verifies dependency replacement, listener removal, stale callback rejection, distinct connection ownership, and one close per connection.
|
|
2317
|
-
- Mutable refs shared by multiple effects retain a focused source diagnostic.
|
|
2318
|
-
|
|
2319
|
-
### Output and performance
|
|
2320
|
-
|
|
2321
|
-
- Private refs stay inside existing route-specific effect handler ESM and are absent from build-time captures and RouteIR scope.
|
|
2322
|
-
- Static sibling routes remain zero JavaScript.
|
|
2323
|
-
- No ResourceIR record, component runtime, resource API, scheduler, or new performance claim is added.
|
|
2324
|
-
|
|
2325
|
-
### Validation
|
|
2326
|
-
|
|
2327
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 219 tests and 167 generated pages.
|
|
2328
|
-
|
|
2329
|
-
### Upgrade
|
|
2330
|
-
|
|
2331
|
-
```bash
|
|
2332
|
-
npm install @kudzujs/core@^0.8.52
|
|
2333
|
-
```
|
|
2334
|
-
|
|
2335
|
-
## 0.8.51 - Owned effect package imports
|
|
2336
|
-
|
|
2337
|
-
Kudzu 0.8.51 lets inline owned effect setup and cleanup callbacks reference browser-only package imports directly.
|
|
2338
|
-
|
|
2339
|
-
### Changed in 0.8.51
|
|
2340
|
-
|
|
2341
|
-
- Direct package references are accepted inside inline `useEffect` setup callbacks and their directly returned inline cleanup functions.
|
|
2342
|
-
- Existing package import records feed the route-specific effect handler ESM and package bundler.
|
|
2343
|
-
- Build scratch replaces package-owning effect callbacks with inert functions because build-time rendering records ownership without executing effect code.
|
|
2344
|
-
- Render-time, helper-indirect, mixed, side-effect, and dynamic package imports remain source-diagnosed.
|
|
2345
|
-
|
|
2346
|
-
### Output and performance
|
|
2347
|
-
|
|
2348
|
-
- Package code is retained only by routes whose effect graph references it.
|
|
2349
|
-
- Build-time component modules and static sibling routes omit the package and its JavaScript.
|
|
2350
|
-
- No package runtime, ResourceIR, public adapter API, or new performance claim is added.
|
|
2351
|
-
|
|
2352
|
-
### Validation
|
|
2353
|
-
|
|
2354
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 217 tests and 166 generated pages.
|
|
2355
|
-
- A direct setup/cleanup fixture bundles TypeScript package data into one owned effect handler while its static sibling ships zero JavaScript.
|
|
2356
|
-
- Focused negative fixtures retain diagnostics for render-time and helper-indirect package references.
|
|
2357
|
-
|
|
2358
|
-
### Upgrade
|
|
2359
|
-
|
|
2360
|
-
```bash
|
|
2361
|
-
npm install @kudzujs/core@^0.8.51
|
|
2362
|
-
```
|
|
2363
|
-
|
|
2364
|
-
## 0.8.50 - Package-neutral shared state IR
|
|
2365
|
-
|
|
2366
|
-
Kudzu 0.8.50 contains reduced Zustand migration syntax behind package-neutral shared-state and action records before generic signal and handler consumers.
|
|
2367
|
-
|
|
2368
|
-
### Changed in 0.8.50
|
|
2369
|
-
|
|
2370
|
-
- ModuleIR v2 records JSON-safe `SharedStateIR` identities, fields, and initial values.
|
|
2371
|
-
- `SharedActionIR` records reference their owning shared state through validated slots.
|
|
2372
|
-
- HandlerIR records the shared actions used by route-specific native handlers.
|
|
2373
|
-
- The Zustand adapter preserves package-specific source diagnostics while generic compiler and build-time rendering paths consume shared-state metadata.
|
|
2374
|
-
|
|
2375
|
-
### Output and performance
|
|
2376
|
-
|
|
2377
|
-
- Existing RouteIR layout state, functional action updates, same-turn behavior, and enhanced-navigation persistence remain unchanged.
|
|
2378
|
-
- React, Zustand, subscriptions, and a generic store runtime remain absent from deploy output.
|
|
2379
|
-
- No public store or compatibility-adapter API is added, and this release makes no new performance claim.
|
|
2380
|
-
|
|
2381
|
-
### Validation
|
|
2382
|
-
|
|
2383
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 215 tests and 165 generated pages.
|
|
2384
|
-
- Focused ModuleIR tests validate JSON round-tripping and reject dangling shared-action state references.
|
|
2385
|
-
- The maintained Zustand browser journey retains repeated same-turn updates, batched effects, layout identity, navigation persistence, and removal behavior.
|
|
2386
|
-
|
|
2387
|
-
### Upgrade
|
|
2388
|
-
|
|
2389
|
-
```bash
|
|
2390
|
-
npm install @kudzujs/core@^0.8.50
|
|
2391
|
-
```
|
|
2392
|
-
|
|
2393
|
-
## 0.8.49 - Setter callback fan-out
|
|
2394
|
-
|
|
2395
|
-
Kudzu 0.8.49 lets one component forward the same destructured setter callback directly through multiple child component `on*` props.
|
|
2396
|
-
|
|
2397
|
-
### Changed in 0.8.49
|
|
2398
|
-
|
|
2399
|
-
- A specialized component may pass one callback prop directly to multiple child controls.
|
|
2400
|
-
- Each child branch specializes independently to the original parent state signal.
|
|
2401
|
-
- Fan-out composes with multiple direct intrinsic handlers within the existing three-boundary limit.
|
|
2402
|
-
- Aliases, ordinary prop names, spreads, intermediate adapters, and a fourth callback boundary remain source-diagnosed.
|
|
2403
|
-
|
|
2404
|
-
### Output and performance
|
|
2405
|
-
|
|
2406
|
-
- Every leaf continues to emit its existing concrete state-operation descriptor.
|
|
2407
|
-
- No callback registry, component runtime, browser runtime module, or public Kudzu API is added.
|
|
2408
|
-
- This release makes no new performance claim.
|
|
2409
|
-
|
|
2410
|
-
### Validation
|
|
2411
|
-
|
|
2412
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 214 tests and 164 generated pages.
|
|
2413
|
-
- A relative component fans one callback out to two child controls whose click descriptors target the same parent signal.
|
|
2414
|
-
- Existing repeated-call and fourth-boundary negative fixtures retain their source diagnostics.
|
|
2415
|
-
|
|
2416
|
-
### Upgrade
|
|
2417
|
-
|
|
2418
|
-
```bash
|
|
2419
|
-
npm install @kudzujs/core@^0.8.49
|
|
2420
|
-
```
|
|
2421
|
-
|
|
2422
|
-
## 0.8.48 - Multi-handler setter callbacks
|
|
2423
|
-
|
|
2424
|
-
Kudzu 0.8.48 lets one compiler-specialized setter-callback prop be called once from each of multiple direct intrinsic event handlers.
|
|
2425
|
-
|
|
2426
|
-
### Changed in 0.8.48
|
|
2427
|
-
|
|
2428
|
-
- A specialized leaf may call the same setter callback from multiple intrinsic `on*` attributes.
|
|
2429
|
-
- Each handler call lowers independently to the same parent state signal.
|
|
2430
|
-
- Direct callback forwarding through the existing three-boundary limit remains supported.
|
|
2431
|
-
- Repeated calls inside one handler, aliases, non-handler uses, forwarding fan-out, and a fourth callback boundary remain source-diagnosed.
|
|
2432
|
-
|
|
2433
|
-
### Output and performance
|
|
2434
|
-
|
|
2435
|
-
- Command-only handlers continue to emit plain state-operation descriptors.
|
|
2436
|
-
- No callback registry, component runtime, browser runtime module, or public Kudzu API is added.
|
|
2437
|
-
- This release makes no new performance claim.
|
|
2438
|
-
|
|
2439
|
-
### Validation
|
|
2440
|
-
|
|
2441
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 213 tests and 163 generated pages.
|
|
2442
|
-
- A positive fixture emits two independent click descriptors targeting the same parent signal.
|
|
2443
|
-
- A focused negative fixture retains a source diagnostic for calling the callback twice inside one event handler.
|
|
2444
|
-
|
|
2445
|
-
### Upgrade
|
|
2446
|
-
|
|
2447
|
-
```bash
|
|
2448
|
-
npm install @kudzujs/core@^0.8.48
|
|
2449
|
-
```
|
|
2450
|
-
|
|
2451
|
-
## 0.8.47 - Direct primitive prop state
|
|
2452
|
-
|
|
2453
|
-
Kudzu 0.8.47 lets a compiler-specialized setter-callback child initialize local state directly from one primitive parent state prop without a migration-only wrapper expression.
|
|
2454
|
-
|
|
2455
|
-
### Changed in 0.8.47
|
|
2456
|
-
|
|
2457
|
-
- `useState(value)` is accepted when `value` is a direct specialized prop linked to parent state with a proven primitive literal initializer.
|
|
2458
|
-
- Build scratch reads the parent signal's initial primitive value while preserving the structural prop signal for handlers and effects.
|
|
2459
|
-
- Existing direct `value.toString()` initialization remains supported for string input buffers.
|
|
2460
|
-
- Composed expressions, aliases, and object/array state props remain source-diagnosed.
|
|
2461
|
-
|
|
2462
|
-
### Output and performance
|
|
2463
|
-
|
|
2464
|
-
- Parent and child retain independent state IDs and JSON-safe initial values.
|
|
2465
|
-
- Handler specialization continues to target the same parent and child signals without a component runtime.
|
|
2466
|
-
- No browser runtime module, public Kudzu API, or new performance claim is added.
|
|
2467
|
-
|
|
2468
|
-
### Validation
|
|
2469
|
-
|
|
2470
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 212 tests and 162 generated pages.
|
|
2471
|
-
- A direct string-state prop emits complete initial input HTML and two matching RouteIR state seeds.
|
|
2472
|
-
- Focused negative fixtures retain diagnostics for composed initializer expressions and object-state props.
|
|
2473
|
-
|
|
2474
|
-
### Upgrade
|
|
2475
|
-
|
|
2476
|
-
```bash
|
|
2477
|
-
npm install @kudzujs/core@^0.8.47
|
|
2478
|
-
```
|
|
2479
|
-
|
|
2480
|
-
## 0.8.46 - Private Context action setters
|
|
2481
|
-
|
|
2482
|
-
Kudzu 0.8.46 lets relative Context-hook actions use Provider-owned setters without forcing those implementation-only setters into the authored Provider value or public Context type.
|
|
2483
|
-
|
|
2484
|
-
### Changed in 0.8.46
|
|
2485
|
-
|
|
2486
|
-
- An action-required setter may be omitted when its corresponding Provider state value remains exposed.
|
|
2487
|
-
- Kudzu adds only the required setter fields to compiler build scratch so existing setter identity and HandlerIR lowering remain unchanged.
|
|
2488
|
-
- Consumer scratch receives collision-free private bindings for action lowering without changing authored hook destructuring.
|
|
2489
|
-
- Fully hidden action state and Provider setters exposed without their state remain source-diagnosed.
|
|
2490
|
-
|
|
2491
|
-
### Output and performance
|
|
2492
|
-
|
|
2493
|
-
- The Notes migration retains the same two RouteIR signals and concrete `notes` and `activeId` state operations.
|
|
2494
|
-
- Context objects, Provider trees, action functions, and a setter registry remain absent from browser output; the static sibling remains zero JavaScript.
|
|
2495
|
-
- No browser runtime module, public Kudzu API, or new performance claim is added.
|
|
2496
|
-
|
|
2497
|
-
### Validation
|
|
2498
|
-
|
|
2499
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 210 tests and 161 generated pages.
|
|
2500
|
-
- The maintained Chrome Notes journey passes create, rename, select, delete, list identity, and active-note updates with authored setters omitted.
|
|
2501
|
-
- Focused negative fixtures retain diagnostics for fully hidden action state, setter-only exposure, private captures, and indirect action references.
|
|
2502
|
-
|
|
2503
|
-
### Upgrade
|
|
2504
|
-
|
|
2505
|
-
```bash
|
|
2506
|
-
npm install @kudzujs/core@^0.8.46
|
|
2507
|
-
```
|
|
2508
|
-
|
|
2509
|
-
## 0.8.45 - Plain TypeScript fast path
|
|
2510
|
-
|
|
2511
|
-
Kudzu 0.8.45 reduces large-project compiler work by sending proven plain `.ts` modules through TypeScript transpilation and relative ESM path rewriting without running Kudzu's TSX semantic transformer.
|
|
2512
|
-
|
|
2513
|
-
### Changed in 0.8.45
|
|
2514
|
-
|
|
2515
|
-
- The fast path is limited to `.ts` files whose runtime imports and exports are resolvable relative TypeScript modules.
|
|
2516
|
-
- TSX, package imports, static assets, unresolved edges, and all uncertain module shapes retain the existing Kudzu transformer.
|
|
2517
|
-
- `npm run benchmark:source-scale` deterministically generates 500 reachable modules and supports alternating baseline/candidate measurements with deploy-output equivalence checks.
|
|
2518
|
-
- Compiler counters report the number of plain modules selected.
|
|
2519
|
-
|
|
2520
|
-
### Output and performance
|
|
2521
|
-
|
|
2522
|
-
- Seven alternating samples against clean `v0.8.44` reduced compile median from 2,323.9 ms to 1,413.2 ms (39.2%) and clean-build median from 3,325.3 ms to 2,382.4 ms (28.4%) on the maintained source-scale fixture.
|
|
2523
|
-
- Compiler scratch decreased from 7,328,390 to 1,971,061 bytes and compile peak-RSS median decreased from 571.2 MiB to 552.6 MiB.
|
|
2524
|
-
- Both targets emitted the same 50 HTML files, 10,980 deploy bytes, and SHA-256 digest. No browser runtime or public API changed.
|
|
2525
|
-
|
|
2526
|
-
### Validation
|
|
2527
|
-
|
|
2528
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 209 tests and 160 generated pages.
|
|
2529
|
-
- A reduced deterministic source-scale run remains in the standard suite.
|
|
2530
|
-
- The maintained benchmark alternates target order and rejects any deploy digest, file-count, page-count, or byte-count difference.
|
|
2531
|
-
|
|
2532
|
-
### Upgrade
|
|
2533
|
-
|
|
2534
|
-
```bash
|
|
2535
|
-
npm install @kudzujs/core@^0.8.45
|
|
2536
|
-
```
|
|
2537
|
-
|
|
2538
|
-
## 0.8.44 - Collision-free Context actions
|
|
2539
|
-
|
|
2540
|
-
Kudzu 0.8.44 removes a compiler-only naming restriction from relative Context-hook actions: Provider state and setter fields needed privately by an action may now share names with ordinary consumer locals.
|
|
2541
|
-
|
|
2542
|
-
### Changed in 0.8.44
|
|
2543
|
-
|
|
2544
|
-
- Action-required Provider state/setter fields that are not publicly selected receive compiler-owned collision-free aliases in the consumer destructuring.
|
|
2545
|
-
- The specialized action AST and its state map use the same aliases before existing HandlerIR lowering.
|
|
2546
|
-
- Alias selection checks component parameters and top-level declarations and increments the compiler-owned suffix when necessary.
|
|
2547
|
-
- Consumer source keeps its chosen local names and public hook destructuring; no application rename or extra Context field selection is required.
|
|
2548
|
-
- Provider state identity, direct state operations, and existing Context action diagnostics remain unchanged.
|
|
2549
|
-
|
|
2550
|
-
### Output and performance
|
|
2551
|
-
|
|
2552
|
-
- Context action functions, Context objects, and Provider trees remain absent from browser output.
|
|
2553
|
-
- Static siblings remain complete zero-JavaScript documents.
|
|
2554
|
-
- No browser runtime module or public API changed. This release makes no new performance claim.
|
|
2555
|
-
|
|
2556
|
-
### Validation
|
|
2557
|
-
|
|
2558
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 208 tests and 158 generated pages.
|
|
2559
|
-
- The maintained Notes Context fixture now declares a consumer-local `setNotes` while create, rename, delete, select, list identity, and active-note updates continue to pass in Chrome.
|
|
2560
|
-
- A focused counter fixture previously rejected for consumer `setCount` collision now builds successfully.
|
|
2561
|
-
- Private Provider captures, hidden state pairs, and indirect action references remain source-diagnosed.
|
|
2562
|
-
|
|
2563
|
-
### Upgrade
|
|
2564
|
-
|
|
2565
|
-
```bash
|
|
2566
|
-
npm install @kudzujs/core@^0.8.44
|
|
2567
|
-
```
|
|
2568
|
-
|
|
2569
|
-
## 0.8.43 - Three-boundary callback ownership
|
|
2570
|
-
|
|
2571
|
-
Kudzu 0.8.43 extends ordinary React-shaped callback and ref composition through one more proven direct forwarding component without adding a callback registry, browser component tree, or runtime module.
|
|
2572
|
-
|
|
2573
|
-
### Changed in 0.8.43
|
|
2574
|
-
|
|
2575
|
-
- A direct setter or inline/simple `const` callback may cross a child component and two additional direct forwarding components before one intrinsic handler invokes it.
|
|
2576
|
-
- Each forwarding component must destructure the callback and pass it directly exactly once as an `on*` JSX prop.
|
|
2577
|
-
- Callback substitution now occurs after recursive component expansion, so each authored forwarding boundary is validated before the original parent callback is specialized into the leaf handler.
|
|
2578
|
-
- Parent SignalIR, child state, effects, deterministic IDs, and parent/child object refs retain their existing ownership through the deeper tree.
|
|
2579
|
-
- A fourth callback boundary, aliases, spreads, intermediate adapters, repeated callback uses, and dynamic hook paths remain fail-closed.
|
|
2580
|
-
|
|
2581
|
-
### Output and performance
|
|
2582
|
-
|
|
2583
|
-
- The forwarding components are specialized away and do not appear as retained browser functions.
|
|
2584
|
-
- Static siblings remain complete zero-JavaScript documents.
|
|
2585
|
-
- No browser runtime source or public API changed. This release makes no new build or cross-framework performance claim.
|
|
2586
|
-
|
|
2587
|
-
### Validation
|
|
2588
|
-
|
|
2589
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 208 tests and 157 generated pages.
|
|
2590
|
-
- Chrome coverage proves parent callback updates, leaf local state/effects/IDs, mounted refs, conditional cleanup, null refs after removal, fresh remount state, and prop synchronization across three boundaries.
|
|
2591
|
-
- Compiler-result checks retain the original parent signal through imported specialization and prove every forwarding component is erased from emitted JavaScript.
|
|
2592
|
-
- A dedicated four-boundary fixture fails at the authored source location.
|
|
2593
|
-
|
|
2594
|
-
### Upgrade
|
|
2595
|
-
|
|
2596
|
-
```bash
|
|
2597
|
-
npm install @kudzujs/core@^0.8.43
|
|
2598
|
-
```
|
|
2599
|
-
|
|
2600
|
-
## 0.8.42 - Large-route artifact sharing
|
|
2601
|
-
|
|
2602
|
-
Kudzu 0.8.42 reduces generated filesystem work for large static route sets and accelerates one proven hidden query form carry shape without adding a general runtime or changing the native-navigation default.
|
|
2603
|
-
|
|
2604
|
-
### Changed in 0.8.42
|
|
2605
|
-
|
|
2606
|
-
- Byte-identical native, parameter, and effect route-entry sources share the first generated route path and one emitted file within the current build.
|
|
2607
|
-
- Existing single-route artifact URLs remain stable; deduplication is build-local and does not add a persistent or generalized cache.
|
|
2608
|
-
- A read-only literal query shape bound only to matching hidden input `value` and `disabled` properties initializes those controls from `location.search` in a small inline script before deferred parameter ESM arrives.
|
|
2609
|
-
- The inline form specialization requires exactly the proven hidden carry shape and falls back to existing parameter capabilities when handlers, effects, conditions, lists, writable query state, or unrelated bindings are present.
|
|
2610
|
-
- Static siblings remain complete zero-JavaScript documents.
|
|
2611
|
-
|
|
2612
|
-
### Performance
|
|
2613
|
-
|
|
2614
|
-
- On the maintained external 1,000-product fixture, a three-run candidate check reduced cold build time from 13,866 ms to 13,203 ms, warm build time from 13,560 ms to 13,087 ms, and output from 10.48 MB to 9.53 MB.
|
|
2615
|
-
- The generated catalog changed from 1,011 native plus 1,011 effect route entries to three native plus five effect files in the 100-product candidate inspection, while route HTML continued to reference valid complete capabilities.
|
|
2616
|
-
- Five Slow 4G form sessions reduced hidden query carry readiness from 783 ms to 348 ms, about 56%.
|
|
2617
|
-
- These are focused Kudzu before/after measurements, not a cross-framework fastest claim. A seven-run alternating catalog measurement remains the stronger follow-up for precise build attribution.
|
|
2618
|
-
|
|
2619
|
-
### Navigation decision
|
|
2620
|
-
|
|
2621
|
-
- A compressed static-catalog same-document navigation experiment was measured and removed rather than released.
|
|
2622
|
-
- In three Slow 4G sessions, native navigation beat the enhanced candidate on detail latency (314 ms versus 575 ms), back latency (107 ms versus 297 ms), transfer (322.2 KB versus 511 KB), and degraded-capability survival (15/18 versus 12/18).
|
|
2623
|
-
- Native document navigation therefore remains the default for `getStaticPaths()` catalogs; existing explicit exact and `runtimeParams` navigation groups are unchanged.
|
|
2624
|
-
|
|
2625
|
-
### Validation
|
|
2626
|
-
|
|
2627
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 208 tests and 156 generated pages.
|
|
2628
|
-
- A three-route static-path fixture proves one shared native entry and one shared effect entry.
|
|
2629
|
-
- A focused query form fixture proves three hidden fields initialize through the narrow inline path while a static sibling emits no script.
|
|
2630
|
-
- Sites whose Content Security Policy forbids inline scripts should not rely on this optional fast path without an allowed policy; existing deferred parameter ESM remains in the document.
|
|
2631
|
-
|
|
2632
|
-
### Upgrade
|
|
2633
|
-
|
|
2634
|
-
```bash
|
|
2635
|
-
npm install @kudzujs/core@^0.8.42
|
|
2636
|
-
```
|
|
2637
|
-
|
|
2638
|
-
## 0.8.41 - Two-boundary callback ownership
|
|
2639
|
-
|
|
2640
|
-
Kudzu 0.8.41 extends ordinary React-shaped component migration through one additional proven callback/ref forwarding boundary without retaining component functions or adding browser runtime machinery.
|
|
2641
|
-
|
|
2642
|
-
### Changed in 0.8.41
|
|
2643
|
-
|
|
2644
|
-
- A direct setter or inline/simple `const` state callback may cross a child component and one additional direct forwarding component before one intrinsic handler invokes it.
|
|
2645
|
-
- The forwarding component must destructure the callback and pass it directly once as an `on*` JSX prop; aliases, spreads, intermediate adapters, repeated uses, and a third callback boundary remain fail-closed.
|
|
2646
|
-
- Parent SignalIR remains stable through nested specialization, including direct setter input adapters and simple callbacks that capture parent state.
|
|
2647
|
-
- Specialized children retain independent local state, effects, deterministic IDs, and `null`-initialized object refs through conditional cleanup and fresh remount.
|
|
2648
|
-
- A parent-owned object ref may follow the same proven component tree to one direct intrinsic root.
|
|
2649
|
-
- Static siblings still emit complete HTML with zero JavaScript; no callback registry, retained component tree, or browser runtime module was added.
|
|
2650
|
-
|
|
2651
|
-
### Performance
|
|
2652
|
-
|
|
2653
|
-
- Seven alternating clean builds measured `v0.8.40` and candidate medians of 3,565.236 ms and 3,470.277 ms. The +59.834 ms paired candidate-minus-baseline median and overlapping ranges establish no material build change.
|
|
2654
|
-
- Peak RSS medians were 364.6 MiB and 362.0 MiB.
|
|
2655
|
-
- Both targets emit byte-identical 176-file deploy graphs: 3,850,245 raw bytes, 1,984,991 aggregate gzip bytes, and identical route plans and deploy digests.
|
|
2656
|
-
- Current maintained Worker, keyed-list, runtime-matrix, and commerce build measurements are recorded in `PERFORMANCE.md`; architecture and timeout limitations are explicit.
|
|
2657
|
-
|
|
2658
|
-
### Validation
|
|
2659
|
-
|
|
2660
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 206 tests and 156 generated pages.
|
|
2661
|
-
- Browser coverage proves parent updates, child-local state/effects/IDs, parent ref resolution, conditional cleanup, and fresh remount across two boundaries.
|
|
2662
|
-
- Compiler-result checks prove nested specializations retain the original parent signal, while a dedicated fixture rejects a third callback boundary at the authored source.
|
|
2663
|
-
- Broader prop, callback, ref, and Context graphs remain migration-led work.
|
|
2664
|
-
|
|
2665
|
-
### Upgrade
|
|
2666
|
-
|
|
2667
|
-
```bash
|
|
2668
|
-
npm install @kudzujs/core@^0.8.41
|
|
2669
|
-
```
|
|
2670
|
-
|
|
2671
|
-
## 0.8.40 - Property-level effect dependencies
|
|
2672
|
-
|
|
2673
|
-
Kudzu 0.8.40 starts the large-application foundation sequence by allowing ordinary object state to expose property-level effect dependencies without artificial primitive-state decomposition.
|
|
2674
|
-
|
|
2675
|
-
### Changed in 0.8.40
|
|
2676
|
-
|
|
2677
|
-
- Direct property paths over ordinary object state compile to existing tagged DerivedIR.
|
|
2678
|
-
- Top-level immutable primitive locals derived from object properties use the same source subscription and expression evaluator.
|
|
2679
|
-
- Source object commits schedule dependency comparison, while `Object.is` prevents cleanup and rerun when the selected property value is unchanged.
|
|
2680
|
-
- Whole-object, dynamic-property, object-valued, and mixed whole-object/property dependencies remain fail-closed.
|
|
2681
|
-
- The Zustand migration fixture proves property updates, equality across enhanced navigation, persistent layout ownership, and removal.
|
|
2682
|
-
- No field signal, proxy, component rerender, RouteIR field, or browser runtime module was added.
|
|
2683
|
-
|
|
2684
|
-
### Performance
|
|
2685
|
-
|
|
2686
|
-
- Twenty-one alternating clean builds measured `v0.8.39` and candidate medians of 3,753.276 ms and 3,883.841 ms, with a +103.031 ms paired median.
|
|
2687
|
-
- Peak RSS medians were 356.9 MiB and 363.7 MiB. Build and memory deltas remain below the 5% material-regression threshold.
|
|
2688
|
-
- Both targets emit 175 files and byte-identical `kudzu-plan.json`; only updated docs add 98 raw and 31 aggregate gzip bytes. Runtime and route JavaScript are unchanged.
|
|
2689
|
-
- Seven-build/fresh-profile React, Vue, and Svelte runtime comparisons pass. The matched commerce build matrix records Kudzu output at 14,689 aggregate gzip bytes versus 66,741 for React hydration, 247,612 for Next, 82,075 for Nuxt, and 41,061 for SvelteKit.
|
|
2690
|
-
|
|
2691
|
-
### Validation
|
|
2692
|
-
|
|
2693
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 205 tests and 155 generated pages.
|
|
2694
|
-
- Focused checks cover direct object-property classification, canonical DerivedIR, whole-object/property ambiguity, RouteIR projection, browser equality behavior, and layout lifetime.
|
|
2695
|
-
- The next migration-backed investigation is multi-boundary component/prop/callback/ref/context dataflow.
|
|
2696
|
-
|
|
2697
|
-
### Upgrade
|
|
2698
|
-
|
|
2699
|
-
```bash
|
|
2700
|
-
npm install @kudzujs/core@^0.8.40
|
|
2701
|
-
```
|
|
2702
|
-
|
|
2703
|
-
## 0.8.39 - Fail-closed route contracts
|
|
2704
|
-
|
|
2705
|
-
Kudzu 0.8.39 completes P0.12 by deeply validating the concrete RouteIR, RouteBuildRecord, and CapabilityIR contracts before artifact selection and browser code generation.
|
|
2706
|
-
|
|
2707
|
-
### Changed in 0.8.39
|
|
2708
|
-
|
|
2709
|
-
- RouteIR v1 rejects duplicate state/parameter IDs, missing command targets, unsupported command operations, malformed captures, and invalid effect dependencies.
|
|
2710
|
-
- Direct and evaluator bindings validate recursively, including nested scope bindings and every referenced state.
|
|
2711
|
-
- Conditions validate identity, kinds, reactive sources, and owned states.
|
|
2712
|
-
- Keyed lists validate state/key identity, row ownership templates, child reciprocity, duplicate parents, and ownership cycles.
|
|
2713
|
-
- RouteBuildRecord verifies behavior, binding, list, effect, native, and parameter capability reciprocity before artifact planning.
|
|
2714
|
-
- CapabilityIR validates standalone event/count/flag implications and exact projection equality from its validated route records before codegen.
|
|
2715
|
-
- Strict JSON-safe checks reject cyclic, lossy, nonfinite, BigInt, sparse, accessor, symbol, and non-plain contract data with a deterministic field path.
|
|
2716
|
-
|
|
2717
|
-
### Performance
|
|
2718
|
-
|
|
2719
|
-
- Seven alternating clean 153-page builds measured `v0.8.38` and candidate medians of 2,356.477 ms and 2,352.382 ms. The +14.255 ms paired median and overlapping ranges establish no material speedup or regression.
|
|
2720
|
-
- Peak RSS medians were 352.7 MiB and 356.8 MiB. Repeated validation of the same immutable contracts is eliminated by identity caching.
|
|
2721
|
-
- Both targets emit the same 174 files, 3,840,694 raw bytes, 1,981,560 aggregate gzip bytes, deploy digest, and byte-identical `kudzu-plan.json`.
|
|
2722
|
-
|
|
2723
|
-
### Validation
|
|
2724
|
-
|
|
2725
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 203 tests and 154 generated pages.
|
|
2726
|
-
- Focused checks cover duplicate/missing identity, malformed commands, effects, captures, bindings, conditions, lists, ownership, capabilities, versions, and JSON safety.
|
|
2727
|
-
- Existing static, command, binding, keyed, effect, Worker, package-import, navigation, reducer, and migration fixtures retain browser behavior and zero-unused-runtime checks.
|
|
2728
|
-
- The next migration-backed investigation is property-level derived dependencies over ordinary object state.
|
|
2729
|
-
|
|
2730
|
-
### Upgrade
|
|
2731
|
-
|
|
2732
|
-
```bash
|
|
2733
|
-
npm install @kudzujs/core@^0.8.39
|
|
2734
|
-
```
|
|
2735
|
-
|
|
2736
|
-
## 0.8.38 - Structural route artifacts
|
|
2737
|
-
|
|
2738
|
-
Kudzu 0.8.38 completes P0.11 by replacing serialized route-output searches and parallel route facts with one validated RouteBuildRecord artifact graph.
|
|
2739
|
-
|
|
2740
|
-
### Changed in 0.8.38
|
|
2741
|
-
|
|
2742
|
-
- Each emitted route records its RouteIR, capability facts, route-entry paths, styles, and exact handler/effect references.
|
|
2743
|
-
- Final event, effect, binding, conditional, and keyed-list descriptors retain handler references only when they are rendered.
|
|
2744
|
-
- Handler modules resolve by exact module URL, and Worker references resolve by structural module/handler pairs instead of formatted keys.
|
|
2745
|
-
- CSS output, package-client compilation, and bundle entry/chunk closure derive from retained route edges.
|
|
2746
|
-
- CapabilityIR now folds RouteBuildRecord values directly; serialized HTML/plan `includes()` searches and parallel route capability/entry arrays are removed.
|
|
2747
|
-
|
|
2748
|
-
### Performance
|
|
2749
|
-
|
|
2750
|
-
- Seven alternating clean 152-page builds measured `v0.8.37` and candidate medians of 1,820.186 ms and 1,804.568 ms. The -20.933 ms paired median and overlapping ranges establish no material speedup or regression.
|
|
2751
|
-
- Peak RSS medians were 351.6 MiB and 351.4 MiB.
|
|
2752
|
-
- Both targets emit the same 173 files, 3,835,970 raw bytes, 1,979,875 aggregate gzip bytes, deploy digest, and byte-identical `kudzu-plan.json`.
|
|
2753
|
-
|
|
2754
|
-
### Validation
|
|
2755
|
-
|
|
2756
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 200 tests and 153 generated pages.
|
|
2757
|
-
- Focused checks reject unsupported versions, malformed and duplicate references, missing handler modules, inconsistent route entries, and invalid JSON round trips.
|
|
2758
|
-
- Existing static, command, binding, keyed, effect, Worker, package-import, navigation, and migration fixtures retain their browser behavior and zero-unused-runtime checks.
|
|
2759
|
-
- P0.12 deep RouteIR and CapabilityIR validation is next.
|
|
2760
|
-
|
|
2761
|
-
### Upgrade
|
|
2762
|
-
|
|
2763
|
-
```bash
|
|
2764
|
-
npm install @kudzujs/core@^0.8.38
|
|
2765
|
-
```
|
|
2766
|
-
|
|
2767
|
-
## 0.8.37 - Structural ModuleIR references
|
|
2768
|
-
|
|
2769
|
-
Kudzu 0.8.37 completes P0.10 by replacing mixed state names, export strings, formatted owner keys, and partial slots with one validated structural reference graph.
|
|
2770
|
-
|
|
2771
|
-
### Changed in 0.8.37
|
|
2772
|
-
|
|
2773
|
-
- ModuleIR v2 assigns deterministic slots to symbols, signals, handlers, bindings, derived values, effects, keyed blocks, and imports.
|
|
2774
|
-
- ComponentAnalysis v2 assigns deterministic owner, specialization, state, ref, and ID slots.
|
|
2775
|
-
- StateRef, OwnerRef, source-local SymbolRef, and stable ModuleSymbol records connect state, capture, import, effect, collection, specialization, prop-signal, and row ownership edges.
|
|
2776
|
-
- Descriptor finalization resolves effect handlers and imports structurally instead of searching by export spelling.
|
|
2777
|
-
- Readable state and export names remain only as codegen, runtime ABI, and diagnostic metadata.
|
|
2778
|
-
- One fail-closed pre-codegen validator rejects unsupported versions, malformed slots, duplicate exports, invalid effect handlers, broken keyed parent-child reciprocity, ownership cycles, and dangling specialization/ref edges.
|
|
2779
|
-
|
|
2780
|
-
### Performance
|
|
2781
|
-
|
|
2782
|
-
- The maintained 100-importer fixture retains 103 parse misses, 103 export-summary misses, and 100 importer-local clones.
|
|
2783
|
-
- Seven alternating fresh-process samples measured `v0.8.36` and 0.8.37 compiler medians of 224.506 ms and 227.158 ms. The +6.270 ms paired median and overlapping timing/RSS ranges establish no material regression.
|
|
2784
|
-
- Source-result size increases from 395,346 B to 460,720 B because ModuleIR and ComponentAnalysis now serialize structural symbol, signal, owner, and slot metadata. This is compiler scratch data, not deployed browser JavaScript.
|
|
2785
|
-
- Existing static, command, binding, keyed, effect, Worker, navigation, and migration fixtures retain their browser behavior and zero-unused-runtime checks.
|
|
2786
|
-
|
|
2787
|
-
### Validation
|
|
2788
|
-
|
|
2789
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 198 tests and 152 generated pages.
|
|
2790
|
-
- Focused checks cover unsupported versions, malformed references, duplicate exports, parent-child reciprocity, cycles, effect-handler roles, specialization ownership, and JSON round trips.
|
|
2791
|
-
- Package smoke installation passes from the packed tarball.
|
|
2792
|
-
- P0.11 explicit route artifact graph is next.
|
|
2793
|
-
|
|
2794
|
-
### Upgrade
|
|
2795
|
-
|
|
2796
|
-
```bash
|
|
2797
|
-
npm install @kudzujs/core@^0.8.37
|
|
2798
|
-
```
|
|
2799
|
-
|
|
2800
|
-
## 0.8.36 - Semantic state operations
|
|
2801
|
-
|
|
2802
|
-
Kudzu 0.8.36 completes P0.9 by proving equivalent direct, aliased, and local-helper state updates and lowering them through the existing command HandlerIR path.
|
|
2803
|
-
|
|
2804
|
-
### Changed in 0.8.36
|
|
2805
|
-
|
|
2806
|
-
- Direct `setCount(count + 1)`, an immutable result alias, a zero-argument arrow helper, and a one-parameter function helper emit the same structured `add` command.
|
|
2807
|
-
- Binding identity proves state, setter, helper, and parameter ownership before specialization.
|
|
2808
|
-
- Recursion, helper or alias escape, mutation, optional calls, and object-based dynamic dispatch fail at authored source locations.
|
|
2809
|
-
- The existing direct command fast path remains first; whole-handler analysis runs only when direct specialization fails.
|
|
2810
|
-
- Quick Start instructions now include an explicit `npm install`, and `create-kudzu@0.1.102` reports install-aware next steps and includes the install command in generated READMEs.
|
|
2811
|
-
|
|
2812
|
-
### Performance
|
|
2813
|
-
|
|
2814
|
-
- The maintained 100-importer fixture preserves the same normalized graph, source-result bytes, digest, and 103 / 103 / 100 parse, summary, and clone counts.
|
|
2815
|
-
- Twenty-one alternating `v0.8.35`/candidate samples measured compiler medians of 947.100 ms and 942.596 ms. The +1.754 ms paired candidate-minus-baseline median and overlapping RSS ranges establish no material improvement or regression.
|
|
2816
|
-
- Alias and helper forms avoid native handler ESM and reuse the existing command runtime; direct command artifacts remain unchanged.
|
|
2817
|
-
|
|
2818
|
-
### Validation
|
|
2819
|
-
|
|
2820
|
-
- `npm run check`, `npm test`, and `npm run test:package` pass with all 197 tests and 151 generated pages.
|
|
2821
|
-
- Focused coverage proves identical JSON-safe command IR, signal ownership, build-module behavior calls, RouteIR commands, and zero native-handler artifacts for all four source forms.
|
|
2822
|
-
- Existing command ABI, synchronous batching, ownership, browser runtime, and unrelated native handlers remain unchanged.
|
|
2823
|
-
- P0.10 ModuleIR reference unification is next.
|
|
2824
|
-
|
|
2825
|
-
### Upgrade
|
|
2826
|
-
|
|
2827
|
-
```bash
|
|
2828
|
-
npm install @kudzujs/core@^0.8.36
|
|
2829
|
-
```
|
|
2830
|
-
|
|
2831
|
-
## 0.8.35 - Stable module identity
|
|
2832
|
-
|
|
2833
|
-
Kudzu 0.8.35 completes P0.8 by giving cross-module declarations and authored compiler sites stable identities that do not depend on transformed TypeScript AST objects or readable names.
|
|
2834
|
-
|
|
2835
|
-
### Changed in 0.8.35
|
|
2836
|
-
|
|
2837
|
-
- ProjectSession summarizes declaration, import, named re-export, and `export *` sites as source-local SiteId records.
|
|
2838
|
-
- ModuleSymbol identity combines a project-relative module path with the authored declaration SiteId; readable names remain diagnostic metadata.
|
|
2839
|
-
- Default and named exports, local aliases, barrel chains, `export *`, cycles, and ambiguous star exports resolve through one cycle-safe symbol graph.
|
|
2840
|
-
- Imported semantic consumers resolve ModuleSymbols first, then locate the authored SiteId in their private normalized AST clone instead of rescanning by declaration name.
|
|
2841
|
-
- Component owners, component calls, hooks, keyed lists, effects, states, refs, and IDs expose deterministic source-local SiteIds in compiler analysis records.
|
|
2842
|
-
- Repeated symbol resolutions are cached against their source dependencies and invalidate when any dependency source changes.
|
|
2843
|
-
|
|
2844
|
-
### Performance
|
|
2845
|
-
|
|
2846
|
-
- The 100-importer fixture retains 103 parse and 103 summary misses while removing 100 unnecessary intermediate barrel clones, reducing importer-local clones from 200 to 100.
|
|
2847
|
-
- Twenty-one alternating `v0.8.34`/candidate samples measured compiler medians of 760.967 ms and 755.595 ms. The paired candidate-minus-baseline median was -2.971 ms, with the candidate faster in 13/21 pairs; this is a small directional improvement, not a material speedup claim.
|
|
2848
|
-
- Peak RSS medians were 256.9 MiB and 257.8 MiB. The 12,743-byte source-result increase is deterministic SiteId metadata in build scratch, not deployed JavaScript.
|
|
2849
|
-
- A matched whole-build check measured Kudzu at 495.4 ms, Astro at 974.5 ms, Vue SSR at 1,477.3 ms, React SSR at 1,639.5 ms, and Svelte SSR at 2,033.1 ms. Kudzu shipped less JavaScript gzip than React, Vue, and Svelte; Astro's direct imperative implementation remained much smaller.
|
|
2850
|
-
|
|
2851
|
-
### Validation
|
|
2852
|
-
|
|
2853
|
-
- `npm run check`, `npm test`, `npm run test:package`, and all 195 tests pass.
|
|
2854
|
-
- Focused coverage verifies default/named exports, aliases, barrel chains, `export *`, ambiguity, cycles, repeated-session IDs, repeated-compilation IDs, resolution-cache invalidation, and clone-local declaration lookup.
|
|
2855
|
-
- All five cross-framework device targets pass the same Chrome checks for initial HTML, filtering, empty state, detail fetch, superseded commands, stale-result rejection, and HTTP failures.
|
|
2856
|
-
- Existing browser runtime code, route capabilities, source syntax, and deployed JavaScript remain unchanged; the repository build emits 150 pages.
|
|
2857
|
-
- P0.9 semantic state operations is next.
|
|
2858
|
-
|
|
2859
|
-
### Upgrade
|
|
2860
|
-
|
|
2861
|
-
```bash
|
|
2862
|
-
npm install @kudzujs/core@^0.8.35
|
|
2863
|
-
```
|
|
2864
|
-
|
|
2865
|
-
## 0.8.34 - Session-local module cache
|
|
2866
|
-
|
|
2867
|
-
Kudzu 0.8.34 completes P0.7 by making source parsing and supported-export summarization proportional to unique modules within one ProjectSession instead of repeated importer edges.
|
|
2868
|
-
|
|
2869
|
-
### Changed in 0.8.34
|
|
2870
|
-
|
|
2871
|
-
- ProjectSession caches one canonical read-only TypeScript AST and one narrow export summary for each file/source-text pair.
|
|
2872
|
-
- Reachability, static collection, Zustand, client-helper, style, layout-diagnostic, and Worker graph consumers reuse canonical module records.
|
|
2873
|
-
- Importer normalization receives a deep clone of every node with independent parent links; transformed mutable AST is never shared between transformer contexts.
|
|
2874
|
-
- Source-text changes invalidate the parsed tree and export summary together, and independent ProjectSessions never share records.
|
|
2875
|
-
- Export summaries preserve the existing supported direct, aliased, default, and named re-export forms. Stable ModuleSymbol/SiteId identity and `export *` expansion remain P0.8 work.
|
|
2876
|
-
- Optional injected counters expose parse, summary, and clone misses to tests and the maintained benchmark without production logging.
|
|
2877
|
-
|
|
2878
|
-
### Performance
|
|
2879
|
-
|
|
2880
|
-
- A 100-importer fixture contains 103 unique page/barrel/component/helper modules. The candidate records exactly 103 parses, 103 export summaries, and 200 importer-local clones.
|
|
2881
|
-
- Baseline and candidate produce the same 382,603-byte source-result graph and SHA-256 digest.
|
|
2882
|
-
- The 21-pair timing run drifted materially on the measurement host. Paired candidate-minus-baseline differences had a +33.324 ms median, with the candidate faster in 9/21 pairs; no material speedup or regression is claimed.
|
|
2883
|
-
- A separate matched SSR/native whole-build check measured Kudzu at 856.2 ms, Astro at 1,482.9 ms, Vue at 2,295.3 ms, React at 2,802.0 ms, and Svelte at 2,972.9 ms. Every target passed the same Chrome behavior validation; this is whole-build context, not a module-cache comparison.
|
|
2884
|
-
|
|
2885
|
-
### Validation
|
|
2886
|
-
|
|
2887
|
-
- `npm run check`, `npm test`, `npm run test:package`, and all 193 tests pass.
|
|
2888
|
-
- Unit coverage verifies cache hits, source-text invalidation, export summaries, cross-session isolation, independent cloned node identity, and clone-local parent links.
|
|
2889
|
-
- Existing imported components, re-export cycles, static collections, Zustand, client helpers, Workers, source diagnostics, and generated artifacts remain covered.
|
|
2890
|
-
- The repository build emits 149 pages; unaffected static routes remain complete zero-JavaScript documents.
|
|
2891
|
-
- P0.8 stable ModuleSymbol and SiteId is next.
|
|
2892
|
-
|
|
2893
|
-
### Upgrade
|
|
2894
|
-
|
|
2895
|
-
```bash
|
|
2896
|
-
npm install @kudzujs/core@^0.8.34
|
|
2897
|
-
```
|
|
2898
|
-
|
|
2899
|
-
## 0.8.33 - Project-scoped compilation
|
|
2900
|
-
|
|
2901
|
-
Kudzu 0.8.33 completes P0.6 by replacing import-time project globals with an explicit build-scoped ProjectSession. Independent roots can now compile in one Node process without sharing paths, source records, graph resolution, or Worker compiler ownership.
|
|
2902
|
-
|
|
2903
|
-
### Changed in 0.8.33
|
|
2904
|
-
|
|
2905
|
-
- Each `build()` creates a ProjectSession containing the absolute project root, `src`, `src/pages`, `.kudzu`, and `dist` paths.
|
|
2906
|
-
- Source graph resolution, source indexes, reachable source sets, source compiler helpers, and Worker compilation are bound to that session instead of the directory where compiler modules were first imported.
|
|
2907
|
-
- The internal programmatic build and development entry points accept an explicit `root`; omitted roots still use call-time `process.cwd()`, preserving existing `kudzu build` and `kudzu dev` behavior.
|
|
2908
|
-
- Config loading, styles, static assets, route diagnostics, generated modules, output locking, staging, promotion, and development serving all resolve against the selected project.
|
|
2909
|
-
- Parsed-module and export-summary caching remains deferred to P0.7; this release establishes ownership without adding speculative shared caches or changing browser output.
|
|
2910
|
-
|
|
2911
|
-
### Validation
|
|
2912
|
-
|
|
2913
|
-
- `npm run check`, `npm test`, `npm run test:package`, and all 191 tests pass.
|
|
2914
|
-
- One imported `build()` function compiles two roots with identical source filenames in sequence and verifies isolated config metadata, HTML, source results, `.kudzu` modules, and content-distinct Worker bundles.
|
|
2915
|
-
- The standard CLI output-safety fixture still verifies staging, collision rejection, lock behavior, recovery, and replacement through call-time CWD.
|
|
2916
|
-
- The repository build emits 148 pages, and existing static zero-JavaScript, interactive capability, Worker, navigation, ownership, and migration behavior remains covered.
|
|
2917
|
-
- P0.7 parsed module and export summary caching is next.
|
|
2918
|
-
|
|
2919
|
-
### Upgrade
|
|
2920
|
-
|
|
2921
|
-
```bash
|
|
2922
|
-
npm install @kudzujs/core@^0.8.33
|
|
2923
|
-
```
|
|
2924
|
-
|
|
2925
|
-
## 0.8.32 - Staged and collision-safe output
|
|
2926
|
-
|
|
2927
|
-
Kudzu 0.8.32 completes P0.5 by building production artifacts away from the active deploy tree, rejecting public/generated collisions, and replacing `dist` only after generation and trusted `afterBuild()` work succeed.
|
|
2928
|
-
|
|
2929
|
-
### Changed in 0.8.32
|
|
2930
|
-
|
|
2931
|
-
- Route HTML, runtime, handler, chunk, Worker, source CSS, and configured CSS artifacts complete in a project-local staging tree before promotion.
|
|
2932
|
-
- Public files merge only into unowned paths. A public file cannot replace a generated file or directory, and duplicate configured stylesheet outputs fail before publication.
|
|
2933
|
-
- Ordinary compiler, bundler, public-copy, and `afterBuild()` failures leave the previous successful `dist` unchanged.
|
|
2934
|
-
- Same-root builds use an exclusive PID lock. Active overlap and dead/invalid lock files fail closed; after an operator removes a stale lock, the next admitted build recovers a backup left by interrupted promotion. Promotion is a guarded rollback/recovery sequence rather than a lock-free atomic directory exchange.
|
|
2935
|
-
- Successful replacement removes stale output and staging/backup artifacts. Development rebuild errors retain the previous on-disk HTML while the existing error overlay reports the source failure.
|
|
2936
|
-
- Route HTML writes use bounded batches. Keyed reverse/remove paths avoid repeated root-map work, and binding plus condition updates share one state commit dispatch.
|
|
2937
|
-
|
|
2938
|
-
### Performance
|
|
2939
|
-
|
|
2940
|
-
- Before final lock/recovery hardening, twenty-one alternating local replacement builds of the 1,011-page commerce fixture observed a 20,392.7 ms to 19,229.1 ms median change, 5.71% lower, while all 3,056 paths and 11,137,074 deploy bytes retained identical SHA-256 hashes.
|
|
2941
|
-
- The optimized 1,000-row browser graph decreased by 194 B raw / 23 B gzip. External exploratory browser comparisons and their non-publication limitations are documented in `PERFORMANCE.md`; they are not a release gate or maintained general ranking.
|
|
2942
|
-
|
|
2943
|
-
### Validation
|
|
2944
|
-
|
|
2945
|
-
- `npm run check`, `npm test`, `npm run test:package`, and all 190 tests pass.
|
|
2946
|
-
- Focused integration coverage verifies seven public/generated namespaces, configured-style collisions, late hook failure, successful stale-file removal, same-root overlap rejection, stale-lock diagnosis, interrupted-backup recovery after lock removal, and no staging/backup remnants.
|
|
2947
|
-
- Existing keyed identity/state, nested lists, reducer rows, SVG, effects, Workers, navigation, async ownership, and static zero-JavaScript behavior remain covered.
|
|
2948
|
-
- P0.6 ProjectSession and explicit root is next.
|
|
2949
|
-
|
|
2950
|
-
### Upgrade
|
|
2951
|
-
|
|
2952
|
-
```bash
|
|
2953
|
-
npm install @kudzujs/core@^0.8.32
|
|
2954
|
-
```
|
|
2955
|
-
|
|
2956
|
-
## 0.8.31 - Async native-handler ownership
|
|
2957
|
-
|
|
2958
|
-
Kudzu 0.8.31 completes P0.4 by tying every mounted native-handler context to its DOM registration lifetime. Async work may finish after route, keyed, or conditional removal, but it cannot write through ownership that no longer exists.
|
|
2959
|
-
|
|
2960
|
-
### Changed in 0.8.31
|
|
2961
|
-
|
|
2962
|
-
- Native registrations expose one active lifetime to direct setters, captured setters, queued commits, and captured object refs.
|
|
2963
|
-
- `unmountNative()` invalidates the registration before removing its listener. Enhanced navigation, keyed removal, and conditional removal use the shared unmount hook; non-persisted `pagehide` directly releases document registrations.
|
|
2964
|
-
- Late state writes become no-ops instead of recreating released state IDs; already queued commits clear without touching replacement DOM.
|
|
2965
|
-
- Captured object refs resolve to `null` after release, so a late handler cannot find a replacement node that reused the same compiler-owned ref ID.
|
|
2966
|
-
- Application promises are not cancelled, and no scheduler, task registry, component runtime, or public API is added.
|
|
2967
|
-
|
|
2968
|
-
### Performance
|
|
2969
|
-
|
|
2970
|
-
- Twenty-one alternating headless Chrome processes measured 5,000 synchronous native event dispatches at a 6.4 ms median for both `0.8.30` and `0.8.31`; the recorded ranges overlap.
|
|
2971
|
-
- The maintained `native-bubbling` fixture keeps the same eight JavaScript paths. `kudzu-native.js` and `kudzu-serialization.js` add 209 B raw / 94 B aggregate gzip; the runner rejects any other artifact change.
|
|
2972
|
-
- Environment, raw arrays, artifact bytes, methodology, and limitations are recorded in `PERFORMANCE.md`.
|
|
2973
|
-
|
|
2974
|
-
### Validation
|
|
2975
|
-
|
|
2976
|
-
- `npm run check`, `npm test`, `npm run test:package`, and all 189 tests pass.
|
|
2977
|
-
- Chrome starts async route and keyed-row handlers, releases and recreates their owners, and proves late state writes and refs cannot mutate replacement ownership. A persistent layout handler also proves non-persisted document disposal invalidates pending work.
|
|
2978
|
-
- Focused context checks cover queued direct commits and captured setters. The browser suite retains normal synchronous native event semantics; unaffected static routes remain zero JavaScript.
|
|
2979
|
-
- P0.5 atomic and collision-safe output is next.
|
|
2980
|
-
|
|
2981
|
-
### Upgrade
|
|
2982
|
-
|
|
2983
|
-
```bash
|
|
2984
|
-
npm install @kudzujs/core@^0.8.31
|
|
2985
|
-
```
|
|
2986
|
-
|
|
2987
|
-
## 0.8.30 - Graph failure diagnostics
|
|
2988
|
-
|
|
2989
|
-
Kudzu 0.8.30 completes P0.3 by making ordinary source-graph failures stop at the original importer before compilation, generated module loading, or `.kudzu` paths can obscure the source error.
|
|
2990
|
-
|
|
2991
|
-
### Changed in 0.8.30
|
|
2992
|
-
|
|
2993
|
-
- Reachability validates every relative runtime import and re-export in an ordinary reachable module instead of silently dropping unresolved edges.
|
|
2994
|
-
- Missing bound imports, side-effect imports, reachable helper imports, named/default forwarding, and `export *` report the importer file, line, column, and written specifier.
|
|
2995
|
-
- Every ordinary dynamic `import()` form is rejected during graph discovery, including relative, package, template-literal, and computed specifiers.
|
|
2996
|
-
- Ordinary and Worker traversal retain separate ownership, so Worker-only modules continue through Worker-specific graph diagnostics and cleanup rules.
|
|
2997
|
-
- Type-only edges and unreachable migration source remain excluded and cannot block a build.
|
|
2998
|
-
|
|
2999
|
-
### Compiler Boundary
|
|
3000
|
-
|
|
3001
|
-
- `ordinaryRuntimeDependencies()` is the single pre-codegen validator for ordinary runtime graph edges; downstream import rewriting remains a fail-closed assertion.
|
|
3002
|
-
- This release validates whether a relative runtime edge resolves to exactly one TypeScript file. Whether an existing target exports a requested name remains deferred to the planned module-symbol graph.
|
|
3003
|
-
- P0.3 adds no accepted source syntax, ProjectSession, export cache, public API, browser runtime, or generated capability bytes. P0.4 async native-handler invalidation is next.
|
|
3004
|
-
|
|
3005
|
-
### Validation
|
|
3006
|
-
|
|
3007
|
-
- `npm run check`, `npm test`, `npm run test:package`, and all 189 tests pass.
|
|
3008
|
-
- Focused in-memory and build fixtures cover missing page imports, reachable helper imports, re-exports, relative/package/computed dynamic imports, type-only exclusion, unreachable exclusion, and absence of generated `.kudzu` paths.
|
|
3009
|
-
- Existing Worker graph diagnostics, React/Router/Zustand migrations, keyed ownership, effects, navigation, and static-route zero-JavaScript behavior remain covered.
|
|
3010
|
-
|
|
3011
|
-
### Upgrade
|
|
3012
|
-
|
|
3013
|
-
```bash
|
|
3014
|
-
npm install @kudzujs/core@^0.8.30
|
|
3015
|
-
```
|
|
3016
|
-
|
|
3017
|
-
## 0.8.29 - Symbol-aware descriptor discovery
|
|
3018
|
-
|
|
3019
|
-
Kudzu 0.8.29 completes P0.2 by moving native handler, effect, binding, and list descriptor decisions from identifier spelling onto the source-local binding index introduced in 0.8.28.
|
|
3020
|
-
|
|
3021
|
-
### Changed in 0.8.29
|
|
3022
|
-
|
|
3023
|
-
- Native handlers and effects discover state, setters, reducers, imports, captures, and nested snapshots by lexical reference identity when the complete callback belongs to the source index.
|
|
3024
|
-
- Handler lowering consumes the same indexed identity used during discovery, so callback parameters and locals that shadow state, setters, reducers, imports, or captures remain untouched.
|
|
3025
|
-
- Reactive conditionals, bindings, keyed-list evaluators, and list state rewrites distinguish outer state from same-named nested callback parameters.
|
|
3026
|
-
- The command fast path accepts state and setter references only when they resolve outside the callback, and recognizes `console.log()` only when `console` is the actual browser global.
|
|
3027
|
-
- Effect resource validation distinguishes real `IntersectionObserver`, `requestAnimationFrame()`, and `cancelAnimationFrame()` globals from shadowed application bindings and matches cleanup to the exact observer or frame declaration.
|
|
3028
|
-
|
|
3029
|
-
### Compiler Boundary
|
|
3030
|
-
|
|
3031
|
-
- The binding index now recognizes normalized and original TypeScript node boundaries and exposes whether it directly owns an AST node.
|
|
3032
|
-
- Imported, specialized, or compiler-synthesized trees continue through the established conservative shadow walker rather than borrowing an unrelated source index.
|
|
3033
|
-
- P0.2 changes no public API, accepted source syntax, ModuleIR shape, browser runtime, or generated capability contract. P0.3 graph failure diagnostics is next.
|
|
3034
|
-
|
|
3035
|
-
### Validation
|
|
3036
|
-
|
|
3037
|
-
- `npm run check`, `npm test`, `npm run test:package`, and all 187 tests pass.
|
|
3038
|
-
- Focused tests cover shadowed imports, browser globals, state, setters, list parameters, JSON-safe HandlerIR/BindingIR round trips, and same-named effect resource cleanup.
|
|
3039
|
-
- Existing Context actions, keyed component callbacks, React Router search parameters, native events, effects, Workers, navigation, and static-route zero-JavaScript behavior remain covered.
|
|
3040
|
-
|
|
3041
|
-
### Upgrade
|
|
3042
|
-
|
|
3043
|
-
```bash
|
|
3044
|
-
npm install @kudzujs/core@^0.8.29
|
|
3045
|
-
```
|
|
3046
|
-
|
|
3047
|
-
## 0.8.28 - Source-local binding index
|
|
3048
|
-
|
|
3049
|
-
Kudzu 0.8.28 completes the first large-application compiler foundation by resolving source-local lexical bindings before descriptor discovery and lowering.
|
|
3050
|
-
|
|
3051
|
-
### Changed in 0.8.28
|
|
3052
|
-
|
|
3053
|
-
- A source-local binding index classifies value references as local declarations, parameters, imports, outer captures, known globals, or unresolved names with deterministic slots and source ranges.
|
|
3054
|
-
- The index models module, function parameter/body, block, loop, catch, switch, class, computed method, namespace, import, destructuring, `var`, `let`, and `const` scopes without adding a TypeScript Program or cross-module graph.
|
|
3055
|
-
- Reactive binding capture/import discovery uses lexical identity, so component locals named `document`, `location`, `history`, `navigator`, or `console` no longer become browser globals and shadowed callback parameters no longer become imports.
|
|
3056
|
-
- Reactive binding lowering rewrites only the indexed occurrences that resolve to state or capture bindings. Same-named nested parameters remain local.
|
|
3057
|
-
- Synthesized keyed expressions use the existing fail-safe path unless the complete expression can be indexed, preserving keyed row state and identity behavior.
|
|
3058
|
-
|
|
3059
|
-
### Performance And Architecture
|
|
3060
|
-
|
|
3061
|
-
- A focused 1,000-reference guard verifies one index construction followed by direct indexed lookups and reports construction/lookup timing without making a cross-machine performance claim.
|
|
3062
|
-
- The index is constructed after ordered normalization and parent repair, once per compiled source. It adds no public API, browser runtime, client metadata, or JavaScript bytes.
|
|
3063
|
-
- Native handler, effect, and remaining descriptor discovery still use the existing analysis path; symbol-aware migration of those consumers remains the next P0.2 scope.
|
|
3064
|
-
|
|
3065
|
-
### Validation
|
|
3066
|
-
|
|
3067
|
-
- `npm run check`, `npm run test:package`, and all 185 tests pass.
|
|
3068
|
-
- Browser integration verifies shadowed browser-global names through initial HTML and reactive evaluator updates.
|
|
3069
|
-
- React, Router, Zustand, keyed row, nested list, effect, Worker, navigation, and static-route zero-JavaScript behavior remain covered.
|
|
3070
|
-
|
|
3071
|
-
### Upgrade
|
|
3072
|
-
|
|
3073
|
-
```bash
|
|
3074
|
-
npm install @kudzujs/core@^0.8.28
|
|
3075
|
-
```
|
|
3076
|
-
|
|
3077
|
-
## 0.8.27 - Large-application compiler roadmap
|
|
3078
|
-
|
|
3079
|
-
Kudzu 0.8.27 records the evidence-backed path from the current static-first compiler to large production applications without adding a React runtime, generic client framework, or speculative resource API.
|
|
3080
|
-
|
|
3081
|
-
### Changed in 0.8.27
|
|
3082
|
-
|
|
3083
|
-
- A reduced fixture from E2B Dashboard preserves a callback-shared terminal handle, asynchronous generation token, BFCache retention, resume, and discard cleanup as the first concrete Goal C resource-ownership boundary.
|
|
3084
|
-
- Unsupported page-level mutable value refs now fail during source analysis with the source location and the existing effect-owned animation-frame exception instead of reaching the build-time DOM-ref runtime error.
|
|
3085
|
-
- Goal C records independent WebSocket/SSE, shared request, and optimistic transaction candidates while explicitly withholding store, resource, query, cache, Provider, subscription, and scheduler APIs.
|
|
3086
|
-
- The new large-application and AI-native execution plan audits the current compiler, IR, runtime, navigation, package, build, fixture, and benchmark boundaries and orders the next twelve independently verifiable PRs.
|
|
3087
|
-
- The next implementation is fixed as a source-local binding index followed by symbol-aware descriptor discovery; ecosystem features cannot skip those semantic dependencies.
|
|
3088
|
-
|
|
3089
|
-
### Architecture Boundary
|
|
3090
|
-
|
|
3091
|
-
- Existing ComponentAnalysis, ModuleIR, RouteIR, CapabilityIR, complete HTML, direct DOM ownership, native navigation, and capability runtimes remain the incremental foundation.
|
|
3092
|
-
- The plan generalizes symbol identity, semantic state operations, component/module dataflow, resource/range ownership, artifact references, code splitting, diagnostics, migration analysis, and application-scale evidence without introducing a browser component tree.
|
|
3093
|
-
- React ecosystem support is classified as Native, Compiled, Migrated, Adapter, Partial, or Unsupported so package-specific knowledge can move behind a compatibility boundary instead of accumulating in the core compiler.
|
|
3094
|
-
|
|
3095
|
-
### Validation
|
|
3096
|
-
|
|
3097
|
-
- `npm run check`, `npm run test:package`, and all 176 tests pass.
|
|
3098
|
-
- The E2B fixture remains an expected failure at its proven source boundary; no browser resource runtime or public API is emitted.
|
|
3099
|
-
- Static-route zero JavaScript, existing animation-frame support, keyed-row diagnostics, setter-child diagnostics, and all current browser ownership behavior remain covered.
|
|
3100
|
-
|
|
3101
|
-
### Upgrade
|
|
3102
|
-
|
|
3103
|
-
```bash
|
|
3104
|
-
npm install @kudzujs/core@^0.8.27
|
|
3105
|
-
```
|
|
3106
|
-
|
|
3107
|
-
## 0.8.26 - Goal B benchmark hardening
|
|
3108
|
-
|
|
3109
|
-
Kudzu 0.8.26 makes the retained Goal B optimizations reproducible and directly regression-tested without changing generated runtime behavior or authoring support.
|
|
3110
|
-
|
|
3111
|
-
### Changed in 0.8.26
|
|
3112
|
-
|
|
3113
|
-
- `benchmark:commerce` requires byte-identical candidate output by default; `EXPECTED_CHANGES` explicitly preserves historical comparisons with known artifact deltas.
|
|
3114
|
-
- The standard suite verifies that exact route-entry sources transform once per build, distinct sources do not collide, and a new build owns a fresh transform map.
|
|
3115
|
-
- List runtime generation tests retain the measured bulk-mount threshold, majority guards, nested/owner exclusions, and per-root fallback.
|
|
3116
|
-
- The architecture packet now covers `0.8.25`, records Goal B baseline evidence and deliberate gaps, and closes the retained-experiment checklist.
|
|
3117
|
-
|
|
3118
|
-
### Performance Validation
|
|
3119
|
-
|
|
3120
|
-
- Seven alternating `v0.8.24` and current-tree commerce builds emitted 1,011 pages and 3,056 files with no changed deploy hash.
|
|
3121
|
-
- The measured medians were 14,766.5 ms and 12,202.4 ms. This validates the maintained runner and release direction but is not attributed to one optimization because the revisions include all `0.8.25` compiler-boundary changes.
|
|
3122
|
-
- No new runtime bytes, scheduler, persistent cache, retained tree, or public browser capability was added.
|
|
3123
|
-
|
|
3124
|
-
### Validation
|
|
3125
|
-
|
|
3126
|
-
- `npm run check`, `npm run test:package`, and all 175 tests pass.
|
|
3127
|
-
- The exact-output commerce runner passed seven alternating 1,011-page builds.
|
|
3128
|
-
- No accepted syntax, runtime behavior, DOM ownership, effect cleanup, or `create-kudzu` template changed.
|
|
3129
|
-
|
|
3130
|
-
### Upgrade
|
|
3131
|
-
|
|
3132
|
-
```bash
|
|
3133
|
-
npm install @kudzujs/core@^0.8.26
|
|
3134
|
-
```
|
|
3135
|
-
|
|
3136
|
-
## 0.8.25 - Exact route-entry reuse
|
|
3137
|
-
|
|
3138
|
-
Kudzu 0.8.25 removes measured repeated esbuild work from large multi-route builds, strengthens compiler boundary validation, and makes package publication gates explicit without changing generated deploy bytes or browser behavior.
|
|
3139
|
-
|
|
3140
|
-
### Changed in 0.8.25
|
|
3141
|
-
|
|
3142
|
-
- Generated native, parameter, and effect route entries reuse one build-local esbuild result when their complete source is byte-identical after route-relative URLs are resolved.
|
|
3143
|
-
- Normalization passes now declare an immutable-root contract and reject any result that is not a TypeScript `SourceFile`.
|
|
3144
|
-
- Finalized ModuleIR rejects invalid local slots and dangling signal, handler, derived, keyed-parent, keyed-child, keyed-selector, and ownership references.
|
|
3145
|
-
- CI covers the minimum Node 22 runtime and the Node 24 Chrome suite, while release jobs exercise the packed package and verify package, lockfile, tag, and registry versions.
|
|
3146
|
-
- Missing `0.8.21`, `0.8.22`, and `0.8.23` release pages and their canonical sitemap entries are restored.
|
|
3147
|
-
|
|
3148
|
-
### Performance
|
|
3149
|
-
|
|
3150
|
-
- Seven alternating clean builds of the public 1,000-product, 1,011-page fixture measured 12,581.4 ms with exact-source reuse versus 13,851.0 ms with repeated transformation, a 9.17% improvement.
|
|
3151
|
-
- Every deploy path and SHA-256 hash matched. The map is scoped to one build and only the three generated route-entry families; no persistent or generalized transform cache was added.
|
|
3152
|
-
- Raw arrays, environment, fixture revision, methodology, and limitations are recorded in `PERFORMANCE.md`.
|
|
3153
|
-
|
|
3154
|
-
### Validation
|
|
3155
|
-
|
|
3156
|
-
- `npm run check`, `npm run test:package`, and all 174 tests pass.
|
|
3157
|
-
- The packed-package smoke test installs the produced tarball into a temporary consumer, imports both public entry points, runs the packed CLI, and verifies generated HTML.
|
|
3158
|
-
- The external 1,011-page benchmark produced byte-identical deploy manifests across both targets.
|
|
3159
|
-
- No accepted syntax, public runtime API, VDOM, hydration, scheduler, retained browser component tree, or `create-kudzu` template change was added.
|
|
3160
|
-
|
|
3161
|
-
### Upgrade
|
|
3162
|
-
|
|
3163
|
-
```bash
|
|
3164
|
-
npm install @kudzujs/core@^0.8.25
|
|
3165
|
-
```
|
|
3166
|
-
|
|
3167
|
-
## 0.8.24 - Measured Goal B optimizations
|
|
3168
|
-
|
|
3169
|
-
Kudzu 0.8.24 starts the architecture optimization Goal B with two benchmark-proven optimizations for large keyed restoration and large multi-route builds while preserving complete HTML, direct DOM ownership, and existing compiler output. This is distinct from the completed historical Worker capability milestone in `GOAL_B.md`.
|
|
3170
|
-
|
|
3171
|
-
### Changed in 0.8.24
|
|
3172
|
-
|
|
3173
|
-
- A maintained `npm run benchmark:keyed` fixture measures 2,000 keyed rows with row-local state, reactive slicing/search, bulk restoration, retained-heavy append, reversal, DOM identity, reset state, and restored handlers across fresh Chrome profiles.
|
|
3174
|
-
- Top-level flat lists batch mount-hook discovery through their connected parent only when more than 32 additions dominate both the next list and parent children. Nested lists, shared containers, and small or retained-heavy additions keep per-root mounting.
|
|
3175
|
-
- `applyNormalizationPasses()` repairs TypeScript parent pointers only after a pass returns a structurally changed `SourceFile`; validators and no-op passes no longer walk the complete AST again.
|
|
3176
|
-
- A focused test proves changed normalization output has repaired parent links before the next pass runs.
|
|
3177
|
-
- Goal B records identical generated route entries as the next measured esbuild-transform investigation; no cache or generalized build system was added without isolated evidence.
|
|
3178
|
-
|
|
3179
|
-
### Performance
|
|
3180
|
-
|
|
3181
|
-
- Twenty-one fresh Chrome profiles measured 2,000-row restoration at 21.1 ms versus 26.3 ms for `0.8.23`, a 19.77% improvement. A retained-heavy 33-row append showed no material change at 2.7 ms versus 2.6 ms.
|
|
3182
|
-
- The keyed route adds 127 B raw / 35 B aggregate gzip JavaScript. Filter, reverse, and clean-build distributions establish no material regression.
|
|
3183
|
-
- Twenty-one alternating clean builds of [`SimYunSup/kudzu-based-bench`](https://github.com/SimYunSup/kudzu-based-bench)'s 1,000-product, 1,011-page Kudzu fixture measured 6,266.5 ms versus 6,684.7 ms for `0.8.23`, a 6.26% improvement.
|
|
3184
|
-
- Both commerce builds emitted the same 3,056 files. Only `assets/kudzu-list.js` changed for the independently measured runtime optimization; normalization changed no output bytes.
|
|
3185
|
-
- Exact keyed worktree setup and the checked-in `benchmark:commerce` paired runner are documented in `PERFORMANCE.md` with raw arrays and limitations.
|
|
3186
|
-
|
|
3187
|
-
### Validation
|
|
3188
|
-
|
|
3189
|
-
- `npm run check` and all 172 tests pass, including the new normalization boundary check.
|
|
3190
|
-
- Node 22 focused compiler checks and the maintained Worker benchmark pass.
|
|
3191
|
-
- Chrome-backed keyed list, selector, row-hook, Worker ownership, and the new large keyed benchmark checks pass.
|
|
3192
|
-
- Before release-content updates, the complete site plus representative list, keyed-row-hook, and navigation builds retained identical file lists; only `assets/kudzu-list.js` changed, and normalized `.kudzu` trees remained identical to `v0.8.23`.
|
|
3193
|
-
- No accepted syntax, public API behavior, VDOM, hydration, scheduler, cache, retained browser component tree, or `create-kudzu` template change was added.
|
|
3194
|
-
|
|
3195
|
-
### Upgrade
|
|
3196
|
-
|
|
3197
|
-
```bash
|
|
3198
|
-
npm install @kudzujs/core@^0.8.24
|
|
3199
|
-
```
|
|
3200
|
-
|
|
3201
|
-
## 0.8.23 - Source compiler boundary
|
|
3202
|
-
|
|
3203
|
-
Kudzu 0.8.23 completes the Goal A compiler foundation by moving source normalization, TSX semantic analysis, ModuleIR finalization, handler generation, and build-module generation behind one explicit no-write source compiler result.
|
|
3204
|
-
|
|
3205
|
-
### Changed in 0.8.23
|
|
3206
|
-
|
|
3207
|
-
- `compileSource()` returns a JSON-safe source result containing the project-relative build module, component analysis, ModuleIR, optional handler module, and imported assets without writing to `.kudzu` or `dist`.
|
|
3208
|
-
- `createKudzuTransformer()` and all TypeScript AST feature analysis moved from `framework/build.mjs` to `framework/compiler/source-compiler.mjs`.
|
|
3209
|
-
- Shared source resolution moved to `source-graph.mjs`; shared URL and filesystem path conversion moved to `path-helpers.mjs` and is reused by the development server.
|
|
3210
|
-
- Worker graph emission is owned and exported directly by `worker-compiler.mjs`; the source result retains only JSON-safe Worker edges and rewritten source.
|
|
3211
|
-
- `build.mjs` decreased from 3,732 to 744 lines and now coordinates discovery, source results, RouteIR, CapabilityIR, and artifact emission.
|
|
3212
|
-
|
|
3213
|
-
### Goal A boundary
|
|
3214
|
-
|
|
3215
|
-
- Source analysis consumes all AST-bearing state before returning its result. No `ts.Node`, `Map`, `Set`, function, closure, or Symbol crosses into build orchestration.
|
|
3216
|
-
- `compileSource()` returns project-relative generated paths and client import roots. Existing absolute paths remain only in source-located diagnostics and are normalized when comparing detached worktrees.
|
|
3217
|
-
- RouteIR v1 and CapabilityIR v1 remain unchanged, and `core.mjs` remains authoritative for complete HTML and browser ownership IDs.
|
|
3218
|
-
- Goal B optimization remains deferred; `0.8.23` is the corrected Goal A completion baseline.
|
|
3219
|
-
- No accepted syntax, public API behavior, runtime capability, VDOM, hydration, component rerender, or retained browser component tree was added.
|
|
3220
|
-
|
|
3221
|
-
### Validation
|
|
3222
|
-
|
|
3223
|
-
- The complete suite passes 171/171 tests, including a direct no-write, project-relative, JSON-round-trippable `compileSource()` boundary check.
|
|
3224
|
-
- Node 22 type checks, the 135-page complete-site build, and all 171 tests pass.
|
|
3225
|
-
- The complete site and eight representative binding, keyed-row, effect, Worker, parameter, navigation, config, and package-handler deploy trees are byte-identical to `v0.8.22`; their `.kudzu` trees match after normalizing only checkout-root source locations.
|
|
3226
|
-
- An invalid reducer fixture retains the same source file, line, column, and diagnostic text.
|
|
3227
|
-
- Worker and window graph files remain byte-identical. Seven interleaved clean Node 22 builds measured a 287.0 ms candidate median against 287.7 ms for `v0.8.22`; raw arrays and provenance are recorded in `PERFORMANCE.md`.
|
|
3228
|
-
- `create-kudzu` remains 0.1.101 because its unchanged template already accepts `@kudzujs/core@^0.8.15`.
|
|
3229
|
-
|
|
3230
|
-
### Upgrade
|
|
3231
|
-
|
|
3232
|
-
```bash
|
|
3233
|
-
npm install @kudzujs/core@^0.8.23
|
|
3234
|
-
```
|
|
3235
|
-
|
|
3236
|
-
## 0.8.22 - Versioned compiler foundation
|
|
3237
|
-
|
|
3238
|
-
Kudzu 0.8.22 versions the rendered route plan as RouteIR v1 and the pure capability projection as CapabilityIR v1 while source-local ModuleIR seams and focused artifact generators preserve existing output.
|
|
3239
|
-
|
|
3240
|
-
### Changed in 0.8.22
|
|
3241
|
-
|
|
3242
|
-
- The existing `renderPage().plan` is RouteIR v1 rather than a duplicated route representation.
|
|
3243
|
-
- Route states add a deterministic route-local numeric `slot`; existing string `id` values remain authoritative browser/DOM identities and `name` remains readable development metadata.
|
|
3244
|
-
- The existing pure capability manifest is CapabilityIR v1. Route and capability consumers reject unsupported versions.
|
|
3245
|
-
- List, parameter, core, effect, binding, native, and navigation runtime generation moved from `build.mjs` into focused generator modules with narrow inputs and no filesystem ownership.
|
|
3246
|
-
- Required authored-runtime source anchors fail closed instead of silently retaining stale branches.
|
|
3247
|
-
- `build.mjs` decreased from 3,999 to 3,732 lines and now coordinates generator results and artifact emission rather than containing those feature semantics.
|
|
3248
|
-
|
|
3249
|
-
### Goal A boundary
|
|
3250
|
-
|
|
3251
|
-
- ModuleIR slots identify source-local compiler records; RouteIR state slots identify positions in one rendered plan; browser IDs continue to own DOM/runtime behavior. The namespaces are deliberately independent.
|
|
3252
|
-
- `core.mjs` remains authoritative for complete HTML, route/layout IDs, conditions, keyed paths, effect lifetimes, and exact cleanup.
|
|
3253
|
-
- CapabilityIR selects shared runtime families and branches; RouteIR and ModuleIR references retain route entries, handlers, and Workers. Static pages remain complete documents with zero JavaScript.
|
|
3254
|
-
- Goal B optimization remains deferred; the final source compiler boundary and corrected Goal A completion baseline follow in `0.8.23`.
|
|
3255
|
-
- No accepted syntax, public API behavior, runtime capability, VDOM, hydration, component rerender, or retained browser component tree was added.
|
|
3256
|
-
|
|
3257
|
-
### Validation
|
|
3258
|
-
|
|
3259
|
-
- The complete suite passes 170/170 tests, including RouteIR JSON round-trip and slots, CapabilityIR JSON round-trip/version rejection, fail-closed generator contracts, list/parameter/navigation generation, lifecycle cleanup, and development restoration by readable state name.
|
|
3260
|
-
- `npm run check`, focused Node 22 compiler tests, and a Node 22 complete-site build pass.
|
|
3261
|
-
- The complete site plus six representative binding, list, effect, Worker, runtime-parameter, and navigation deploy trees are byte-identical to `v0.8.21`; normalized RouteIR meaning is identical in all seven comparisons.
|
|
3262
|
-
- Worker and window graph files remain byte-identical. Seven interleaved clean builds measured equal 250.1 ms medians; raw arrays and provenance are recorded in `PERFORMANCE.md`.
|
|
3263
|
-
- Release-blocking architecture audits drove full IR schema validation, accurate reachability ownership, and fail-closed source contracts before publication.
|
|
3264
|
-
- `create-kudzu` remains 0.1.101 because its unchanged template already accepts `@kudzujs/core@^0.8.15`.
|
|
3265
|
-
|
|
3266
|
-
### Upgrade
|
|
3267
|
-
|
|
3268
|
-
```bash
|
|
3269
|
-
npm install @kudzujs/core@^0.8.22
|
|
3270
|
-
```
|
|
3271
|
-
|
|
3272
|
-
## 0.8.21 - Explicit effect ownership
|
|
3273
|
-
|
|
3274
|
-
Kudzu 0.8.21 completes the next Goal A source-analysis seam: every supported effect now registers deterministic JSON-safe setup, cleanup, dependency, ownership, source, and Worker-edge data before existing build-time rendering allocates concrete lifecycle IDs.
|
|
3275
|
-
|
|
3276
|
-
### Changed in 0.8.21
|
|
3277
|
-
|
|
3278
|
-
- EffectIR links setup to finalized HandlerIR and records cleanup, ordered signal and DerivedIR dependencies, subscriptions, dependency state snapshots, and keyed-item fields.
|
|
3279
|
-
- Component and keyed ownership retain lexical component provenance and KeyedBlockIR slots, including specialized imported rows.
|
|
3280
|
-
- Relative TypeScript Worker rewriting returns functional callback and edge results; rendered Worker emission derives only from EffectIR rather than a build-wide mutable reference array.
|
|
3281
|
-
- Transformed effect calls consume the registered EffectIR dependency and ownership record before final setup HandlerIR slot resolution.
|
|
3282
|
-
- Effect dependency classification and cleanup-owned browser resource validation moved to `compiler/effect-analysis.mjs`; transformer-wide component and keyed effect AST side tables were removed.
|
|
3283
|
-
- Mixed direct and derived dependencies create DerivedIR only for derived expressions while preserving authored dependency order.
|
|
3284
|
-
|
|
3285
|
-
### Goal A boundary
|
|
3286
|
-
|
|
3287
|
-
- `core.mjs` and the existing route plan remain authoritative for concrete route/layout/conditional/keyed effect IDs, mounting, stale-write invalidation, and cleanup order; ModuleIR does not duplicate RouteIR.
|
|
3288
|
-
- EffectIR owns source-analysis facts and Worker graph edges. Route-specific effect codegen continues to consume rendered descriptors without rediscovering TSX semantics.
|
|
3289
|
-
- No accepted syntax, public API, browser capability, VDOM, hydration, component rerender, or retained browser component tree was added.
|
|
3290
|
-
- Goal A continues with the `0.8.22` RouteIR, CapabilityIR, numeric-slot, and final architecture/output audit.
|
|
3291
|
-
|
|
3292
|
-
### Validation
|
|
3293
|
-
|
|
3294
|
-
- The complete suite passes 170/170 tests, including EffectIR JSON round-trip, mixed dependencies, imported keyed provenance, Worker rendered exclusion and `about:blank` replacement, conditional/navigation ownership, stale-write isolation, and cleanup.
|
|
3295
|
-
- `npm run check`, focused Node 22 compiler tests, and a Node 22 complete-site build pass.
|
|
3296
|
-
- Before release-content updates, the complete 135-page site plus `effect-dependencies`, `keyed-effects`, and `worker-effects` output trees were byte-identical to `v0.8.20`.
|
|
3297
|
-
- Worker and window graph files remain byte-identical. Seven interleaved clean builds measured a 253.0 ms candidate median against 255.6 ms for `v0.8.20`; raw arrays and provenance are recorded in `PERFORMANCE.md`.
|
|
3298
|
-
- A release-blocking architecture audit found no implementation or runtime-correctness blockers.
|
|
3299
|
-
- `create-kudzu` remains 0.1.101 because its unchanged template already accepts `@kudzujs/core@^0.8.15`.
|
|
3300
|
-
|
|
3301
|
-
### Upgrade
|
|
3302
|
-
|
|
3303
|
-
```bash
|
|
3304
|
-
npm install @kudzujs/core@^0.8.21
|
|
3305
|
-
```
|
|
3306
|
-
|
|
3307
|
-
## 0.8.20 - Explicit keyed ownership
|
|
3308
|
-
|
|
3309
|
-
Kudzu 0.8.20 completes the next Goal A source-analysis boundary: keyed collection sites now finalize into deterministic JSON-safe ownership records before the existing build-time renderer allocates DOM identity and lifecycle state.
|
|
3310
|
-
|
|
3311
|
-
### Changed in 0.8.20
|
|
3312
|
-
|
|
3313
|
-
- KeyedBlockIR records parent/child slots, collection signal or calculated binding, key/index policy, owner field, selector reference and states, source provenance, and static status.
|
|
3314
|
-
- Recursive same-file and imported row expansion records every component-specialization slot, including stateless intermediate components.
|
|
3315
|
-
- Row states and refs retain their specialization owner and declaration source.
|
|
3316
|
-
- Command, native, effect, list-expression, list-conditional, and calculated-collection HandlerIR/BindingIR records link to their owning keyed block.
|
|
3317
|
-
- Transformer-wide keyed value, condition, event, nested-list, effect, rendered-list, and alias AST side tables were removed; temporary AST stays inside immediate source-local validation and lowering.
|
|
3318
|
-
- The existing route list descriptor now has an explicit TypeScript shape without changing its serialized data.
|
|
3319
|
-
|
|
3320
|
-
### Goal A boundary
|
|
3321
|
-
|
|
3322
|
-
- `core.mjs` remains authoritative for final list IDs, row key paths, route descriptors, complete HTML, SVG context, state/ref/effect allocation, and exact release.
|
|
3323
|
-
- Effect setup, cleanup, dependency, Worker, and lifetime ownership remains on the existing path until EffectIR in `0.8.21`.
|
|
3324
|
-
- No accepted syntax, public API, browser capability, VDOM, hydration, component rerender, or retained browser component tree was added.
|
|
3325
|
-
|
|
3326
|
-
### Validation
|
|
3327
|
-
|
|
3328
|
-
- The complete suite passes 168/168 tests, including deterministic KeyedBlockIR JSON round-trip and calculated, nested, recursive-component, selector, state, ref, handler, binding, effect, and SVG ownership.
|
|
3329
|
-
- Before release-content updates, the complete site `dist` and seven representative keyed fixture output trees matched `v0.8.19`; detached-worktree roots were normalized only in existing `.kudzu` source strings.
|
|
3330
|
-
- The keyed list runtime remains byte-identical at 21,831 B raw / 6,930 B gzip. A same-volume 21-run interleaved comparison measured a 0.52% lower candidate median; raw arrays and provenance are recorded in `PERFORMANCE.md`.
|
|
3331
|
-
- `create-kudzu` remains 0.1.101 because its unchanged template already accepts `@kudzujs/core@^0.8.15`.
|
|
3332
|
-
|
|
3333
|
-
### Upgrade
|
|
3334
|
-
|
|
3335
|
-
```bash
|
|
3336
|
-
npm install @kudzujs/core@^0.8.20
|
|
3337
|
-
```
|
|
3338
|
-
|
|
3339
|
-
## 0.8.19 - Handler, binding, and derived IR
|
|
3340
|
-
|
|
3341
|
-
Kudzu 0.8.19 completes the next Goal A source-analysis boundary: native callbacks, reactive bindings, list evaluators, imports, and pure derived expressions now finalize into JSON-safe ModuleIR before mechanical artifact codegen.
|
|
3342
|
-
|
|
3343
|
-
### Changed in 0.8.19
|
|
3344
|
-
|
|
3345
|
-
- Native and effect callback exports retain explicit roles, signals, setters, captures, snapshot policy, imports, source ranges, and finalized export source in HandlerIR.
|
|
3346
|
-
- Reactive bindings, list expressions, and list condition evaluators retain explicit states, captures, parameters, imports, and deterministic module-export slots in BindingIR.
|
|
3347
|
-
- Rendered list selectors and derived effect dependencies use the existing tagged collection-expression language as canonical DerivedIR; transformed build source reads back the registered records.
|
|
3348
|
-
- Reducer, Context, Zustand, package-import, nested snapshot, and scope semantics finish lowering while source AST and diagnostics are still available.
|
|
3349
|
-
- `handler-codegen.mjs` imports no TypeScript or AST helpers. It renders the finalized ordered imports and concatenates generated HandlerIR/BindingIR export source.
|
|
3350
|
-
- The previous semantic artifact arrays containing callback/expression AST, `Map`, and `Set` values were deleted. They remain only inside the source-local session until finalization and do not cross the IR boundary.
|
|
3351
|
-
|
|
3352
|
-
### Goal A boundary
|
|
3353
|
-
|
|
3354
|
-
- Effect lifetime, cleanup, dependencies, Worker edges, and ownership remain on the existing path until EffectIR in `0.8.21`; only their generated callback exports join HandlerIR now.
|
|
3355
|
-
- Keyed DOM ownership remains on the existing path until KeyedBlockIR in `0.8.20`; list evaluators and pure selectors are explicit without moving key-path ownership early.
|
|
3356
|
-
- `core.mjs` remains authoritative for complete HTML, final route/layout state IDs, and the serializable route plan.
|
|
3357
|
-
- No accepted syntax, public API, runtime capability, VDOM, hydration, component rerender, or retained browser component tree was added.
|
|
3358
|
-
|
|
3359
|
-
### Validation
|
|
3360
|
-
|
|
3361
|
-
- The complete suite passes 167/167 tests, including ModuleIR JSON round-trip, command-only exclusion, native async handlers, bindings, package imports, reducer, Context, Zustand, list-derived, and effect-derived contracts.
|
|
3362
|
-
- Before release-content updates, the complete site `dist` and nine representative fixture output trees matched `v0.8.18`; detached-worktree roots were normalized only in existing `.kudzu` diagnostic strings.
|
|
3363
|
-
- Worker and window graphs remain byte-identical. A same-volume 21-run interleaved comparison measured a 0.32% lower candidate median; raw arrays, file lists, and environment are recorded in `PERFORMANCE.md`.
|
|
3364
|
-
- `create-kudzu` remains 0.1.101 because its unchanged template already accepts `@kudzujs/core@^0.8.15`.
|
|
3365
|
-
|
|
3366
|
-
### Upgrade
|
|
3367
|
-
|
|
3368
|
-
```bash
|
|
3369
|
-
npm install @kudzujs/core@^0.8.19
|
|
3370
|
-
```
|
|
3371
|
-
|
|
3372
|
-
## 0.8.18 - Explicit component ownership
|
|
3373
|
-
|
|
3374
|
-
Kudzu 0.8.18 completes the next Goal A source-analysis seam: state, setters, props, refs, IDs, and supported component specializations now have one ordered JSON-safe ownership result without changing final route allocation or deploy behavior.
|
|
3375
|
-
|
|
3376
|
-
### Changed in 0.8.18
|
|
3377
|
-
|
|
3378
|
-
- Every compiled non-Worker source retains component analysis alongside its transformed build module and optional handler module; Worker graphs keep their existing dedicated result.
|
|
3379
|
-
- Lexical owners record ordered state and setter slots, destructured prop shape, object refs, deterministic IDs, and honest source ranges.
|
|
3380
|
-
- Specialized calls record supplied/defaulted props, generated state/ref/ID ownership, and direct links to parent, reducer, custom-hook, or Context signals.
|
|
3381
|
-
- Command IR resolves owner identity per state command instead of assigning one setter-map scope to an entire handler. Mixed parent/child and nested keyed commands remain distinct.
|
|
3382
|
-
- Context consumer signals point to a stable Provider source owner; repeated imported and structural specializations retain independent compile-time ownership.
|
|
3383
|
-
- AST `WeakMap` indexes remain private to immediate source rewriting. They do not cross the JSON-safe source result or become a runtime component model.
|
|
3384
|
-
|
|
3385
|
-
### Goal A boundary
|
|
3386
|
-
|
|
3387
|
-
- `core.mjs` still executes transformed components at build time and allocates final route/layout state, ref, ID, conditional, and keyed ownership in the same order.
|
|
3388
|
-
- Initial values, browser state IDs, complete HTML, and the serializable route plan remain authoritative runtime inputs; the component result does not duplicate them.
|
|
3389
|
-
- HandlerIR, BindingIR, and DerivedIR are the planned `0.8.19` seam. KeyedBlockIR and EffectIR remain on their existing paths until `0.8.20` and `0.8.21`.
|
|
3390
|
-
- No accepted syntax, public API, VDOM, hydration, component rerender, or retained browser component tree was added.
|
|
3391
|
-
|
|
3392
|
-
### Validation
|
|
3393
|
-
|
|
3394
|
-
- The complete suite passes 167/167 tests, including JSON round-trip, per-signal owner, repeated/conditional/imported state, setter adapter, ref, ID, Context, reducer, and nested keyed ownership contracts.
|
|
3395
|
-
- Before release-content updates, the complete `dist` and `.kudzu` trees were byte-identical to `v0.8.17`.
|
|
3396
|
-
- Worker and window graphs remain byte-identical. A same-volume 21-run interleaved comparison measured a 2.43% candidate median difference, below the 5% architecture gate; raw arrays and environment are recorded in `PERFORMANCE.md`.
|
|
3397
|
-
- `create-kudzu` remains 0.1.101 because its unchanged template already accepts `@kudzujs/core@^0.8.15`.
|
|
3398
|
-
|
|
3399
|
-
### Upgrade
|
|
3400
|
-
|
|
3401
|
-
```bash
|
|
3402
|
-
npm install @kudzujs/core@^0.8.18
|
|
3403
|
-
```
|
|
3404
|
-
|
|
3405
|
-
## 0.8.17 - Command ModuleIR
|
|
3406
|
-
|
|
3407
|
-
Kudzu 0.8.17 lands the first real Goal A vertical slice: supported command handlers are recognized as plain JSON-safe data, registered in a sparse per-source ModuleIR, and lowered back through focused source codegen without changing deploy output.
|
|
3408
|
-
|
|
3409
|
-
### Changed in 0.8.17
|
|
3410
|
-
|
|
3411
|
-
- Direct setter arithmetic, functional setter arithmetic, primitive setter values, and state logging now produce plain Command IR instead of generated TypeScript array nodes during analysis.
|
|
3412
|
-
- ModuleIR assigns deterministic numeric signal and handler slots while retaining readable state names, lexical state-owner keys, and original source ranges when they exist.
|
|
3413
|
-
- Command codegen consumes only ModuleIR signal and handler data to reconstruct the existing `__kBehavior()` call; it performs no source analysis.
|
|
3414
|
-
- Signed literals preserve unary-plus and negative-zero source semantics through JSON-safe syntax metadata. Non-finite numeric forms stay on the existing generic handler path.
|
|
3415
|
-
- Same-named states in independent component owners receive distinct IR slots, while nested handlers sharing one setter environment reuse the same signal identity.
|
|
3416
|
-
- Synthetic specialized handlers omit invented source positions; imported/original handlers retain normalized repository-relative source provenance.
|
|
3417
|
-
|
|
3418
|
-
### Goal A boundary
|
|
3419
|
-
|
|
3420
|
-
- The first active ModuleIR slice contains lexical signals and command handlers only. `core.mjs` remains authoritative for initial values, final route/layout state IDs, complete HTML, and the serializable route plan.
|
|
3421
|
-
- State/props/ref/component specialization is the planned `0.8.18` seam. Bindings, derived values, keyed blocks, and effects remain on their existing paths until their own explicit results replace AST side tables.
|
|
3422
|
-
- No VDOM, hydration, component rerender, runtime component tree, public API, or accepted syntax was added.
|
|
3423
|
-
|
|
3424
|
-
### Validation
|
|
3425
|
-
|
|
3426
|
-
- The complete suite passes 166/166 tests, including JSON round-trip, numeric edge, lexical owner, command codegen, specialized-component, and existing generic-handler contracts.
|
|
3427
|
-
- Before release-content updates, the unchanged source site `dist`, Counter build module, route plan, and command runtime were byte-identical to `v0.8.16`; the final release adds only its expected version, homepage, documentation, and release-page content.
|
|
3428
|
-
- The tracked Worker and window graphs remain byte-identical. A same-volume 21-run comparison found no build regression; raw arrays and environment are recorded in `PERFORMANCE.md`.
|
|
3429
|
-
- `create-kudzu` remains 0.1.101 because its unchanged template already accepts `@kudzujs/core@^0.8.15`.
|
|
3430
|
-
|
|
3431
|
-
### Upgrade
|
|
3432
|
-
|
|
3433
|
-
```bash
|
|
3434
|
-
npm install @kudzujs/core@^0.8.17
|
|
3435
|
-
```
|
|
3436
|
-
|
|
3437
|
-
## 0.8.16 - Compiler analysis boundaries
|
|
3438
|
-
|
|
3439
|
-
Kudzu 0.8.16 continues the behavior-preserving compiler decomposition: source-local descriptors, the pure collection language, command fast paths, reduced Zustand migration, and route capability projection now have explicit ownership outside build orchestration.
|
|
3440
|
-
|
|
3441
|
-
### Changed in 0.8.16
|
|
3442
|
-
|
|
3443
|
-
- One descriptor session owns deterministic native-handler, effect, reactive-binding, list-evaluator, and client-import registration for each source module.
|
|
3444
|
-
- Collection roots, aliases, imported transforms, selector pipelines, and pure expression IR are shared directly by React migration, reactive JSX, effects, and keyed-list discovery.
|
|
3445
|
-
- Direct setter arithmetic and literals remain compact command descriptors instead of becoming generic browser handler functions.
|
|
3446
|
-
- Reduced Zustand store analysis and normalization now share one focused compiler pass while retaining the existing accepted and rejected migration boundary.
|
|
3447
|
-
- Rendered route plans project through one pure capability manifest before runtime specialization and artifact emission.
|
|
3448
|
-
- Route capability metadata is keyed by route identity, and effect descriptor registry ownership remains private to the source descriptor session.
|
|
3449
|
-
|
|
3450
|
-
### Architecture continuation
|
|
3451
|
-
|
|
3452
|
-
- `docs/next-architecture` records the current compiler responsibility map, Goal A through D decisions, the `0.8.17` through `0.8.22` Goal A sequence, version policy, and performance gates.
|
|
3453
|
-
- Goal A proceeds with a sparse JSON-safe ModuleIR and one Counter command vertical slice next; it does not add a VDOM, hydration, component rerender, store/resource runtime, router, or React island.
|
|
3454
|
-
- Component specialization, keyed-list ownership, and effect analysis remain in the main transformer until their AST-identity side tables can be replaced by explicit results rather than hidden behind large context objects.
|
|
3455
|
-
|
|
3456
|
-
### Validation
|
|
3457
|
-
|
|
3458
|
-
- `build.mjs` is 3,837 lines, down from 4,351 in 0.8.15, while retaining build orchestration and the intentionally coupled semantic transformer.
|
|
3459
|
-
- The complete suite passes 163/163 tests, including focused descriptor, collection IR, command, Zustand, and capability-manifest contracts.
|
|
3460
|
-
- A 21-run round-robin comparison on the same Apple M3 temp volume retained exact Worker and window graph bytes. The `0.8.16` 816.5 ms median was 3.75% above the `0.8.15` 787.0 ms baseline with overlapping distributions, below the 5% architecture gate; raw arrays and environment are recorded in `PERFORMANCE.md`.
|
|
3461
|
-
- `create-kudzu` remains 0.1.101 because its template already accepts `@kudzujs/core@^0.8.15` and did not change.
|
|
3462
|
-
|
|
3463
|
-
### Upgrade
|
|
3464
|
-
|
|
3465
|
-
```bash
|
|
3466
|
-
npm install @kudzujs/core@^0.8.16
|
|
3467
|
-
```
|
|
3468
|
-
|
|
3469
|
-
## 0.8.15 - Compiler architecture
|
|
3470
|
-
|
|
3471
|
-
Kudzu 0.8.15 makes the compiler's actual architecture explicit in source and public documentation: React-shaped TSX is normalized, analyzed into capability descriptors, and emitted as complete HTML plus route-specific ESM.
|
|
3472
|
-
|
|
3473
|
-
### Changed in 0.8.15
|
|
3474
|
-
|
|
3475
|
-
- `build.mjs` now owns build orchestration while focused compiler modules own shared AST scope analysis, ordered normalization, React and React Router migration, browser-signal and resource-lifecycle passes, Worker graphs, and effect/handler code generation.
|
|
3476
|
-
- The duplicated page/imported-source normalization sequence is one ordered pipeline that restores TypeScript AST parent pointers after every pass.
|
|
3477
|
-
- Private custom-hook timer metadata returns explicitly from its pass instead of relying on a module-global `WeakMap` keyed by transformed AST identity.
|
|
3478
|
-
- Worker validation, relative graph checks, content-hashed emission, and placeholder rewriting share one compiler boundary while final rendered-effect gating remains in build orchestration.
|
|
3479
|
-
- Effect, native-handler, reactive-binding, and keyed-list evaluator generation consume analyzed descriptors without participating in source analysis.
|
|
3480
|
-
- The public homepage, README, and web documentation now describe Kudzu as a compiler that treats supported React-shaped TSX as input rather than as a browser runtime model.
|
|
3481
|
-
|
|
3482
|
-
### Fixed in 0.8.15
|
|
3483
|
-
|
|
3484
|
-
- Existing-project installation now states the Node.js 22 requirement and required package scripts.
|
|
3485
|
-
- The generator package lock and generated core dependency now match the published package versions.
|
|
3486
|
-
- The missing 0.8.2 release page is restored and release routes are included in the sitemap without replacing their page metadata.
|
|
3487
|
-
- Documentation tables, code blocks, callouts, navigation, and long inline code remain bounded at a 390px viewport.
|
|
3488
|
-
- Package-import handler guidance, serializable array-state guidance, benchmark provenance, and media-query external-store wording now agree with source and tests.
|
|
3489
|
-
- Dedicated AST helper and normalization tests raise the complete suite to 153 tests.
|
|
3490
|
-
|
|
3491
|
-
### Boundary
|
|
3492
|
-
|
|
3493
|
-
This release does not broaden the accepted React-shaped syntax or add browser runtime capabilities. The main transformer still owns tightly coupled component, state, collection, and ownership analysis; future extraction should follow proven input/output seams rather than create directory structure without reducing coupling.
|
|
3494
|
-
|
|
3495
|
-
### Upgrade
|
|
3496
|
-
|
|
3497
|
-
```bash
|
|
3498
|
-
npm install @kudzujs/core@^0.8.15
|
|
3499
|
-
```
|
|
3500
|
-
|
|
3501
|
-
## 0.8.14 - Localized blog migration
|
|
3502
|
-
|
|
3503
|
-
Kudzu 0.8.14 proves a localized MDX blog and continuous imperative canvas can migrate without React, request-time i18n, eval, or a canvas runtime.
|
|
3504
|
-
|
|
3505
|
-
### New in 0.8.14
|
|
3506
|
-
|
|
3507
|
-
- Build-known MDX emits complete static article HTML without `eval()` or `new Function()`.
|
|
3508
|
-
- Locale-prefixed `/ko` and `/en` routes build through `getStaticPaths()`, and relative Link replacements automatically prefix native hrefs from the build-known locale.
|
|
3509
|
-
- The root route selects a stored locale or reads `navigator.languages`, then preserves query and hash through native `location.replace()`.
|
|
3510
|
-
- MDX copy blocks and tabs compile through existing clipboard, state, binding, and conditional capabilities.
|
|
3511
|
-
- One `null`-initialized canvas ref may feed an inline effect whose local state survives recursive animation frames, visibility changes, and native input listeners.
|
|
3512
|
-
- Bare `IntersectionObserver` and `performance` remain browser globals in route-specific effect ESM.
|
|
3513
|
-
- Static sibling routes remain complete zero-JavaScript HTML.
|
|
3514
|
-
|
|
3515
|
-
### Fixed in 0.8.14
|
|
3516
|
-
|
|
3517
|
-
- Effect-owned `IntersectionObserver` instances must disconnect in cleanup.
|
|
3518
|
-
- Local animation-frame handles assigned by effects must be cancelled in cleanup.
|
|
3519
|
-
- The complete suite passes 151/151 tests.
|
|
3520
|
-
|
|
3521
|
-
### Boundary
|
|
3522
|
-
|
|
3523
|
-
This release does not execute `next-intl`, add request-time `Accept-Language` negotiation, general mutable refs, callbacks shared across effects or handlers, a canvas runtime, or arbitrary MDX component execution. Request-time locale redirects remain host/edge configuration; resource-private drawing state and listeners stay inside one owning effect.
|
|
3524
|
-
|
|
3525
|
-
### Upgrade
|
|
3526
|
-
|
|
3527
|
-
```bash
|
|
3528
|
-
npm install @kudzujs/core@^0.8.14
|
|
3529
|
-
```
|
|
3530
|
-
|
|
3531
|
-
## 0.8.13 - Browser capability migration
|
|
3532
|
-
|
|
3533
|
-
Kudzu 0.8.13 proves browser-owned migration paths from Memos, Excalidraw, and Cal.com without adding React, general external-store compatibility, or browser capability runtimes.
|
|
3534
|
-
|
|
3535
|
-
### New in 0.8.13
|
|
3536
|
-
|
|
3537
|
-
- Memos-shaped scroll spies retain an effect-owned `useRef(0)` animation-frame handle with burst coalescing, exact cleanup, smooth navigation, and active-heading ARIA.
|
|
3538
|
-
- Excalidraw-shaped `"share" in navigator` conditions emit false static fallback and mount Web Share DOM and handlers only in supporting browsers.
|
|
3539
|
-
- Cal.com-shaped static `useSyncExternalStore` media queries emit desktop-first HTML and lower matching `change` subscriptions into owned effects.
|
|
3540
|
-
- Direct Web Share and clipboard actions preserve application-owned success and failure state without package adapters.
|
|
3541
|
-
- Static sibling routes remain complete zero-JavaScript HTML for every migration fixture.
|
|
3542
|
-
|
|
3543
|
-
### Fixed in 0.8.13
|
|
3544
|
-
|
|
3545
|
-
- Build-time Node `navigator` availability can no longer permanently fold browser capability UI to the wrong branch.
|
|
3546
|
-
- Optimized state-select text bindings now register the same direct state commit path as optimized attributes.
|
|
3547
|
-
- Animation-frame refs reject aliases, shadowed bindings, inverted guards, indirect reset/cancellation, repeated scheduling, and missing cleanup with source locations.
|
|
3548
|
-
- The complete suite passes 149/149 tests.
|
|
3549
|
-
|
|
3550
|
-
### Boundary
|
|
3551
|
-
|
|
3552
|
-
This release does not add general mutable refs, external stores, media hooks, browser-expression rendering, animation scheduling, collaboration transport, QR generation, or React package execution. Dynamic capability names, `navigator.canShare()`, parameterized/imported media hooks, dynamic queries, and arbitrary store snapshots remain source migration work.
|
|
3553
|
-
|
|
3554
|
-
### Upgrade
|
|
3555
|
-
|
|
3556
|
-
```bash
|
|
3557
|
-
npm install @kudzujs/core@^0.8.13
|
|
3558
|
-
```
|
|
3559
|
-
|
|
3560
|
-
## 0.8.12 - Static icon migration
|
|
3561
|
-
|
|
3562
|
-
Kudzu 0.8.12 proves a source migration path from Lucide React-shaped icon usage to accessible static SVG without a package factory or browser runtime.
|
|
3563
|
-
|
|
3564
|
-
### New in 0.8.12
|
|
3565
|
-
|
|
3566
|
-
- Used icons move into relative TSX components with direct intrinsic SVG roots and familiar size, stroke, class, fill, ARIA, and title props.
|
|
3567
|
-
- Meaningful icons retain explicit roles and titles, while decorative icons remain hidden from assistive technology.
|
|
3568
|
-
- React-shaped SVG presentation attributes normalize to native output and complete icon routes ship zero JavaScript.
|
|
3569
|
-
- Unreachable icon modules are excluded from compilation instead of becoming deploy artifacts.
|
|
3570
|
-
- Public documentation records the migration recipe and its deliberate package boundary.
|
|
3571
|
-
|
|
3572
|
-
### Fixed in 0.8.12
|
|
3573
|
-
|
|
3574
|
-
- Handler emission now follows references in the final route plan and HTML, removing evaluator modules left behind by build-folded component conditions while preserving list-expression evaluators.
|
|
3575
|
-
- The complete suite passes 143/143 tests.
|
|
3576
|
-
|
|
3577
|
-
### Boundary
|
|
3578
|
-
|
|
3579
|
-
This release does not execute `lucide-react`. Dynamic icon lookup, `createLucideIcon()`, package-owned factories, and a generic icon runtime remain unsupported source migration work.
|
|
3580
|
-
|
|
3581
|
-
### Upgrade
|
|
3582
|
-
|
|
3583
|
-
```bash
|
|
3584
|
-
npm install @kudzujs/core@^0.8.12
|
|
3585
|
-
```
|
|
3586
|
-
|
|
3587
|
-
## 0.8.11 - Stale-safe data migration
|
|
3588
|
-
|
|
3589
|
-
Kudzu 0.8.11 proves source migration paths for TanStack Query-shaped data and React Hook Form-shaped forms while strengthening dependency-effect stale-write isolation.
|
|
3590
|
-
|
|
3591
|
-
### New in 0.8.11
|
|
3592
|
-
|
|
3593
|
-
- Build-known query data moves to async pages and emits complete zero-JavaScript HTML.
|
|
3594
|
-
- Browser-only query data uses one dependency effect with application-owned loading, error, result, and primitive refetch state.
|
|
3595
|
-
- Superseded unowned dependency effects invalidate their invocation before cleanup, so late promise or fetch setters cannot overwrite newer state.
|
|
3596
|
-
- A deterministic Chrome race verifies that a fast refetch remains visible after a delayed prior response arrives, followed by HTTP failure and recovery.
|
|
3597
|
-
- React Hook Form-shaped signup source migrates to native controls, constraint validation, `FormData`, one async submit handler, accessible server errors, and retained uncontrolled values.
|
|
3598
|
-
- Static sibling routes remain JavaScript-free, with no TanStack Query or React Hook Form runtime in deploy output.
|
|
3599
|
-
|
|
3600
|
-
### Fixed in 0.8.11
|
|
3601
|
-
|
|
3602
|
-
- Mobile documentation now uses a true 100% layout wrapper with explicit inner gutters instead of a reduced outer width.
|
|
3603
|
-
- The complete suite passes 142/142 tests.
|
|
3604
|
-
|
|
3605
|
-
### Boundary
|
|
3606
|
-
|
|
3607
|
-
This release does not execute TanStack Query or React Hook Form. Query clients, Providers, caches, retries, deduplication, optimistic cache updates, query-key arrays, Suspense, controllers, watchers, resolvers, and dynamic field registration remain source migration work.
|
|
3608
|
-
|
|
3609
|
-
### Upgrade
|
|
3610
|
-
|
|
3611
|
-
```bash
|
|
3612
|
-
npm install @kudzujs/core@^0.8.11
|
|
3613
|
-
```
|
|
3614
|
-
|
|
3615
|
-
## 0.8.10 - Native dialog migration
|
|
3616
|
-
|
|
3617
|
-
Kudzu 0.8.10 proves a source migration path from a shadcn/Radix-shaped dialog to the native `<dialog>` element without adding package compatibility runtime.
|
|
3618
|
-
|
|
3619
|
-
### New in 0.8.10
|
|
3620
|
-
|
|
3621
|
-
- A reduced migration fixture preserves a relative `forwardRef` component, props, children, object refs, and ordinary JSX event handlers.
|
|
3622
|
-
- Package-owned Portal and Context behavior becomes native `showModal()`, `close()`, and cancel handling.
|
|
3623
|
-
- Complete accessible dialog markup is pre-rendered while route output includes only the `click` and `cancel` events it uses.
|
|
3624
|
-
- Chrome coverage verifies modal top-layer behavior, initial focus, confirm and cancel paths, and explicit trigger-focus restoration.
|
|
3625
|
-
- Public documentation now includes the migration recipe and its deliberate library boundary.
|
|
3626
|
-
|
|
3627
|
-
### Fixed in 0.8.10
|
|
3628
|
-
|
|
3629
|
-
- Mobile documentation code blocks stay within the content grid and scroll horizontally instead of widening the viewport.
|
|
3630
|
-
- Browser tests allow slower CI Chrome startup and report process timeouts directly instead of failing later against empty DOM output.
|
|
3631
|
-
- The complete suite passes 140/140 tests.
|
|
3632
|
-
|
|
3633
|
-
### Boundary
|
|
3634
|
-
|
|
3635
|
-
This release does not execute Radix or arbitrary React UI packages. `Portal`, `asChild`/`Slot`, element cloning, and arbitrary compound-component Context must be removed during source migration. Applications remain responsible for dialog labeling and explicit focus restoration.
|
|
3636
|
-
|
|
3637
|
-
### Upgrade
|
|
3638
|
-
|
|
3639
|
-
```bash
|
|
3640
|
-
npm install @kudzujs/core@^0.8.10
|
|
3641
|
-
```
|
|
3642
|
-
|
|
3643
|
-
## 0.8.9 - Context-backed CRUD actions
|
|
3644
|
-
|
|
3645
|
-
Kudzu 0.8.9 specializes state-backed actions exposed through one conventional Context Provider and relative custom hook.
|
|
3646
|
-
|
|
3647
|
-
### New in 0.8.9
|
|
3648
|
-
|
|
3649
|
-
- A relative zero-argument custom hook may directly return `useContext(ContextIdentifier)` from one local or named relative Context module.
|
|
3650
|
-
- One Provider may expose direct shorthand `useState` pairs and synchronous actions that capture only those exposed pairs.
|
|
3651
|
-
- Consumers may select state and actions across ordinary component boundaries; direct action calls inline into existing route handler ESM and concrete state operations.
|
|
3652
|
-
- CRUD actions over object arrays compose with keyed rows, reactive selection, conditional editors, and guarded local storage effects in the React Notes migration.
|
|
3653
|
-
- Unsupported private captures, hidden state dependencies, indirect action references, dynamic Provider values, multiple Providers, and consumer binding collisions fail with source diagnostics.
|
|
3654
|
-
- Static sibling routes remain JavaScript-free. No action function, Context runtime, Provider tree, callback registry, VDOM, or hydration is emitted.
|
|
3655
|
-
- The complete suite passes 139/139 tests, including Chrome coverage for create, rename, select, and delete behavior.
|
|
3656
|
-
|
|
3657
|
-
### Boundary
|
|
3658
|
-
|
|
3659
|
-
The hook must directly return `useContext(ContextIdentifier)`. The Context and exactly one Provider must be declared together in one local or named relative module, and its value must be one direct shorthand object. Actions must be synchronous, called directly in intrinsic handlers, and capture only exposed Provider state pairs.
|
|
3660
|
-
|
|
3661
|
-
### Upgrade
|
|
3662
|
-
|
|
3663
|
-
```bash
|
|
3664
|
-
npm install @kudzujs/core@^0.8.9
|
|
3665
|
-
```
|
|
3666
|
-
|
|
3667
|
-
## 0.8.8 - Conditional keyed map roots
|
|
3668
|
-
|
|
3669
|
-
Kudzu 0.8.8 compiles ordinary expression-bodied conditional keyed maps through the existing pure collection selector path.
|
|
3670
|
-
|
|
3671
|
-
### New in 0.8.8
|
|
3672
|
-
|
|
3673
|
-
- One-parameter keyed maps may return `condition && <Row />` or `condition ? <Row /> : null`.
|
|
3674
|
-
- Top-level conditions may combine the current item with direct primitive parent state; nested maps support item-only conditions.
|
|
3675
|
-
- Omitted rows own no DOM or hooks. True-to-false transitions release row state, effects, and refs; re-entry creates fresh ownership.
|
|
3676
|
-
- Retained siblings preserve keyed DOM identity through condition changes, insertion, and reorder.
|
|
3677
|
-
- Same-file and relative row components remain compiler-specialized before the existing list runtime receives the normalized filter.
|
|
3678
|
-
- Imported build-known item-only conditions still fold to complete zero-JavaScript HTML.
|
|
3679
|
-
- The React Notes migration restores its ordinary `notes.map(note => activeId === note.id && <Editor />)` source shape.
|
|
3680
|
-
- Map indexes, alternate JSX fallbacks, block-bodied conditional maps, arbitrary captures, and impure predicates remain diagnosed.
|
|
3681
|
-
- The complete suite passes 134/134 tests.
|
|
3682
|
-
|
|
3683
|
-
### Boundary
|
|
3684
|
-
|
|
3685
|
-
Conditional map callbacks must be synchronous expression arrows with exactly one item parameter. Indexes are rejected because implicit filtering changes their meaning. The feature adds no runtime capability, VDOM, hydration, or component rerenderer.
|
|
3686
|
-
|
|
3687
|
-
### Upgrade
|
|
3688
|
-
|
|
3689
|
-
```bash
|
|
3690
|
-
npm install @kudzujs/core@^0.8.8
|
|
3691
|
-
```
|
|
3692
|
-
|
|
3693
|
-
## 0.8.7 - Reactive keyed row selection
|
|
3694
|
-
|
|
3695
|
-
Kudzu 0.8.7 lets a flat keyed row combine its current item or index with direct primitive parent state in pure text and attribute expressions.
|
|
3696
|
-
|
|
3697
|
-
### New in 0.8.7
|
|
3698
|
-
|
|
3699
|
-
- Selected-row classes, `aria-current`, `aria-selected`, and similar pure expressions update directly after parent-state commits.
|
|
3700
|
-
- Retained rows reevaluate only their expression text and attributes; list structure, handlers, and DOM identity remain untouched.
|
|
3701
|
-
- Initial static HTML evaluates the same expression with build-time state values.
|
|
3702
|
-
- Calculated SVG coverage verifies focus, Space, click, insertion, reorder, latest handlers, selected classes, ARIA state, and retained node identity.
|
|
3703
|
-
- A React Notes migration restores its ordinary `activeId === note.id` selected-row source without imperative DOM code.
|
|
3704
|
-
- Object/array parent state, arbitrary captures, nested-row parent state, structural conditions, mutation, and arbitrary calls remain diagnosed.
|
|
3705
|
-
- The complete suite passes 134/134 tests.
|
|
3706
|
-
|
|
3707
|
-
### Boundary
|
|
3708
|
-
|
|
3709
|
-
This support is limited to pure flat keyed-row text and attribute expressions over the current item/index plus direct primitive parent state. It adds no component rerenderer, VDOM, hydration, or general capture runtime.
|
|
3710
|
-
|
|
3711
|
-
### Upgrade
|
|
3712
|
-
|
|
3713
|
-
```bash
|
|
3714
|
-
npm install @kudzujs/core@^0.8.7
|
|
3715
|
-
```
|
|
3716
|
-
|
|
3717
|
-
## 0.8.6 - Responsive list reversals
|
|
3718
|
-
|
|
3719
|
-
Kudzu 0.8.6 fixes stale keyed-list bookkeeping after reverse and one-item removal fast paths.
|
|
3720
|
-
|
|
3721
|
-
### Fixed in 0.8.6
|
|
3722
|
-
|
|
3723
|
-
- Reverse fast paths now store the latest logical item order after moving existing keyed DOM nodes.
|
|
3724
|
-
- One-item removal fast paths update the same baseline before subsequent list actions.
|
|
3725
|
-
- Repeated reverse clicks apply on the next microtask instead of requiring another delayed interaction.
|
|
3726
|
-
- Existing keyed rows retain DOM identity and uncontrolled input values through every reorder.
|
|
3727
|
-
- Chrome coverage verifies `3,2,1 → 1,2,3 → 3,2,1` across rapid actions, and the complete suite passes 134/134 tests.
|
|
3728
|
-
|
|
3729
|
-
### Boundary
|
|
3730
|
-
|
|
3731
|
-
This is a bookkeeping correction in the existing keyed-list runtime. It adds no list capability, VDOM, hydration, or component runtime.
|
|
3732
|
-
|
|
3733
|
-
### Upgrade
|
|
3734
|
-
|
|
3735
|
-
```bash
|
|
3736
|
-
npm install @kudzujs/core@^0.8.6
|
|
3737
|
-
```
|
|
3738
|
-
|
|
3739
|
-
## 0.8.5 - Owned timer actions
|
|
3740
|
-
|
|
3741
|
-
Kudzu 0.8.5 compiles one proven private timeout ref pattern from a returned relative custom-hook action into existing state and effect ownership.
|
|
3742
|
-
|
|
3743
|
-
### New in 0.8.5
|
|
3744
|
-
|
|
3745
|
-
- One directly returned relative custom-hook callback may own one `useRef<number | null>(null)`, directly clear its previous timeout, and assign a numeric-literal-delay `setTimeout()` whose callback updates hook state.
|
|
3746
|
-
- One empty-dependency effect directly clears the latest timer on cleanup. Conditional unmount cancels pending work, and remount creates fresh ownership.
|
|
3747
|
-
- The compiler lowers the private ref to a collision-free hidden state slot shared by existing native-handler and effect contexts; no timer scheduler or runtime is added.
|
|
3748
|
-
- Named, default-arrow, and relative re-export hook forms retain the same specialization and independent timer identities.
|
|
3749
|
-
- Browser coverage verifies replacement, latest-only firing, unmount cancellation, and fresh remount. Dynamic delays fail with source diagnostics.
|
|
3750
|
-
- Static siblings remain JavaScript-free, and the complete suite passes 134/134 tests.
|
|
3751
|
-
|
|
3752
|
-
### Boundary
|
|
3753
|
-
|
|
3754
|
-
The hook may own one private timeout ref with one direct returned callback, one literal delay, and one direct cleanup effect. Multiple refs, aliases, dynamic delays, intervals, keyed ownership, indirect callbacks, and arbitrary timed graphs remain unsupported.
|
|
3755
|
-
|
|
3756
|
-
### Upgrade
|
|
3757
|
-
|
|
3758
|
-
```bash
|
|
3759
|
-
npm install @kudzujs/core@^0.8.5
|
|
3760
|
-
```
|
|
3761
|
-
|
|
3762
|
-
## 0.8.4 - Browser-native handlers
|
|
3763
|
-
|
|
3764
|
-
Kudzu 0.8.4 fixes named event handlers that use standard browser globals during real React application migrations.
|
|
3765
|
-
|
|
3766
|
-
### New in 0.8.4
|
|
3767
|
-
|
|
3768
|
-
- Named and inline event handlers keep `localStorage`, `FileReader`, and `alert` in route-specific browser ESM instead of serializing them as component captures during static rendering.
|
|
3769
|
-
- FrugalHQ backup export, file import, and reset handlers now build without evaluating browser-only globals in Node.
|
|
3770
|
-
- Browser regression coverage verifies that the globals remain absent from SSR capture scope and resolve normally after a real click.
|
|
3771
|
-
- The fix adds no runtime, shared bytes, hydration, or browser component tree.
|
|
3772
|
-
- The complete suite passes 133/133 tests.
|
|
3773
|
-
|
|
3774
|
-
### Boundary
|
|
3775
|
-
|
|
3776
|
-
Application-owned handler captures must still be JSON-safe. This release only corrects classification of the proven standard browser globals; it does not execute browser APIs during static rendering or add arbitrary callback support.
|
|
3777
|
-
|
|
3778
|
-
### Upgrade
|
|
3779
|
-
|
|
3780
|
-
```bash
|
|
3781
|
-
npm install @kudzujs/core@^0.8.4
|
|
3782
|
-
```
|
|
3783
|
-
|
|
3784
|
-
## 0.8.3 - Native interaction composition
|
|
3785
|
-
|
|
3786
|
-
Kudzu 0.8.3 characterizes ordinary clipboard, debounce, and accessible SVG point interactions through existing route-specific capabilities instead of dedicated browser runtimes.
|
|
3787
|
-
|
|
3788
|
-
### New in 0.8.3
|
|
3789
|
-
|
|
3790
|
-
- Direct async handlers and directly returned relative custom-hook callbacks may call native `navigator.clipboard.writeText()` while application state owns success and permission-failure feedback.
|
|
3791
|
-
- Dependency effects may own debounced synchronization with `setTimeout()` and directly returned `clearTimeout()` cleanup; dependency changes and conditional unmount cancel pending work.
|
|
3792
|
-
- Calculated keyed SVG points may use focus, click, Space, and Enter handlers to update parent state rendered in an external accessible HTML tooltip.
|
|
3793
|
-
- Retained SVG rows preserve DOM identity and read the latest point labels after recalculation and reorder.
|
|
3794
|
-
- Clipboard, timer, and chart-specific runtimes remain absent, and unaffected static sibling routes continue to ship zero JavaScript.
|
|
3795
|
-
- The complete suite passes 133/133 tests with focused Chrome coverage for clipboard success/failure, latest-only debounce, unmount cleanup, fresh remount, accessible tooltip input, and retained SVG identity.
|
|
3796
|
-
|
|
3797
|
-
### Boundary
|
|
3798
|
-
|
|
3799
|
-
Debounce requires explicit effect ownership and direct cleanup. Private timer refs, unowned delayed event writes, intervals, arbitrary callback graphs, keyed-item SVG conditions, nested calculated SVG lists, and chart runtimes remain unsupported until a reduced migration fixture proves they are necessary.
|
|
3800
|
-
|
|
3801
|
-
### Upgrade
|
|
3802
|
-
|
|
3803
|
-
```bash
|
|
3804
|
-
npm install @kudzujs/core@^0.8.3
|
|
3805
|
-
```
|
|
3806
|
-
|
|
3807
|
-
## 0.8.2 - Calculated keyed collections
|
|
3808
|
-
|
|
3809
|
-
Kudzu 0.8.2 lets one direct array field from a synchronous relative calculation result drive an intrinsic keyed list, preserving static HTML and existing DOM ownership while improving list and navigation hot paths.
|
|
3810
|
-
|
|
3811
|
-
### New in 0.8.2
|
|
3812
|
-
|
|
3813
|
-
- A top-level `const result = calculate(state)` may feed `result.items.map(...)` when the relative synchronous helper returns a JSON-safe array field.
|
|
3814
|
-
- Route-specific evaluator ESM refreshes a compiler-owned array anchor after source-state commits; the existing keyed reconciler retains keys, current handlers, and SVG namespaces.
|
|
3815
|
-
- Initial structural rows hydrate list bookkeeping without repeating DOM writes, retained direct attributes skip redundant DOM reads, and stable-list fallback avoids duplicate validation.
|
|
3816
|
-
- Immutable local filter sources with unused ordinary `useState` setters use the existing static-filter restoration path while indirect custom-hook and reducer mutation paths remain dynamic.
|
|
3817
|
-
- Required route modules emit `modulepreload` hints, and navigation prefetch resolves validated destination capabilities before commit while preserving complete-document fallback and cleanup ordering.
|
|
3818
|
-
- Navigation prefetch safely ignores focus and pointer targets outside anchors.
|
|
3819
|
-
- Calculated collection fixtures verify insert, reorder, removal, retained identity, latest handlers, scalar bindings, SVG namespace, and zero JavaScript on unaffected static routes.
|
|
3820
|
-
- The complete suite passes 133/133 tests, and the FIRE migration retains all chart nodes and acceptance behavior.
|
|
3821
|
-
|
|
3822
|
-
### Boundary
|
|
3823
|
-
|
|
3824
|
-
The calculation must be one top-level immutable result from a synchronous relative TypeScript function, and the consumed field must remain a JSON-safe array. Indirect result aliases, dynamic fields, nested calculated SVG lists, package calculations, and asynchronous helpers remain unsupported. Static-filter specialization applies only when an ordinary local setter is provably unused; lifecycle-bearing and indirectly mutable collections retain the general path.
|
|
3825
|
-
|
|
3826
|
-
### Upgrade
|
|
3827
|
-
|
|
3828
|
-
```bash
|
|
3829
|
-
npm install @kudzujs/core@^0.8.2
|
|
3830
|
-
```
|
|
3831
|
-
|
|
3832
|
-
## 0.8.1 - Custom-hook reset actions
|
|
3833
|
-
|
|
3834
|
-
Kudzu 0.8.1 compiles direct multi-state reset callbacks returned by relative custom hooks into one existing behavior command, keeping conventional hook ownership without adding a callback runtime.
|
|
3835
|
-
|
|
3836
|
-
### New in 0.8.1
|
|
3837
|
-
|
|
3838
|
-
- Returned custom-hook callbacks may reset their exposed state/setter pairs to direct string, number, negative-number, boolean, or `null` literals in one batched commit.
|
|
3839
|
-
- Imported callback literals are synthesized before command emission, fixing source-range corruption when optimized behavior commands originate in another module.
|
|
3840
|
-
- The FIRE Standard calculator now owns its twelve-field reset inside `useStandardParams()`; existing dependency effects update URL parameters and local storage after the same commit.
|
|
3841
|
-
- A React/Vite migration fixture verifies exact optimized command output plus browser updates for multiple reset values.
|
|
3842
|
-
- Static routes and routes without reset actions add no JavaScript or runtime capability.
|
|
3843
|
-
|
|
3844
|
-
### Boundary
|
|
3845
|
-
|
|
3846
|
-
Reset callbacks may capture only directly returned state/setter pairs and use direct literal setter calls. Private defaults, helper-indirect setters, dynamic values, timers, clipboard work, aliases, and arbitrary callback graphs remain unsupported.
|
|
3847
|
-
|
|
3848
|
-
### Upgrade
|
|
3849
|
-
|
|
3850
|
-
```bash
|
|
3851
|
-
npm install @kudzujs/core@^0.8.1
|
|
3852
|
-
```
|
|
3853
|
-
|
|
3854
|
-
## 0.8.0 - URL-backed custom hooks
|
|
3855
|
-
|
|
3856
|
-
Kudzu 0.8.0 migrates practical relative React custom hooks that combine local state, effects, direct actions, writable URL search parameters, and guarded browser storage while preserving static HTML and route-specific capabilities.
|
|
3857
|
-
|
|
3858
|
-
### New in 0.8.0
|
|
3859
|
-
|
|
3860
|
-
- Named or default zero-argument custom hooks imported from relative TypeScript modules can expose direct shorthand `useState` value/setter pairs and callbacks that capture those states.
|
|
3861
|
-
- React Router `useSearchParams()` accepts a top-level `[params, setParams]` tuple. Direct browser callbacks may pass one synchronous inline updater and optionally exactly `{ replace: true }`.
|
|
3862
|
-
- Query writes use native `URLSearchParams` and History APIs, immediately recommit affected route signals, and follow browser `popstate` without an SPA router.
|
|
3863
|
-
- Custom-hook mount and dependency effects can restore validated values from `localStorage`, persist subsequent state, and keep deterministic build-time fallbacks.
|
|
3864
|
-
- Page entries now define the compiled TypeScript graph, so unreachable migration modules no longer block a build while reachable invalid imports retain diagnostics.
|
|
3865
|
-
- Direct maps over imported immutable JSON-safe arrays fold to static HTML; relative calculation helpers can drive direct reactive result fields through route binding ESM.
|
|
3866
|
-
- Package imports referenced directly inside JSX event handlers erase from build modules and bundle only into route handlers, enabling ExcelJS export without package execution during rendering.
|
|
3867
|
-
- FIRE migration validation covers all fourteen routes, production Tailwind/Inter assets, URL and storage restoration, reset, presets, native SVG charts, Quiz and keyed Debt flows, and a real Excel workbook buffer.
|
|
3868
|
-
- Static sibling routes continue to ship no JavaScript; React, React Router, hydration, a VDOM, and a browser hook dispatcher remain absent.
|
|
3869
|
-
|
|
3870
|
-
### Boundary
|
|
3871
|
-
|
|
3872
|
-
Custom hooks must be synchronous zero-argument relative imports with one final direct shorthand object return. Caller destructuring cannot use aliases, defaults, or rest. Writable search parameters require direct inline updater callbacks. Relative calculation results require direct static field reads. Package imports must be referenced directly inside intrinsic JSX event callbacks. Dynamic query reads, direct-value setters, arbitrary options, mutable value refs, generic reactive objects, calculated collection fields, helper-indirect package use, and callback graphs with private captures remain unsupported.
|
|
3873
|
-
|
|
3874
|
-
### Upgrade
|
|
3875
|
-
|
|
3876
|
-
```bash
|
|
3877
|
-
npm install @kudzujs/core@^0.8.0
|
|
3878
|
-
```
|
|
3879
|
-
|
|
3880
|
-
## 0.7.30 - Reactive number formatting
|
|
3881
|
-
|
|
3882
|
-
Kudzu 0.7.30 supports fixed-locale `Intl.NumberFormat` display chains in reactive JSX locals, restoring conventional comma-formatted controlled inputs while preserving narrow render-call validation.
|
|
3883
|
-
|
|
3884
|
-
### New in 0.7.30
|
|
3885
|
-
|
|
3886
|
-
- Reactive text and attributes accept `new Intl.NumberFormat("literal").format(Math.round(expression))` over supported state-derived primitive expressions.
|
|
3887
|
-
- Initial HTML is formatted during the build and existing binding ESM reevaluates the same native expression after state changes.
|
|
3888
|
-
- No collection selector opcode, shared formatting runtime, hydration, or browser component instance is added.
|
|
3889
|
-
- Locale values must be direct string literals; dynamic locales and options remain unsupported.
|
|
3890
|
-
- Optional calls, aliases, shadowed `Intl` or `Math`, arbitrary constructors, and other render calls retain source diagnostics.
|
|
3891
|
-
- A migration-derived FIRE `CurrencyInput` restores `100,000` annual and `8,333` monthly display while preserving annualized state updates.
|
|
3892
|
-
- The complete suite passes 123/123 tests, including emitted evaluator and invalid dynamic-locale coverage.
|
|
3893
|
-
|
|
3894
|
-
### Boundary
|
|
3895
|
-
|
|
3896
|
-
This is display formatting only. The accepted expression requires one static locale and exactly `Math.round(expression)` as the format argument. Collection selectors and effect dependency expressions keep their existing pure expression language.
|
|
3897
|
-
|
|
3898
|
-
### Upgrade
|
|
3899
|
-
|
|
3900
|
-
```bash
|
|
3901
|
-
npm install @kudzujs/core@^0.7.30
|
|
3902
|
-
```
|
|
3903
|
-
|
|
3904
|
-
## 0.7.29 - Hermetic TypeScript checks
|
|
3905
|
-
|
|
3906
|
-
Kudzu 0.7.29 makes project and migration-fixture typechecks independent of unrelated ambient types and package declarations installed in ancestor directories.
|
|
3907
|
-
|
|
3908
|
-
### New in 0.7.29
|
|
3909
|
-
|
|
3910
|
-
- The root TypeScript configuration declares an empty ambient `types` set instead of scanning every visible ancestor `node_modules/@types` directory.
|
|
3911
|
-
- `create-kudzu` emits the same isolated TypeScript configuration for new projects.
|
|
3912
|
-
- Migration fixture checks skip third-party declaration bodies while continuing to typecheck fixture TS and TSX against Kudzu's reduced declarations.
|
|
3913
|
-
- A clean `npm ci` checkout nested below conflicting `@types/minimatch`, React, and React Router installations now passes `npm run check`.
|
|
3914
|
-
- The complete suite continues to pass 122/122 tests.
|
|
3915
|
-
|
|
3916
|
-
### Upgrade
|
|
3917
|
-
|
|
3918
|
-
```bash
|
|
3919
|
-
npm install @kudzujs/core@^0.7.29
|
|
3920
|
-
```
|
|
3921
|
-
|
|
3922
|
-
## 0.7.28 - Nested component specialization
|
|
3923
|
-
|
|
3924
|
-
Kudzu 0.7.28 recursively specializes components rendered inside setter-adapter children, allowing conventional optional UI such as an imported hookful Tooltip to remain declarative without adding a browser component runtime.
|
|
3925
|
-
|
|
3926
|
-
### New in 0.7.28
|
|
3927
|
-
|
|
3928
|
-
- Setter-adapter children may recursively render synchronous same-file or relative-imported components.
|
|
3929
|
-
- Nested component props, defaults, JSX children, static assets, handlers, and relative TypeScript imports reuse the existing call-site specialization path.
|
|
3930
|
-
- Nested `useState()`, `useId()`, `useRef()`, and supported effects join the outer generated owner on unconditional or statically truthy paths.
|
|
3931
|
-
- Literal `&&` and ternary conditions fold before specialization, so omitted and false optional components allocate no hooks or browser capabilities.
|
|
3932
|
-
- Recursive component cycles, namespace/package components, and unresolved component imports retain source diagnostics.
|
|
3933
|
-
- Hookful nested components on dynamic paths fail instead of receiving incorrect unconditional ownership.
|
|
3934
|
-
- Setter callbacks cannot cross a second component boundary.
|
|
3935
|
-
- A migration-derived FIRE `AgeInput` now restores its imported hookful `Tooltip`, including generated ARIA identity and hover/focus state.
|
|
3936
|
-
- The complete suite passes 122/122 tests with Chrome coverage for nested tooltip state, omitted optional UI, and existing parent/child lifecycle behavior.
|
|
3937
|
-
|
|
3938
|
-
### Boundary
|
|
3939
|
-
|
|
3940
|
-
Nested hooks are accepted only when the nested component is unconditional or guarded by a statically truthy literal after outer prop substitution. Dynamic conditional hook ownership and forwarding the setter through another component remain unsupported. Components still erase to intrinsic HTML and route-specific capabilities; React is never emitted or executed.
|
|
3941
|
-
|
|
3942
|
-
### Upgrade
|
|
3943
|
-
|
|
3944
|
-
```bash
|
|
3945
|
-
npm install @kudzujs/core@^0.7.28
|
|
3946
|
-
```
|
|
3947
|
-
|
|
3948
|
-
## 0.7.27 - Stateful component migration
|
|
3949
|
-
|
|
3950
|
-
Kudzu 0.7.27 lets ordinary setter-adapter components keep their local hooks and derived render values while compiling them into static HTML plus existing route-specific capabilities, not a browser component runtime.
|
|
3951
|
-
|
|
3952
|
-
### New in 0.7.27
|
|
3953
|
-
|
|
3954
|
-
- Same-file and relative-imported children receiving one supported setter callback may own multiple directly serializable `useState()` values.
|
|
3955
|
-
- A child string draft may initialize from one direct primitive state prop through zero-argument `.toString()`, covering conventional controlled age and numeric inputs.
|
|
3956
|
-
- Setter-adapter children may use deterministic build-time `useId()` values and `null`-initialized object refs.
|
|
3957
|
-
- Supported child effects reuse existing route ESM, dependency comparison, cleanup, conditional ownership, and stale-work isolation.
|
|
3958
|
-
- Conditional removal deletes child state, resolves refs to `null`, and runs cleanup; remount creates fresh ownership and prop dependency effects synchronize drafts to the latest parent value.
|
|
3959
|
-
- Inline and simple `const` parent callbacks continue to specialize into the generated child helper instead of becoming serialized function captures.
|
|
3960
|
-
- Reactive JSX text and attributes may read recursively chained top-level immutable locals built from supported pure primitive state expressions.
|
|
3961
|
-
- Impure derived render calls, non-null child refs, unsupported dynamic state initializers, repeated callback use, and wider callback forwarding retain source-located diagnostics.
|
|
3962
|
-
- React Router normalization now safely ignores local export declarations without module specifiers.
|
|
3963
|
-
- A migration-derived FIRE age input verifies local draft editing, parent updates, blur validation, effect synchronization, and remount after a hidden parent update.
|
|
3964
|
-
- The complete suite passes 121/121 tests, including same-file/imported hook ownership and Chrome lifecycle coverage.
|
|
3965
|
-
|
|
3966
|
-
### Boundary
|
|
3967
|
-
|
|
3968
|
-
This remains one compiler-specialized component boundary with one supported setter callback use. Prop-derived state initialization accepts only a direct primitive state prop's zero-argument `.toString()`; other dynamic initializers remain unsupported. Refs must initialize with `null`, effects must use the existing supported callback and dependency forms, and React is never emitted or executed.
|
|
3969
|
-
|
|
3970
|
-
### Upgrade
|
|
3971
|
-
|
|
3972
|
-
```bash
|
|
3973
|
-
npm install @kudzujs/core@^0.7.27
|
|
3974
|
-
```
|
|
3975
|
-
|
|
3976
|
-
## 0.7.26 - React-shaped migration and faster lists
|
|
3977
|
-
|
|
3978
|
-
Kudzu 0.7.26 broadens ordinary React-shaped migration input and removes repeated keyed-row cleanup scans, making the matched 500-card search faster than React without adding a VDOM, hydration, or a retained component tree.
|
|
3979
|
-
|
|
3980
|
-
### New in 0.7.26
|
|
3981
|
-
|
|
3982
|
-
- JSX typing accepts React 19 `ReactNode`-shaped component output while preserving Kudzu's compile-time element model.
|
|
3983
|
-
- Intrinsic DOM handlers retain contextual event typing through migration-compatible JSX declarations.
|
|
3984
|
-
- A direct setter or one-call value-adapter callback may cross one supported component boundary, covering ordinary controlled search inputs without serializing a function.
|
|
3985
|
-
- Imported static collections wrapped in TypeScript-only assertions such as `as const` remain analyzable and erase normally.
|
|
3986
|
-
- Collection selector execution caches state reads and avoids recursive rest-array, `slice()`, and `map()` allocation in hot expression paths.
|
|
3987
|
-
- Safe keyed rows with local state but no row effects, nested lists, or shared text targets release binding and condition registrations directly by state ID instead of rescanning every removed subtree.
|
|
3988
|
-
- Rows outside that proven boundary continue through the existing DOM-owned unmount path.
|
|
3989
|
-
- A 21-run alternating fresh-profile benchmark measured the 500-card filter at 13.5 ms for Kudzu and 13.9 ms for React, making Kudzu 2.88% faster and 52.30% faster than its preserved 28.3 ms baseline.
|
|
3990
|
-
- The same benchmark measured Kudzu's build 11.90% faster, keyed row toggle 7.02% faster, and emitted JavaScript 87.29% smaller by aggregate gzip.
|
|
3991
|
-
- The complete suite passes 118/118 tests, including remove-all, unseen-key remount, and fresh row-state coverage for the indexed release path.
|
|
3992
|
-
|
|
3993
|
-
### Boundary
|
|
3994
|
-
|
|
3995
|
-
Indexed row release is compiler-selected only when cleanup can be proven from row-owned state IDs and the row has no effects, nested lists, or shared text targets. Effectful, nested, and otherwise lifecycle-bearing rows retain the general ownership cleanup path. Setter adapters remain limited to one supported component boundary and one direct intrinsic handler call. React remains migration input only and is never emitted or executed.
|
|
3996
|
-
|
|
3997
|
-
### Upgrade
|
|
3998
|
-
|
|
3999
|
-
```bash
|
|
4000
|
-
npm install @kudzujs/core@^0.7.26
|
|
4001
|
-
```
|
|
4002
|
-
|
|
4003
|
-
## 0.7.25 - Router-shaped native navigation
|
|
4004
|
-
|
|
4005
|
-
Kudzu 0.7.25 accepts a narrow React Router `useNavigate()` source shape and lowers safe static destinations to native full-document navigation without shipping React Router or adding an SPA runtime.
|
|
4006
|
-
|
|
4007
|
-
### New in 0.7.25
|
|
4008
|
-
|
|
4009
|
-
- A named or aliased `useNavigate` import may initialize one top-level `const` identifier in a component.
|
|
4010
|
-
- Direct calls from nested browser callbacks with one safe static root-relative destination lower to `globalThis.location.assign()`.
|
|
4011
|
-
- Exactly `{ replace: true }` lowers to `globalThis.location.replace()`.
|
|
4012
|
-
- Configured `base` is applied while query strings and fragments are preserved.
|
|
4013
|
-
- The React Router import and navigate binding are erased from emitted component code.
|
|
4014
|
-
- Dynamic or relative destinations, render-time calls, passed aliases, optional calls, and other navigation options fail with source diagnostics.
|
|
4015
|
-
- Native document navigation remains deliberate even when enhanced navigation is configured.
|
|
4016
|
-
- Unaffected destination routes remain complete static documents with zero JavaScript.
|
|
4017
|
-
- The complete suite passes 117/117 tests with Chrome coverage for base-aware full-document navigation.
|
|
4018
|
-
|
|
4019
|
-
### Boundary
|
|
4020
|
-
|
|
4021
|
-
The supported migration shape is one top-level `const navigate = useNavigate()` and direct calls from nested browser callbacks. Destinations must be safe static root-relative strings. Only the absent options argument and exactly `{ replace: true }` are supported; dynamic values, relative paths, deltas, state, relative routing, scroll options, aliases, and render-time calls remain unsupported. No SPA router is included.
|
|
4022
|
-
|
|
4023
|
-
### Upgrade
|
|
4024
|
-
|
|
4025
|
-
```bash
|
|
4026
|
-
npm install @kudzujs/core@^0.7.25
|
|
4027
|
-
```
|
|
4028
|
-
|
|
4029
|
-
## 0.7.24 - Router-shaped query reads
|
|
4030
|
-
|
|
4031
|
-
Kudzu 0.7.24 accepts a narrow read-only React Router `useSearchParams()` shape and lowers each static query read to a nullable route signal backed by native `URLSearchParams`, without adding a router runtime.
|
|
4032
|
-
|
|
4033
|
-
### New in 0.7.24
|
|
4034
|
-
|
|
4035
|
-
- A named or aliased `useSearchParams` import may initialize one top-level `const [params]` tuple without a setter.
|
|
4036
|
-
- Direct top-level `const value = params.get("literal")` reads lower to cached nullable query signals.
|
|
4037
|
-
- The route-specific parameter module uses native `URLSearchParams.get()` semantics for missing, empty, duplicate, plus-encoded, Unicode, and percent-encoded values.
|
|
4038
|
-
- Static fallback HTML renders missing query text as blank and omits nullable attributes; browser values initialize before route effects mount.
|
|
4039
|
-
- Query signals compose with direct text and attributes, effect dependencies, native handlers, React Router Link lowering, and configured same-document navigation.
|
|
4040
|
-
- Routes without query reads emit no parameter module or query branch.
|
|
4041
|
-
- Setter tuples, dynamic names, other methods, aliases, wrapped expressions, and indirect reads fail with source diagnostics.
|
|
4042
|
-
- The complete suite passes 115/115 tests with Chrome coverage for standalone and navigation-group query initialization.
|
|
4043
|
-
|
|
4044
|
-
### Boundary
|
|
4045
|
-
|
|
4046
|
-
The supported migration shape is one top-level `const [params] = useSearchParams()` and one or more top-level direct `const value = params.get("literal")` reads. Query setters, `getAll`, `has`, iteration, dynamic names, aliases, inline JSX calls, fallback wrappers, layout ownership, and general URLSearchParams semantics remain unsupported. Native document navigation remains the default; no SPA router is included.
|
|
4047
|
-
|
|
4048
|
-
### Upgrade
|
|
4049
|
-
|
|
4050
|
-
```bash
|
|
4051
|
-
npm install @kudzujs/core@^0.7.24
|
|
4052
|
-
```
|
|
4053
|
-
|
|
4054
|
-
## 0.7.23 - Router-shaped runtime params
|
|
4055
|
-
|
|
4056
|
-
Kudzu 0.7.23 accepts the conventional React Router `useParams()` source shape on runtime bracket routes and redirects it to the existing capability-specific pathname reader without shipping React Router.
|
|
4057
|
-
|
|
4058
|
-
### New in 0.7.23
|
|
4059
|
-
|
|
4060
|
-
- Named or aliased `useParams` imports from `react-router-dom` may be called directly on bracket pages exporting `runtimeParams = true`.
|
|
4061
|
-
- One optional TypeScript type argument is preserved through normalization while the runtime call remains argument-free.
|
|
4062
|
-
- The React Router binding is redirected to `@kudzujs/core`; no `react-router-dom` module reference survives emitted code.
|
|
4063
|
-
- Mixed `Link` and `useParams` imports lower together: Link becomes a base-aware native anchor and params reuse the pathname reader.
|
|
4064
|
-
- Runtime parameter values retain existing secure decoding, direct DOM bindings, effects, handlers, and navigation-group lifecycle behavior.
|
|
4065
|
-
- Indirect references, runtime arguments, default/namespace imports, and unsupported router hooks fail with source diagnostics.
|
|
4066
|
-
- The complete suite passes 112/112 tests with browser coverage for multi-parameter paths and mixed Link/params migration input.
|
|
4067
|
-
|
|
4068
|
-
### Boundary
|
|
4069
|
-
|
|
4070
|
-
React Router `useParams()` lowering requires a direct named or aliased zero-argument call on a bracket route exporting `runtimeParams = true`. Build-known `getStaticPaths()` routes continue to receive params through page props. Catch-all routes, optional segments, indirect calls, runtime arguments, and other router hooks remain unsupported. No SPA router or shared router runtime is added.
|
|
4071
|
-
|
|
4072
|
-
### Upgrade
|
|
4073
|
-
|
|
4074
|
-
```bash
|
|
4075
|
-
npm install @kudzujs/core@^0.7.23
|
|
4076
|
-
```
|
|
4077
|
-
|
|
4078
|
-
## 0.7.22 - SVG structures and native links
|
|
4079
|
-
|
|
4080
|
-
Kudzu 0.7.22 extends ordinary React-shaped structural authoring into SVG and erases the common React Router `Link` form to native navigation without adding an SVG renderer or router runtime.
|
|
4081
|
-
|
|
4082
|
-
### New in 0.7.22
|
|
4083
|
-
|
|
4084
|
-
- Reactive conditional branches inside SVG parse replacement markup in the actual SVG parent context and retain existing DOM ownership semantics.
|
|
4085
|
-
- Flat intrinsic keyed lists inside SVG support add, update, reorder, and removal while preserving keyed identity and the SVG namespace.
|
|
4086
|
-
- SVG fragment construction is compiled out of HTML-only condition and list builds; the measured matched fixture added 333 B raw / 79 B aggregate gzip JavaScript.
|
|
4087
|
-
- A named or aliased `Link` import from `react-router-dom` with one static root-relative `to` lowers to a native `<a href>`, receives the configured `base`, and erases the package import.
|
|
4088
|
-
- Dynamic or relative Link destinations, traversal, `NavLink`, router-only props, spreads, default/namespace imports, and non-JSX uses fail with source diagnostics.
|
|
4089
|
-
- Effect dependency arrays are explicitly proven for multiple direct primitive states or supported props through existing commit batching and `Object.is` comparison.
|
|
4090
|
-
- The complete suite passes 111/111 tests with Chrome coverage for SVG namespace, conditional replacement, keyed identity, Link erasure, and zero-JavaScript static output.
|
|
4091
|
-
|
|
4092
|
-
### Measured fixture
|
|
4093
|
-
|
|
4094
|
-
On the recorded Intel i5-9500 / Chrome 142 environment, 1,000-row SVG medians were 0.8 ms conditional, 1.9 ms update, 8.3 ms reverse, 2.4 ms remove, and 3.5 ms add. The matched HTML control measured 0.7, 1.8, 8.3, 2.5, and 3.6 ms. Link and native-anchor controls emitted byte-identical 248 B HTML and zero JavaScript. Full methodology and raw arrays are in `PERFORMANCE.md`.
|
|
4095
|
-
|
|
4096
|
-
### Boundary
|
|
4097
|
-
|
|
4098
|
-
Structural SVG currently supports reactive conditionals and flat intrinsic keyed lists. Keyed-item conditions, nested SVG lists, reactive MathML, and namespaced attributes remain unsupported. React Router lowering accepts only direct named or aliased `Link` JSX with one safe static root-relative destination and native anchor props. Native document navigation remains the default; no SPA router is included.
|
|
4099
|
-
|
|
4100
|
-
### Upgrade
|
|
4101
|
-
|
|
4102
|
-
```bash
|
|
4103
|
-
npm install @kudzujs/core@^0.7.22
|
|
4104
|
-
```
|
|
4105
|
-
|
|
4106
|
-
## 0.7.21 - Composable collections and effects
|
|
4107
|
-
|
|
4108
|
-
Kudzu 0.7.21 expands ordinary React-shaped collection pipelines and effect authoring while preserving keyed identity, derived dependency semantics, and capability-specific browser output.
|
|
4109
|
-
|
|
4110
|
-
### New in 0.7.21
|
|
4111
|
-
|
|
4112
|
-
- A relative-imported named or default synchronous one-parameter function may directly return a supported pure collection pipeline; Kudzu composes its selector without executing or shipping the function.
|
|
4113
|
-
- Immutable `slice(start, end?)` accepts numeric literals and supported direct primitive state expressions for bounded pagination.
|
|
4114
|
-
- Pure `filter` predicates may combine direct primitive state with supported string methods for reactive search.
|
|
4115
|
-
- Expression-bodied `toSorted((left, right) => ...)` comparators compile into immutable selector sorting; mutating `sort()` fails with a source diagnostic.
|
|
4116
|
-
- A top-level immutable primitive local derived from direct state may appear in an effect dependency array. Source commits schedule comparison, but unchanged derived results do not rerun the effect.
|
|
4117
|
-
- Derived expressions are substituted into setup and cleanup handlers, so reruns and final disposal observe the latest value.
|
|
4118
|
-
- Same-component top-level simple `const` setup and directly returned cleanup functions are statically substituted into effect handlers; indirect aliases remain unsupported.
|
|
4119
|
-
- The complete suite passes 107/107 tests with browser coverage for pagination, search, sorted identity, derived equality, cleanup order, and named effect functions.
|
|
4120
|
-
|
|
4121
|
-
### Boundary
|
|
4122
|
-
|
|
4123
|
-
Collection transforms must be relative, synchronous, capture-free, one-parameter functions with one returned supported pipeline. Slice bounds and sort comparators reject arbitrary calls; `sort()` remains unsupported. Derived effect locals must be pure primitive expressions over direct state. Effect function references must be direct top-level `const` functions in the same component; dynamic selection, parameters, and cross-component references remain unsupported.
|
|
4124
|
-
|
|
4125
|
-
### Upgrade
|
|
4126
|
-
|
|
4127
|
-
```bash
|
|
4128
|
-
npm install @kudzujs/core@^0.7.21
|
|
4129
|
-
```
|
|
4130
|
-
|
|
4131
|
-
## 0.7.20 - Computed child collections
|
|
4132
|
-
|
|
4133
|
-
Kudzu 0.7.20 accepts a common block-bodied keyed `map` callback that computes one direct child collection before returning JSX, without executing arbitrary callback code or adding a browser runtime path.
|
|
4134
|
-
|
|
4135
|
-
### New in 0.7.20
|
|
4136
|
-
|
|
4137
|
-
- A keyed `map` callback may contain one top-level `const` declaration followed by its final JSX return.
|
|
4138
|
-
- The `const` must start from a direct parent-item child property and may use the existing pure `filter`, direct-property `flatMap`, or `Array.from` selector pipeline.
|
|
4139
|
-
- The computed alias feeds exactly one nested keyed list source.
|
|
4140
|
-
- The compiler substitutes the proven calculation into the returned JSX before nested-list analysis, then reuses existing selector encoding and keyed ownership.
|
|
4141
|
-
- Child insertion, reorder, removal, indexes, and DOM identity retain the existing nested-list behavior.
|
|
4142
|
-
- Additional statements, multiple or mixed alias reads, parent capture, mutation, arbitrary calls, and asynchronous callbacks fail during compilation.
|
|
4143
|
-
- The complete suite passes 107/107 tests with browser coverage for dynamic computed-child insertion and source-diagnostic coverage for mixed alias use.
|
|
4144
|
-
|
|
4145
|
-
### Boundary
|
|
4146
|
-
|
|
4147
|
-
This release supports one direct-child collection `const` in a block-bodied keyed-map callback. Multiple calculations, aliases used outside one nested keyed list, imported transforms, parent captures, mutation, and async work remain unsupported.
|
|
4148
|
-
|
|
4149
|
-
### Upgrade
|
|
4150
|
-
|
|
4151
|
-
```bash
|
|
4152
|
-
npm install @kudzujs/core@^0.7.20
|
|
4153
|
-
```
|
|
4154
|
-
|
|
4155
|
-
## 0.7.19 - Reusable collection aliases
|
|
4156
|
-
|
|
4157
|
-
Kudzu 0.7.19 lets one immutable local collection alias feed multiple keyed list sites while preserving independent DOM identity, and formalizes setter callback and object-ref ownership across one ordinary component boundary.
|
|
4158
|
-
|
|
4159
|
-
### New in 0.7.19
|
|
4160
|
-
|
|
4161
|
-
- A top-level immutable local alias over a supported collection pipeline may be reused by multiple keyed `map` sites.
|
|
4162
|
-
- Every alias reference must remain a statically analyzable collection source; mixed reads such as `visible.length` fail with a source-located diagnostic instead of becoming stale build-time values.
|
|
4163
|
-
- Each list site retains its own keyed DOM identity through insertion, reorder, and removal while sharing the same state-backed selector.
|
|
4164
|
-
- Inline or simple `const` setter callbacks may cross one same-file or relative-imported component boundary to an event on the child's direct intrinsic root.
|
|
4165
|
-
- A `null`-initialized object ref may cross the same boundary; conditional removal resolves it to `null`, and remount points it at a fresh element.
|
|
4166
|
-
- These paths reuse compiler-owned behavior and ref descriptors without a callback registry, retained component instance, VDOM, or hydration.
|
|
4167
|
-
- The complete suite passes 107/107 tests with browser coverage for both reusable list identity and callback/ref conditional ownership.
|
|
4168
|
-
|
|
4169
|
-
### Boundary
|
|
4170
|
-
|
|
4171
|
-
Reusable aliases must be top-level immutable locals whose every reference is a supported collection source. Search, slice, pagination, sorting, mutation, imported transforms, arbitrary callbacks, callback refs, and forwarding beyond the proven component boundary remain unsupported.
|
|
4172
|
-
|
|
4173
|
-
### Upgrade
|
|
4174
|
-
|
|
4175
|
-
```bash
|
|
4176
|
-
npm install @kudzujs/core@^0.7.19
|
|
4177
|
-
```
|
|
4178
|
-
|
|
4179
|
-
## 0.7.18 - Primitive child prop dependencies
|
|
4180
|
-
|
|
4181
|
-
Kudzu 0.7.18 formalizes direct JSON-safe primitive parent state as a reactive child prop across ordinary same-file and relative-imported components, without adding component specialization or a browser component tree.
|
|
4182
|
-
|
|
4183
|
-
### New in 0.7.18
|
|
4184
|
-
|
|
4185
|
-
- A direct parent state identifier passed to a destructured child prop remains the same compiler-owned signal.
|
|
4186
|
-
- Child text and attribute bindings update directly when the parent primitive changes.
|
|
4187
|
-
- Child `useEffect` dependency arrays may reference that destructured prop and reuse the parent state ID.
|
|
4188
|
-
- Repeated child calls share the parent signal while retaining independent effect records and captures.
|
|
4189
|
-
- Conditional child insertion mounts its effect, parent updates run cleanup before setup, and removal cleans up exactly once.
|
|
4190
|
-
- Same-file and relative-imported children receive matching behavior; React and component functions remain absent from browser output.
|
|
4191
|
-
- The complete suite passes 106/106 tests with browser coverage for binding updates, dependency order, conditional mount, rerun, and removal.
|
|
4192
|
-
|
|
4193
|
-
### Boundary
|
|
4194
|
-
|
|
4195
|
-
The prop must be a direct JSON-safe primitive parent state identifier. Derived expressions, object or array dependencies, computed prop forwarding, and broader callback/ref ownership remain unsupported.
|
|
4196
|
-
|
|
4197
|
-
### Upgrade
|
|
4198
|
-
|
|
4199
|
-
```bash
|
|
4200
|
-
npm install @kudzujs/core@^0.7.18
|
|
4201
|
-
```
|
|
4202
|
-
|
|
4203
|
-
## 0.7.17 - Lazy reducer initialization
|
|
4204
|
-
|
|
4205
|
-
Kudzu 0.7.17 lowers React-shaped `useReducer(reducer, initialArg, initializer)` calls into existing compiler-owned reducer state when the initializer is statically analyzable, and fixes capability-specialized keyed-list fallback paths.
|
|
4206
|
-
|
|
4207
|
-
### New in 0.7.17
|
|
4208
|
-
|
|
4209
|
-
- A synchronous one-parameter initializer may be inline, same-file, or imported from a relative TypeScript module.
|
|
4210
|
-
- The initial argument must be directly serializable, and the initializer result must be a primitive, plain-object, or array literal derived only from that argument.
|
|
4211
|
-
- The compiler substitutes the argument, emits fresh literal AST, and lowers the call to the existing two-argument reducer ownership path.
|
|
4212
|
-
- React migration imports and direct `@kudzujs/core` imports receive matching TypeScript overloads without adding a reducer runtime.
|
|
4213
|
-
- Dynamic calls, captures, defaults, rest parameters, async or generator functions, and non-literal results fail with source-located diagnostics.
|
|
4214
|
-
- Keyed-list builds now use the template fallback when static collection support is absent and preserve a zero index when index capability code is removed.
|
|
4215
|
-
- The complete suite passes 105/105 tests, including browser coverage for ordinary, nested, reducer-owned, effect-owned, and conditional keyed lists.
|
|
4216
|
-
|
|
4217
|
-
### Boundary
|
|
4218
|
-
|
|
4219
|
-
Kudzu does not execute initializer functions during compilation. It only substitutes a directly serializable argument into a directly serializable return expression. Reducer factories, package initializers, arbitrary computation, and captured values remain unsupported.
|
|
4220
|
-
|
|
4221
|
-
### Upgrade
|
|
4222
|
-
|
|
4223
|
-
```bash
|
|
4224
|
-
npm install @kudzujs/core@^0.7.17
|
|
4225
|
-
```
|
|
4226
|
-
|
|
4227
|
-
## 0.7.16 - Build-time lazy state
|
|
4228
|
-
|
|
4229
|
-
Kudzu 0.7.16 accepts the common React-shaped `useState(() => initialValue)` form when the initializer directly returns a serializable literal, lowering it into existing compiler-owned state with no browser component runtime.
|
|
4230
|
-
|
|
4231
|
-
### New in 0.7.16
|
|
4232
|
-
|
|
4233
|
-
- Anonymous synchronous zero-argument lazy initializers may directly return primitive, plain-object, or array literals.
|
|
4234
|
-
- The compiler lowers those functions before state analysis, so ordinary, repeated, imported, conditional, and keyed-row state reuse existing ownership paths.
|
|
4235
|
-
- Conditional removal still deletes owned state, and remount recreates a fresh clone of the serialized object or array initializer.
|
|
4236
|
-
- React migration imports and direct `@kudzujs/core` imports receive the same behavior and TypeScript inference.
|
|
4237
|
-
- Dynamic calls, captures, parameters, async or generator functions, named function expressions, and multi-statement bodies fail with source-located diagnostics.
|
|
4238
|
-
- Static routes remain JavaScript-free; lazy initializer functions are absent from generated component and browser modules.
|
|
4239
|
-
|
|
4240
|
-
### Boundary
|
|
4241
|
-
|
|
4242
|
-
This release evaluates no arbitrary user code at build time. Initializers must directly return data the compiler can already serialize. Lazy `useReducer` initialization and dynamic state factories remain unsupported.
|
|
4243
|
-
|
|
4244
|
-
### Upgrade
|
|
4245
|
-
|
|
4246
|
-
```bash
|
|
4247
|
-
npm install @kudzujs/core@^0.7.16
|
|
4248
|
-
```
|
|
4249
|
-
|
|
4250
|
-
## 0.7.15 - Child state ownership
|
|
4251
|
-
|
|
4252
|
-
Kudzu 0.7.15 gives repeated ordinary child components independent state and adds explicit state ownership to reactive conditional branches without introducing a browser component tree.
|
|
4253
|
-
|
|
4254
|
-
### New in 0.7.15
|
|
4255
|
-
|
|
4256
|
-
- Repeated same-file and relative-imported child components receive distinct concrete state IDs.
|
|
4257
|
-
- Shared generated handler modules retain per-element state maps and serializable prop captures, so one child update cannot mutate its sibling.
|
|
4258
|
-
- Reactive conditional descriptors record only state created directly by each branch.
|
|
4259
|
-
- Conditional removal unmounts DOM capabilities and deletes the active branch's owned state slots.
|
|
4260
|
-
- Re-entry recreates primitive, object, or array state from serialized initial values instead of restoring stale state.
|
|
4261
|
-
- Initially active branches reuse their pre-rendered state IDs rather than executing the child component a second time.
|
|
4262
|
-
- Nested condition owners remain independent, and existing route/layout, keyed-row, effect, and navigation ownership behavior is preserved.
|
|
4263
|
-
- Static sibling routes remain JavaScript-free; no component registry, hook dispatcher, or generic rerender loop is emitted.
|
|
4264
|
-
|
|
4265
|
-
### Measured fixture
|
|
4266
|
-
|
|
4267
|
-
The focused three-route fixture rendered repeated same-file and imported toggles plus conditional removal/re-entry. A clean local build measured approximately 270 ms and emitted 10,815 B raw JavaScript across the two interactive routes; the static sibling route emitted no script. Chrome verified sibling isolation, state deletion on removal, fresh remount values, and stable initial active-branch IDs.
|
|
4268
|
-
|
|
4269
|
-
### Boundary
|
|
4270
|
-
|
|
4271
|
-
This release owns direct state created while rendering ordinary conditional branches. Lazy `useState`/`useReducer` initialization, broader primitive prop dependencies, and additional callback/ref ownership remain fixture-driven work. Browser output still contains only state and DOM capabilities, never component functions.
|
|
4272
|
-
|
|
4273
|
-
### Upgrade
|
|
4274
|
-
|
|
4275
|
-
```bash
|
|
4276
|
-
npm install @kudzujs/core@^0.7.15
|
|
4277
|
-
```
|
|
4278
|
-
|
|
4279
|
-
## 0.7.14 - Intrinsic forwardRef
|
|
4280
|
-
|
|
4281
|
-
Kudzu 0.7.14 preserves conventional direct `forwardRef()` component authoring while erasing the wrapper into build-time intrinsic output.
|
|
4282
|
-
|
|
4283
|
-
### New in 0.7.14
|
|
4284
|
-
|
|
4285
|
-
- `forwardRef` may be imported directly or with an alias from `react`, or called as a direct default/namespace React member.
|
|
4286
|
-
- One top-level `const` component may wrap one inline synchronous `(props, ref)` render function.
|
|
4287
|
-
- The compiler removes `ref` from ordinary props and rest bindings before supplying it as the render function's second parameter.
|
|
4288
|
-
- The forwarded object ref must appear exactly once on the direct intrinsic root and reuses Kudzu's existing deterministic ref marker.
|
|
4289
|
-
- Components remain valid when the optional ref prop is omitted; `null` and `undefined` intrinsic refs emit no marker.
|
|
4290
|
-
- Same-file and relative-imported components compile without React, a wrapper function, hydration, or a browser component runtime.
|
|
4291
|
-
- Indirect callbacks, async/generator renders, callback or composed refs, fragments, component roots, nested targets, repeated forwarding, and `memo(forwardRef(...))` fail with source diagnostics.
|
|
4292
|
-
|
|
4293
|
-
### Boundary
|
|
4294
|
-
|
|
4295
|
-
This release intentionally supports one direct object-ref boundary. It does not add React ref objects, imperative handles, generic ref composition, or browser component instances. Existing keyed-row ownership checks still require refs used inside keyed lists to originate from that row.
|
|
4296
|
-
|
|
4297
|
-
### Upgrade
|
|
4298
|
-
|
|
4299
|
-
```bash
|
|
4300
|
-
npm install @kudzujs/core@^0.7.14
|
|
4301
|
-
```
|
|
4302
|
-
|
|
4303
|
-
## 0.7.13 - Deterministic useId
|
|
4304
|
-
|
|
4305
|
-
Kudzu 0.7.13 preserves conventional top-level React `useId()` authoring while emitting deterministic static HTML IDs with no browser runtime.
|
|
4306
|
-
|
|
4307
|
-
### New in 0.7.13
|
|
4308
|
-
|
|
4309
|
-
- `useId` may be imported directly or with an alias from `react`, or called as a direct default/namespace React member.
|
|
4310
|
-
- Each top-level `const id = useId()` receives a stable build-time ID that can be reused by `id`, `htmlFor`, and ARIA ID-reference attributes.
|
|
4311
|
-
- Repeated component calls receive distinct IDs, while unchanged clean builds reproduce the same output.
|
|
4312
|
-
- Shared layouts and route content use separate ID namespaces during complete-document and enhanced navigation builds.
|
|
4313
|
-
- Static routes remain JavaScript-free; no hook dispatcher, hydration metadata, or browser component function is emitted.
|
|
4314
|
-
- Calls with arguments, non-top-level forms, and keyed-row ownership fail with source-located diagnostics.
|
|
4315
|
-
|
|
4316
|
-
### Boundary
|
|
4317
|
-
|
|
4318
|
-
`useId()` accepts no arguments and must initialize one top-level `const` identifier in an ordinary component. Keyed rows remain unsupported because cloned row templates require key-scoped rewriting of `id`, `for`, ARIA IDREF, and fragment-reference attributes; Kudzu rejects the unsafe shape instead of emitting duplicate IDs.
|
|
4319
|
-
|
|
4320
|
-
### Upgrade
|
|
4321
|
-
|
|
4322
|
-
```bash
|
|
4323
|
-
npm install @kudzujs/core@^0.7.13
|
|
4324
|
-
```
|
|
4325
|
-
|
|
4326
|
-
## 0.7.12 - Exported row reuse
|
|
4327
|
-
|
|
4328
|
-
Kudzu 0.7.12 lets directly exported same-file row components remain ordinary reusable source while every supported call still specializes to intrinsic DOM.
|
|
4329
|
-
|
|
4330
|
-
### New in 0.7.12
|
|
4331
|
-
|
|
4332
|
-
- Same-file keyed rows may use direct `export function Row` declarations.
|
|
4333
|
-
- Function-valued `export const Row = ...` declarations receive the same specialization.
|
|
4334
|
-
- One exported row may be reused across multiple keyed maps and ordinary static JSX sites.
|
|
4335
|
-
- Every discovered JSX call specializes independently; the exported declaration remains build-only and no component function or name enters browser assets.
|
|
4336
|
-
- Existing keyed identity, event handlers, conditions, styles, static callbacks, reorder, and removal behavior remain unchanged.
|
|
4337
|
-
- Non-JSX references and dynamic component aliases continue to fail with a source-located `may only be referenced as JSX` diagnostic.
|
|
4338
|
-
- Export-list and default-export aliases, exported state-backed wrappers, and exported reducer-dispatch components remain outside this direct-row fixture.
|
|
4339
|
-
|
|
4340
|
-
### Boundary
|
|
4341
|
-
|
|
4342
|
-
This release supports direct export modifiers on same-file keyed row function declarations and function-valued constants. Every local reference must remain a JSX call, and effectful row components may still only run at keyed sites. Imported rows retain their existing default, named, aliased, and direct named re-export support.
|
|
4343
|
-
|
|
4344
|
-
### Upgrade
|
|
4345
|
-
|
|
4346
|
-
```bash
|
|
4347
|
-
npm install @kudzujs/core@^0.7.12
|
|
4348
|
-
```
|
|
4349
|
-
|
|
4350
|
-
## 0.7.11 - Serializable defaults and rest props
|
|
4351
|
-
|
|
4352
|
-
Kudzu 0.7.11 preserves common non-primitive defaults and direct rest forwarding across existing compiler-specialized component boundaries.
|
|
4353
|
-
|
|
4354
|
-
### New in 0.7.11
|
|
4355
|
-
|
|
4356
|
-
- Specialized collection wrappers, keyed rows, and reducer components accept directly serializable primitive, plain-object, and array literal prop defaults.
|
|
4357
|
-
- One final identifier rest binding may be forwarded exactly once to the component's direct intrinsic root.
|
|
4358
|
-
- Rest props expand into ordinary JSX attributes before existing event, binding, style, and keyed-row analysis, preserving source-order overrides without a runtime rest object.
|
|
4359
|
-
- Calling-component `const` prop spreads now resolve through lexical function scopes, including keyed row calls nested inside `map` callbacks.
|
|
4360
|
-
- Dynamic defaults, indirect or repeated rest use, rest-forwarded children, and prototype-sensitive rest properties fail with source-located diagnostics.
|
|
4361
|
-
- A React-shaped keyed row fixture proves object and array defaults, ARIA and event rest props, style output, and component erasure.
|
|
4362
|
-
- The repository README is now a concise project entry point; detailed APIs, limits, and benchmarks link to the maintained web documentation.
|
|
4363
|
-
|
|
4364
|
-
### Boundary
|
|
4365
|
-
|
|
4366
|
-
Defaults must be directly serializable literals. Rest must be one final identifier binding used exactly once as a spread on the direct intrinsic root. State collections still cross specialized wrapper boundaries as direct props. Exported reusable specialized rows, `forwardRef`, and `useId` remain fixture-driven work.
|
|
4367
|
-
|
|
4368
|
-
### Upgrade
|
|
4369
|
-
|
|
4370
|
-
```bash
|
|
4371
|
-
npm install @kudzujs/core@^0.7.11
|
|
4372
|
-
```
|
|
4373
|
-
|
|
4374
|
-
## 0.7.10 - Component composition
|
|
4375
|
-
|
|
4376
|
-
Kudzu 0.7.10 preserves common component composition across existing compiler-specialized collection boundaries.
|
|
4377
|
-
|
|
4378
|
-
### New in 0.7.10
|
|
4379
|
-
|
|
4380
|
-
- State-backed collection wrappers, keyed rows, and reducer specializations accept prop spreads from direct inline object literals or one direct `const` object literal declared in the calling component.
|
|
4381
|
-
- Spread and explicit props apply in source order, preserving ordinary override behavior.
|
|
4382
|
-
- Specialized components accept forwarded JSX children, including mixed text and element children, while still lowering to intrinsic DOM.
|
|
4383
|
-
- Non-self-closing specialized component tags are counted as one JSX use instead of treating the closing tag as another reference.
|
|
4384
|
-
- A conventional React-shaped landing fixture proves imported layout children, component spreads, keyed row children, interaction output, and a zero-JavaScript static route.
|
|
4385
|
-
- Dynamic, computed, circular, prototype-sensitive, and method/accessor spread shapes fail with source-located diagnostics.
|
|
4386
|
-
|
|
4387
|
-
### Boundary
|
|
4388
|
-
|
|
4389
|
-
Spread sources must be inline object literals or one direct `const` object literal declared in the calling component. State collections still cross the specialization boundary as direct props. Rest bindings, non-primitive defaults, exported reusable specialized rows, `forwardRef`, and `useId` remain fixture-driven work.
|
|
4390
|
-
|
|
4391
|
-
### Upgrade
|
|
4392
|
-
|
|
4393
|
-
```bash
|
|
4394
|
-
npm install @kudzujs/core@^0.7.10
|
|
4395
|
-
```
|
|
4396
|
-
|
|
4397
|
-
## 0.7.9 - Keyed-row prop defaults
|
|
4398
|
-
|
|
4399
|
-
Kudzu 0.7.9 lets ordinary keyed row components retain destructured primitive literal prop defaults instead of restructuring every call site.
|
|
4400
|
-
|
|
4401
|
-
### New in 0.7.9
|
|
4402
|
-
|
|
4403
|
-
- Same-file and relative-imported keyed row components accept string, finite-number, boolean, and `null` defaults.
|
|
4404
|
-
- Missing props receive their default literals during existing component specialization.
|
|
4405
|
-
- The component call lowers to intrinsic keyed JSX; React imports and the component call do not enter browser output.
|
|
4406
|
-
- Rest and nested destructuring remain source-diagnosed, while object, array, computed, and call defaults remain rejected.
|
|
4407
|
-
- No browser runtime branch or shared asset bytes are added.
|
|
4408
|
-
- The product documents now define commerce and realtime dashboards as validation fixtures under one general React migration roadmap, not separate product verticals.
|
|
4409
|
-
|
|
4410
|
-
### Boundary
|
|
4411
|
-
|
|
4412
|
-
This release supports primitive literal defaults on compiler-specialized keyed rows. General prop spreads, rest bindings, non-primitive defaults, specialized `children`, `forwardRef`, and `useId` remain fixture-driven composition work.
|
|
4413
|
-
|
|
4414
|
-
### Upgrade
|
|
4415
|
-
|
|
4416
|
-
```bash
|
|
4417
|
-
npm install @kudzujs/core@^0.7.9
|
|
4418
|
-
```
|
|
4419
|
-
|
|
4420
|
-
## 0.7.8 - Static collection fast paths
|
|
4421
|
-
|
|
4422
|
-
Kudzu 0.7.8 specializes compiler-owned static `filter` collections so repeated category changes avoid general keyed-list validation and reconciliation.
|
|
4423
|
-
|
|
4424
|
-
### New in 0.7.8
|
|
4425
|
-
|
|
4426
|
-
- Static source items, unique keys, source positions, and reference entries validate and cache once when the list mounts.
|
|
4427
|
-
- Structural rows removed by a filter become detached prototypes; restoration clones fresh DOM, preserving remount semantics without moving retained keys.
|
|
4428
|
-
- Interleaved additions insert only new contiguous runs instead of attaching additions and then reordering the complete list.
|
|
4429
|
-
- General local-state lists, dynamic selectors, indexed rows, handlers, effects, refs, and row state retain their existing reconciliation paths.
|
|
4430
|
-
- The capability is route-specific and compiles out when no compiler-owned static collection is rendered.
|
|
4431
|
-
- The matched route adds 648 B gzip compared with 0.7.7's initial implementation while reducing 500-row restoration from 13.2 ms to 3.6 ms.
|
|
4432
|
-
|
|
4433
|
-
### Benchmark
|
|
4434
|
-
|
|
4435
|
-
The matched fixture imports 1,000 alternating products, filters to 500, then restores all 1,000 while checking retained and remounted DOM identity. Thirty-one rotating fresh Chrome 150 profiles on an Apple M3 used 4x CPU throttling. Median visible/filter/restore times were Kudzu 37.8/8.4/3.6 ms, React 86.3/12.9/6.2 ms, Vue 54.1/8.4/4.3 ms, and Svelte 61.4/11.7/8.3 ms. React, Vue, and Svelte used Vite CSR shells while Kudzu emitted initial HTML, so visible-row and artifact comparisons are architecture-dependent.
|
|
4436
|
-
|
|
4437
|
-
### Boundary
|
|
4438
|
-
|
|
4439
|
-
The fast path requires a compiler-owned static source, field keys, filter-only selection, and structural rows without handlers, effects, refs, row state, or index dependencies. It is intended for ordinary catalog-sized collections, not direct rendering of 100,000 or 1,000,000 DOM rows; use pagination or windowing for those workloads.
|
|
4440
|
-
|
|
4441
|
-
### Upgrade
|
|
4442
|
-
|
|
4443
|
-
```bash
|
|
4444
|
-
npm install @kudzujs/core@^0.7.8
|
|
4445
|
-
```
|
|
4446
|
-
|
|
4447
|
-
## 0.7.7 - Imported memo collections
|
|
4448
|
-
|
|
4449
|
-
Kudzu 0.7.7 lets ordinary React migration source filter an imported static catalog through state-dependent `useMemo` while reusing existing keyed-list reconciliation.
|
|
4450
|
-
|
|
4451
|
-
### New in 0.7.7
|
|
4452
|
-
|
|
4453
|
-
- Named relative imports of exported JSON-safe `const` arrays can anchor analyzable collection pipelines.
|
|
4454
|
-
- Direct local-state reads in collection selectors invalidate the list when their declared state dependencies change.
|
|
4455
|
-
- Existing keys retain DOM identity through filtering and restoration; removed keys remount when restored.
|
|
4456
|
-
- Compiler-owned static collection state is excluded from development snapshot restoration.
|
|
4457
|
-
- Static routes remain JavaScript-free, and interactive routes ship no React runtime or browser memo cache.
|
|
4458
|
-
- Focused fixtures verify dependency diagnostics, static output, generated selectors, and browser DOM identity.
|
|
4459
|
-
|
|
4460
|
-
### Boundary
|
|
4461
|
-
|
|
4462
|
-
Static collections must be named relative imports of exported JSON-safe `const` arrays. Package, namespace, default, dynamic, mutable, and non-serializable collection sources remain unsupported, as do arbitrary callbacks and general-purpose memo caching.
|
|
4463
|
-
|
|
4464
|
-
### Upgrade
|
|
4465
|
-
|
|
4466
|
-
```bash
|
|
4467
|
-
npm install @kudzujs/core@^0.7.7
|
|
4468
|
-
```
|
|
4469
|
-
|
|
4470
|
-
## 0.7.6 - Zustand-shaped shared stores
|
|
4471
|
-
|
|
4472
|
-
Kudzu 0.7.6 lets reduced React migration source retain a Zustand `create(set => ...)` store across an explicitly configured shared-layout navigation group.
|
|
4473
|
-
|
|
4474
|
-
### New in 0.7.6
|
|
4475
|
-
|
|
4476
|
-
- One exported store with one directly serializable data property and synchronous capture-free actions compiles to one ordinary layout-lifetime Kudzu state slot.
|
|
4477
|
-
- Components select the data or an action with direct forms such as `state => state.quantities` and `state => state.add`.
|
|
4478
|
-
- Selected actions inline through existing functional state updates, so repeated same-turn calls observe current logical state and DOM writes still batch.
|
|
4479
|
-
- Same-group navigation retains the store and layout DOM while incoming route bindings mount against the current value.
|
|
4480
|
-
- Neither React, Zustand, a subscription runtime, nor a generic external-store capability enters the deploy output.
|
|
4481
|
-
- The shopping fixture verifies two same-turn additions, product-to-cart retention, removal, layout DOM identity, package erasure, and source diagnostics in Chrome.
|
|
4482
|
-
|
|
4483
|
-
### Boundary
|
|
4484
|
-
|
|
4485
|
-
The shared layout must initialize the store before route consumers. Derived selectors, multiple data properties, middleware, `get`, subscriptions, equality functions, persist/devtools wrappers, async actions, helper captures, replacement updates, keyed-row initialization, and indirect action forwarding remain unsupported.
|
|
4486
|
-
|
|
4487
|
-
### Upgrade
|
|
4488
|
-
|
|
4489
|
-
```bash
|
|
4490
|
-
npm install @kudzujs/core@^0.7.6
|
|
4491
|
-
```
|
|
4492
|
-
|
|
4493
|
-
## 0.7.5 - Class composition migration
|
|
4494
|
-
|
|
4495
|
-
Kudzu 0.7.5 lets ordinary React source retain common direct `clsx` calls while compiling them to existing static and reactive class paths.
|
|
4496
|
-
|
|
4497
|
-
### New in 0.7.5
|
|
4498
|
-
|
|
4499
|
-
- Default and named `clsx` imports lower at build time for string and number literals, literal arrays, literal object conditions, and conditional expressions.
|
|
4500
|
-
- Dynamic object conditions reuse existing reactive class bindings without serializing or shipping the `clsx` function.
|
|
4501
|
-
- Static uses add no browser JavaScript, and the package import is erased from compiled modules.
|
|
4502
|
-
- Mixed React imports such as `import { useState, type ReactNode } from "react"` now erase type-only specifiers before runtime module rewriting.
|
|
4503
|
-
- The React/Vite fixture verifies initial class output, state-driven class updates in Chrome, package erasure, and mixed type imports.
|
|
4504
|
-
|
|
4505
|
-
### Boundary
|
|
4506
|
-
|
|
4507
|
-
`clsx` spreads, computed object keys, arbitrary calls, and indirect references remain unsupported. This is source lowering for a proven migration pattern, not package execution or a general React ecosystem runtime.
|
|
4508
|
-
|
|
4509
|
-
### Upgrade
|
|
4510
|
-
|
|
4511
|
-
```bash
|
|
4512
|
-
npm install @kudzujs/core@^0.7.5
|
|
4513
|
-
```
|
|
4514
|
-
|
|
4515
|
-
## 0.7.4 - Memoized collection pipelines
|
|
4516
|
-
|
|
4517
|
-
Kudzu 0.7.4 lets ordinary React/Vite source retain analyzable collection work inside `useMemo` while reusing the existing keyed-list selector and DOM identity model.
|
|
4518
|
-
|
|
4519
|
-
### New in 0.7.4
|
|
4520
|
-
|
|
4521
|
-
- Inline `useMemo` callbacks accept collection pipelines rooted in direct local array state.
|
|
4522
|
-
- Existing `filter`, direct-property `flatMap`, and `Array.from` selector analysis is reused without a browser memo cache.
|
|
4523
|
-
- Intermediate `.map()` calls lower to the existing `Array.from(source, mapper)` selector operation.
|
|
4524
|
-
- Memo locals are removed from emitted server modules after their uses are inlined, so state signals never execute array methods during rendering.
|
|
4525
|
-
- State updates preserve keyed row DOM identity while adding, removing, filtering, mapping, and reordering selected values.
|
|
4526
|
-
- Collection callbacks must be synchronous arrows with plain `(item)` or `(item, index)` identifier parameters; async, rest, default, and optional parameters fail with source locations.
|
|
4527
|
-
- The React/Vite fixture verifies `filter + map`, selector generation, browser updates, and retained identity for an existing row.
|
|
4528
|
-
|
|
4529
|
-
### Boundary
|
|
4530
|
-
|
|
4531
|
-
Memoized collections use the existing statically analyzable collection subset. Arbitrary callbacks, external captures, asynchronous transforms, getters, and general-purpose memo caching remain unsupported. React, a VDOM, hydration, and a retained browser component tree are not emitted.
|
|
4532
|
-
|
|
4533
|
-
### Upgrade
|
|
4534
|
-
|
|
4535
|
-
```bash
|
|
4536
|
-
npm install @kudzujs/core@^0.7.4
|
|
4537
|
-
```
|
|
4538
|
-
|
|
4539
|
-
## 0.7.3 - React memo normalization
|
|
4540
|
-
|
|
4541
|
-
Kudzu 0.7.3 accepts common React memo authoring forms while preserving build-time components, direct state bindings, static HTML, and capability-only JavaScript.
|
|
4542
|
-
|
|
4543
|
-
### New in 0.7.3
|
|
4544
|
-
|
|
4545
|
-
- `memo(Component)` and aliased or direct-member equivalents lower to same-file build-time function components.
|
|
4546
|
-
- Inline `useCallback` wrappers continue to lower directly to analyzable handler functions without a browser memo cache.
|
|
4547
|
-
- Inline synchronous `useMemo` callbacks may return one expression over primitive literals and direct local state.
|
|
4548
|
-
- Memoized state expressions are inlined at same-component JSX uses so existing bindings update them without component rerenders.
|
|
4549
|
-
- Static pages wrapped in `memo` remain JavaScript-free.
|
|
4550
|
-
- Component shadowing, impure expressions, incomplete state dependencies, duplicate memo locals, and nested memo-local captures fail with source locations.
|
|
4551
|
-
- The React/Vite app fixture verifies repeated counter updates, derived `Double 2`/`Double 4` output, CSS and SVG assets, mount effects, and a zero-JavaScript static route.
|
|
4552
|
-
|
|
4553
|
-
### Boundary
|
|
4554
|
-
|
|
4555
|
-
`memo` identifiers must name unshadowed same-file top-level function components. `useMemo` locals must use unique `const` declarations, may reference only direct local state and primitive literals, and cannot cross nested function boundaries. No browser component cache, React runtime, VDOM, hydration, or retained component tree is emitted.
|
|
4556
|
-
|
|
4557
|
-
### Upgrade
|
|
4558
|
-
|
|
4559
|
-
```bash
|
|
4560
|
-
npm install @kudzujs/core@^0.7.3
|
|
4561
|
-
```
|
|
4562
|
-
|
|
4563
|
-
## 0.7.2 - React hook normalization
|
|
4564
|
-
|
|
4565
|
-
Kudzu 0.7.2 accepts more ordinary React/Vite hook syntax while compiling through the existing static HTML and direct DOM capability paths.
|
|
4566
|
-
|
|
4567
|
-
### New in 0.7.2
|
|
4568
|
-
|
|
4569
|
-
- Supported hooks imported from `react` may retain aliases such as `useState as useMenuState` and `useEffect as runEffect`.
|
|
4570
|
-
- Default and namespace imports may use direct supported members such as `React.useState(...)`.
|
|
4571
|
-
- Inline React `useCallback` wrappers with literal inert dependencies are erased to their callback before Kudzu specialization.
|
|
4572
|
-
- Captured local state must appear in the callback dependency array, preserving an actionable boundary around stale React closures.
|
|
4573
|
-
- Unsupported members, indirect hook references, computed React members, and effectful dependency expressions fail with source locations.
|
|
4574
|
-
- Type-only React namespaces remain available to TypeScript and do not trigger runtime migration diagnostics.
|
|
4575
|
-
- A React/Vite-shaped app fixture verifies CSS, SVG assets, a non-root base, aliased state/effects, member state, repeated callback updates, browser interaction, and a zero-JavaScript static route.
|
|
4576
|
-
|
|
4577
|
-
### Boundary
|
|
4578
|
-
|
|
4579
|
-
`useCallback` requires an inline function and a literal array containing only identifiers or primitive literals. `memo`, `useMemo`, React classes, indirect hook references, side-effect React imports, and dynamic React imports remain unsupported. React, a VDOM, hydration, and a retained browser component tree are never emitted.
|
|
4580
|
-
|
|
4581
|
-
### Upgrade
|
|
4582
|
-
|
|
4583
|
-
```bash
|
|
4584
|
-
npm install @kudzujs/core@^0.7.2
|
|
4585
|
-
```
|
|
4586
|
-
|
|
4587
|
-
## 0.7.1 - Vite-style landing assets
|
|
4588
|
-
|
|
4589
|
-
Kudzu 0.7.1 lets ordinary React/Vite landing-page source retain its common local stylesheet and static asset imports while preserving static HTML output and capability-only JavaScript.
|
|
4590
|
-
|
|
4591
|
-
### New in 0.7.1
|
|
4592
|
-
|
|
4593
|
-
- Relative side-effect CSS imports are validated and erased before server module evaluation.
|
|
4594
|
-
- Default CSS Module imports compile to deterministic scoped class maps with no client runtime.
|
|
4595
|
-
- Relative image, SVG, and font imports compile to base-aware URL strings; supported assets also accept `?url`.
|
|
4596
|
-
- Relative CSS `url(...)` references are rewritten to base-aware emitted URLs, preserving query and hash suffixes.
|
|
4597
|
-
- Referenced asset bytes are copied under deterministic source-relative `dist/assets` paths.
|
|
4598
|
-
- Static assets and CSS Modules work inside specialized relative keyed-row components.
|
|
4599
|
-
- Declaration files under `src` remain available to TypeScript but are excluded from executable module compilation.
|
|
4600
|
-
- The migration fixture verifies a non-root base, byte-identical assets, scoped classes, browser interaction, and zero JavaScript on its static route.
|
|
4601
|
-
|
|
4602
|
-
### Boundary
|
|
4603
|
-
|
|
4604
|
-
CSS Module `composes`, arbitrary import queries, import hashes/attributes, and named or namespace asset bindings fail at build time with source locations. React, a VDOM, hydration, and a retained browser component tree remain absent.
|
|
4605
|
-
|
|
4606
|
-
### Upgrade
|
|
4607
|
-
|
|
4608
|
-
```bash
|
|
4609
|
-
npm install @kudzujs/core@^0.7.1
|
|
4610
|
-
```
|
|
4611
|
-
|
|
4612
|
-
## 0.7.0 - React-source migration preview
|
|
4613
|
-
|
|
4614
|
-
Kudzu 0.7.0 begins the migration track for ordinary React-shaped landing pages. Existing source may retain conventional supported imports from `react`; Kudzu rewrites those imports to compile-time APIs, pre-renders complete HTML, and emits only the route capabilities that are actually used. React, a virtual DOM, hydration, and a browser component tree are never emitted or executed.
|
|
4615
|
-
|
|
4616
|
-
```tsx
|
|
4617
|
-
import React, { useState } from "react"
|
|
4618
|
-
|
|
4619
|
-
export default function Header() {
|
|
4620
|
-
const [open, setOpen] = useState(false)
|
|
4621
|
-
|
|
4622
|
-
return <React.Fragment>
|
|
4623
|
-
<button onClick={() => setOpen(!open)}>{open ? "Close" : "Menu"}</button>
|
|
4624
|
-
{open && <nav>Navigation</nav>}
|
|
4625
|
-
</React.Fragment>
|
|
4626
|
-
}
|
|
4627
|
-
```
|
|
4628
|
-
|
|
4629
|
-
### New in 0.7.0
|
|
4630
|
-
|
|
4631
|
-
- Conventional unaliased named imports of supported hooks from `react` compile through Kudzu without loading React.
|
|
4632
|
-
- Default, namespace, and named `Fragment` imports are accepted for migration source.
|
|
4633
|
-
- Relative function components, props, children, conditions, attributes, text, and event handlers keep their familiar TSX shape.
|
|
4634
|
-
- Static routes using the accepted React import forms still ship zero JavaScript.
|
|
4635
|
-
- Interactive routes ship direct DOM capabilities only; the landing-page acceptance fixture adds state, text, attribute, condition, and menu-handler capabilities.
|
|
4636
|
-
- Emitted modules are checked for surviving runtime React references, and side-effect React imports fail with a source location.
|
|
4637
|
-
- Keyed collections now support analyzable `filter`, direct-property `flatMap`, `Array.from`, positional keys, recursively deep sibling child maps, nested conditions, latest-item handlers, multiple serializable row states, effects, and `null` object refs.
|
|
4638
|
-
|
|
4639
|
-
### Current boundary
|
|
4640
|
-
|
|
4641
|
-
This is source migration support, not a React compatibility runtime. Aliased hooks, member hook calls such as `React.useState`, `memo`, `useMemo`, `useCallback`, React classes, React Router, Next-specific components, React UI packages, side-effect imports, and dynamic React imports remain unsupported. Migrate a real route, reduce the first unsupported pattern to a fixture, and extend the compiler one proven blocker at a time.
|
|
4642
|
-
|
|
4643
|
-
### Measured fixture
|
|
4644
|
-
|
|
4645
|
-
The two-route landing fixture retains React imports across relative components. Its static route has no script, while its interactive mobile-menu route emitted 10,245 B raw / 5,030 B aggregate gzip JavaScript across seven capability files in the 0.7.0 release snapshot. Seven clean builds after one warm-up measured a 310.0 ms median in that historical development environment; the original runner and raw array are not tracked in the current repository.
|
|
4646
|
-
|
|
4647
|
-
### Upgrade
|
|
4648
|
-
|
|
4649
|
-
```bash
|
|
4650
|
-
npm install @kudzujs/core@^0.7.0
|
|
4651
|
-
```
|
|
4652
|
-
|
|
4653
|
-
New Kudzu source should continue importing APIs from `@kudzujs/core`. Retaining `react` imports is intended for migration input where minimizing source edits matters.
|