@kudzujs/core 0.16.1 → 0.16.4
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/MIGRATION_ROADMAP.md +3 -1
- package/PERFORMANCE.md +29 -0
- package/README.md +2 -2
- package/RELEASES.md +75 -0
- package/docs/next-architecture/README.md +1 -1
- package/docs/next-architecture/application-capability-release-plan.md +86 -1
- package/docs/next-architecture/compiler-current-architecture.md +1 -1
- package/docs/next-architecture/large-application-ai-native-roadmap.md +3 -3
- package/docs/next-architecture/versioning.md +2 -2
- package/framework/compiler/analysis/binding-index.mjs +1 -1
- package/framework/compiler/source-compiler.mjs +9 -11
- package/package.json +6 -2
package/MIGRATION_ROADMAP.md
CHANGED
|
@@ -51,7 +51,7 @@ Syntax compatibility does not mean reproducing React wholesale. Kudzu accepts th
|
|
|
51
51
|
- stronger JavaScript failure resilience;
|
|
52
52
|
- no remaining material large-route build-scaling weakness.
|
|
53
53
|
|
|
54
|
-
The completed 0.9 plan defines the cross-framework comparison and release gate. The active application packet is `0.
|
|
54
|
+
The completed 0.9 plan defines the cross-framework comparison and release gate. The active application packet is `0.17.0` in the capability release plan below. Benchmark-only feature omission, unmatched accessibility, weighted scores that hide losses, and unrecorded environment differences do not count as proof.
|
|
55
55
|
|
|
56
56
|
### 0.10.0 Through 0.21.x: Application Capability Release Train
|
|
57
57
|
|
|
@@ -129,6 +129,8 @@ The following are available building blocks, not future vertical roadmaps:
|
|
|
129
129
|
- Mount and dependency effects with cleanup, route/layout lifetimes, conditional/keyed ownership, stale-write isolation, and relative TypeScript Workers.
|
|
130
130
|
- Direct browser-only package references in inline effect setup/cleanup callbacks bundle into route-owned effect ESM without entering build-time component execution or static sibling output.
|
|
131
131
|
- A CodeMirror-class editor may retain one package instance across one mount effect and later dependency update effects through a null-initialized ref with one direct setup assignment and null-reset cleanup. The ref lowers to existing owner-scoped object state; package DOM, bidirectional updates, errors, accessibility, conditional disposal, and fresh remount require no widget runtime or React island.
|
|
132
|
+
- A Chart.js-class canvas instance uses the same retained-handle contract. One mount effect owns construction, resize listeners, and destroy/reset cleanup; later data effects read the instance without replacing it. Enhanced route disposal and fresh remount require no chart runtime or package-specific IR.
|
|
133
|
+
- A SortableJS-class drag engine may temporarily move keyed DOM during a gesture, but Kudzu state remains the durable order owner. The package callback restores authored DOM order before one immutable state reorder; existing keyed reconciliation then preserves row identity. Keyboard controls use the same state operation, package disposal is effect-owned, and static siblings exclude the package.
|
|
132
134
|
- Keyed local-state and imported static collections, pure selectors, nested direct-property lists, recursive and directly exported row specialization, static/keyed component reuse, analyzable specialized prop spreads, serializable literal defaults, direct intrinsic rest forwarding, forwarded JSX children, latest-item handlers, row state/effects/refs, and stable keyed identity.
|
|
133
135
|
- Direct object-state props with one-segment binding/effect/list consumers when the child directly maps an array field; ComponentAnalysis links every consumer to the parent SignalIR without authored field state or a browser component.
|
|
134
136
|
- Complete-document native fallback and optional shared-layout navigation groups with parameter initialization, finite prefetch caching, focus, history, cleanup, and independent capability output.
|
package/PERFORMANCE.md
CHANGED
|
@@ -2,6 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
Reproducibility classes: `npm run benchmark`, `npm run benchmark:keyed`, `npm run benchmark:native`, `npm run benchmark:module-cache`, `npm run benchmark:project-navigation`, `npm run benchmark:project-state`, and `npm run benchmark:source-scale` are maintained in this repository; `npm run benchmark:commerce` is a maintained paired runner over the public external storefront; older excluded-workspace sections are historical provenance only and are not current framework rankings.
|
|
4
4
|
|
|
5
|
+
## 0.16.4 Scoped GSAP Animation Lifecycle
|
|
6
|
+
|
|
7
|
+
Measured 2026-08-28 on Linux x64 with Node 24.14.0 and Chrome. The real GSAP
|
|
8
|
+
fixture emits 8 JavaScript files totaling 94,110 raw / 37,819 aggregate gzip
|
|
9
|
+
bytes, while its static sibling emits zero JavaScript. Required Chrome proves
|
|
10
|
+
scoped presentation, native reduced-motion fallback, dependency replacement,
|
|
11
|
+
conditional and enhanced-route disposal, retained structure, and fresh remount.
|
|
12
|
+
|
|
13
|
+
The maintained Worker benchmark remains byte-identical at 907 raw / 477 gzip B
|
|
14
|
+
for the Worker graph and 14,456 raw / 6,159 gzip B for the window graph. Seven
|
|
15
|
+
clean builds record a 625.9 ms median on this host. Timing is not compared with
|
|
16
|
+
the prior sweep. The change adds no runtime file or animation abstraction; one
|
|
17
|
+
existing package-reference ancestry helper shrinks by two lines.
|
|
18
|
+
|
|
19
|
+
## 0.16.3 State-Owned Drag And Drop
|
|
20
|
+
|
|
21
|
+
Measured 2026-08-28 on Linux x64 with Node 24.14.0 and Chrome. The real
|
|
22
|
+
SortableJS fixture emits 10 JavaScript files totaling 72,251 raw / 26,603
|
|
23
|
+
aggregate gzip bytes, while its static sibling emits zero JavaScript. Required
|
|
24
|
+
Chrome proves drag and keyboard reorder, retained row/input identity, invalid
|
|
25
|
+
package-index recovery, conditional and document disposal, and fresh remount.
|
|
26
|
+
|
|
27
|
+
The maintained Worker benchmark remains byte-identical at 907 raw / 477 gzip B
|
|
28
|
+
for the Worker graph and 14,456 raw / 6,159 gzip B for the window graph. Seven
|
|
29
|
+
clean builds record a 999.7 ms median on this host. Timing is not compared with
|
|
30
|
+
the prior macOS sweep. The change adds no runtime file or drag/drop abstraction;
|
|
31
|
+
it classifies `HTMLElement` with the existing browser globals used by bundled
|
|
32
|
+
effect callbacks.
|
|
33
|
+
|
|
5
34
|
## 0.16.1 Retained Editor Ownership
|
|
6
35
|
|
|
7
36
|
Measured 2026-08-28 on Linux x64 with Node 24.14.0 and Chrome. The new
|
package/README.md
CHANGED
|
@@ -12,9 +12,9 @@ Kudzu compiles ordinary React-shaped TypeScript and TSX into complete static HTM
|
|
|
12
12
|
|
|
13
13
|
*Watch: React-shaped TSX to static HTML and route-specific ESM in 22 seconds.*
|
|
14
14
|
|
|
15
|
-
> Experimental `0.
|
|
15
|
+
> Experimental `0.16.x`: the compiler API and supported TSX surface may change.
|
|
16
16
|
|
|
17
|
-
**Latest release: 0.16.
|
|
17
|
+
**Latest release: 0.16.4 - Scoped GSAP animation lifecycle.** Inline GSAP callbacks stay inside one owned effect while Kudzu retains structural DOM, native reduced-motion fallback, dependency replacement, disposal, and static exclusion. Read the [release notes](./RELEASES.md#0164---scoped-gsap-animation-lifecycle), open the [release page](https://github.com/kudzujs/kudzu/releases/tag/v0.16.4), or follow the [architecture packet](./docs/next-architecture/README.md).
|
|
18
18
|
|
|
19
19
|
- [Documentation](https://kudzujs.cloud/docs)
|
|
20
20
|
- [Installation guide](https://kudzujs.cloud/docs#install)
|
package/RELEASES.md
CHANGED
|
@@ -1,5 +1,80 @@
|
|
|
1
1
|
# Kudzu Releases
|
|
2
2
|
|
|
3
|
+
## 0.16.4 - Scoped GSAP Animation Lifecycle
|
|
4
|
+
|
|
5
|
+
Kudzu 0.16.4 lets inline GSAP callbacks remain inside one owned effect while
|
|
6
|
+
Kudzu retains structural DOM and exact route, conditional, and dependency
|
|
7
|
+
lifetime ownership.
|
|
8
|
+
|
|
9
|
+
### Changed in 0.16.4
|
|
10
|
+
|
|
11
|
+
- Accepts package references inside an unbroken chain of inline callbacks passed
|
|
12
|
+
directly within an owned effect setup or cleanup.
|
|
13
|
+
- Keeps named, local, imported, render-time, and mixed package indirection
|
|
14
|
+
unsupported.
|
|
15
|
+
- Preserves deterministic visible HTML before GSAP applies bounded opacity and
|
|
16
|
+
transform presentation.
|
|
17
|
+
- Uses native `prefers-reduced-motion` detection for a static presentation with
|
|
18
|
+
no residual inline opacity, transform, or visibility.
|
|
19
|
+
- Reverts the previous GSAP context before dependency replacement and on
|
|
20
|
+
conditional or enhanced-route disposal; remount creates a fresh owner.
|
|
21
|
+
- Adds no animation IR, scheduler, runtime concept, React, VDOM, hydration, or
|
|
22
|
+
retained component tree.
|
|
23
|
+
- Updates `create-kudzu@0.1.129` to generate projects on
|
|
24
|
+
`@kudzujs/core@^0.16.4`.
|
|
25
|
+
|
|
26
|
+
### Output And Browser Evidence
|
|
27
|
+
|
|
28
|
+
- The GSAP fixture emits 8 JavaScript files totaling 94,110 raw / 37,819
|
|
29
|
+
aggregate gzip bytes; its static sibling emits zero JavaScript.
|
|
30
|
+
- Required Chrome proves scoped mount, dependency replacement, reduced-motion
|
|
31
|
+
fallback, conditional and route disposal, retained structure, and fresh
|
|
32
|
+
remount.
|
|
33
|
+
- The maintained Worker and window graphs remain 907 raw / 477 gzip bytes and
|
|
34
|
+
14,456 raw / 6,159 gzip bytes respectively.
|
|
35
|
+
|
|
36
|
+
### Upgrade
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
npm install @kudzujs/core@^0.16.4
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 0.16.3 - State-Owned Drag And Drop
|
|
43
|
+
|
|
44
|
+
Kudzu 0.16.3 proves that a real SortableJS drag engine can remain a bounded
|
|
45
|
+
effect while existing keyed state owns durable order and DOM identity.
|
|
46
|
+
|
|
47
|
+
### Changed in 0.16.3
|
|
48
|
+
|
|
49
|
+
- Treats the browser `HTMLElement` constructor as a platform global inside
|
|
50
|
+
bundled effect callbacks while preserving lexical shadowing.
|
|
51
|
+
- Restores package-moved DOM before applying one immutable state reorder, so
|
|
52
|
+
Kudzu remains the only durable keyed DOM owner.
|
|
53
|
+
- Uses the same state operation for drag, keyboard movement, and reset.
|
|
54
|
+
- Recovers invalid package indexes without changing application state.
|
|
55
|
+
- Disposes on conditional and document release; remount creates a fresh package
|
|
56
|
+
instance.
|
|
57
|
+
- Adds no drag/drop IR, animation frame, runtime concept, React, VDOM, hydration,
|
|
58
|
+
or retained component tree.
|
|
59
|
+
- Updates `create-kudzu@0.1.128` to generate projects on
|
|
60
|
+
`@kudzujs/core@^0.16.3`.
|
|
61
|
+
|
|
62
|
+
### Output And Browser Evidence
|
|
63
|
+
|
|
64
|
+
- The SortableJS fixture emits 10 JavaScript files totaling 72,251 raw / 26,603
|
|
65
|
+
aggregate gzip bytes; its static sibling emits zero JavaScript.
|
|
66
|
+
- Required Chrome proves drag and keyboard reorder, state synchronization,
|
|
67
|
+
retained row/input identity, invalid-input recovery, disposal, and fresh
|
|
68
|
+
remount.
|
|
69
|
+
- The maintained Worker and window graphs remain 907 raw / 477 gzip bytes and
|
|
70
|
+
14,456 raw / 6,159 gzip bytes respectively.
|
|
71
|
+
|
|
72
|
+
### Upgrade
|
|
73
|
+
|
|
74
|
+
```sh
|
|
75
|
+
npm install @kudzujs/core@^0.16.3
|
|
76
|
+
```
|
|
77
|
+
|
|
3
78
|
## 0.16.1 - Retained External Editor Ownership
|
|
4
79
|
|
|
5
80
|
Kudzu 0.16.1 lets one CodeMirror-class package instance remain owned across a
|
|
@@ -15,7 +15,7 @@ The completed `0.9.0` milestone is recorded in [`0.9-semantic-compression.md`](.
|
|
|
15
15
|
|
|
16
16
|
[`1.0-large-application-compatibility-audit.md`](./1.0-large-application-compatibility-audit.md) records the first post-0.9 probes against Memos, Apache Answer, and Actual Budget. The audit finds that reduced slices build but whole-application source retention and behavior parity do not yet pass.
|
|
17
17
|
|
|
18
|
-
[`application-capability-release-plan.md`](./application-capability-release-plan.md) is the authoritative post-0.9 execution queue, currently at `0.
|
|
18
|
+
[`application-capability-release-plan.md`](./application-capability-release-plan.md) is the authoritative post-0.9 execution queue, currently at `0.17.0`. It assigns one application-capability section to each minor release and one independently accepted evidence packet to each patch release from `0.10.0` through the `1.0.0` gate. It supersedes the provisional 0.10/0.11/0.12 tool-first ordering in the completed 0.9 handoff without rewriting that historical record.
|
|
19
19
|
|
|
20
20
|
## Required Invariants
|
|
21
21
|
|
|
@@ -1210,6 +1210,24 @@ unchanged.
|
|
|
1210
1210
|
- **Stop condition:** package-specific concepts enter generic IR/runtime.
|
|
1211
1211
|
- **Done condition:** one lifecycle model covers editor and chart/map evidence.
|
|
1212
1212
|
|
|
1213
|
+
**Result:** closed through the `0.16.1` retained-instance contract. A reduced
|
|
1214
|
+
Mattermost Chart.js doughnut chart first reproduced the existing diagnostic when
|
|
1215
|
+
its dependency effect both created and updated the retained instance. Moving
|
|
1216
|
+
acquisition, resize-listener registration, and exact destroy/reset cleanup into
|
|
1217
|
+
one mount effect leaves later data effects read-only and lowers the handle to the
|
|
1218
|
+
same owner-scoped object state used by CodeMirror. Required Chrome proves initial
|
|
1219
|
+
drawing, retained data and resize updates, listener removal, enhanced route
|
|
1220
|
+
disposal, fresh remount, accessibility, and package exclusion from the static
|
|
1221
|
+
sibling. The interactive graph is 208,686 raw / 73,312 aggregate gzip bytes
|
|
1222
|
+
across six JavaScript files; the static sibling emits zero. Semantic primitives,
|
|
1223
|
+
IR kinds, compiler passes, core/compiler LOC, normalization rules, runtime
|
|
1224
|
+
concepts, runtime files, and public APIs change by zero. One positive fixture and
|
|
1225
|
+
one browser contract were added. The maintained Worker/effect benchmark remains
|
|
1226
|
+
907 raw / 477 gzip bytes for the Worker graph and 14,456 raw / 6,159 gzip bytes
|
|
1227
|
+
for the window graph; its seven-run Linux median was 2,464.9 ms, recorded without
|
|
1228
|
+
a timing comparison because the host differs from the published baseline. No
|
|
1229
|
+
production source changed, so no release was consumed.
|
|
1230
|
+
|
|
1213
1231
|
### `0.16.3`: Grid And Drag/Drop Decision
|
|
1214
1232
|
|
|
1215
1233
|
- **Purpose:** test external data-grid or drag engine ownership against keyed
|
|
@@ -1220,6 +1238,70 @@ unchanged.
|
|
|
1220
1238
|
- **Done condition:** either bounded ownership is proven or the package is
|
|
1221
1239
|
explicitly unsupported with a migration path.
|
|
1222
1240
|
|
|
1241
|
+
**Result:** complete through existing keyed state and effect ownership. A
|
|
1242
|
+
THRM-derived SortableJS fixture reproduced one compiler failure because the
|
|
1243
|
+
browser `HTMLElement` constructor was classified as an effect capture and then
|
|
1244
|
+
evaluated during the Node build. Adding that platform constructor to the
|
|
1245
|
+
existing browser-global set fixes the shared root cause while lexical shadowing
|
|
1246
|
+
remains covered. During a gesture SortableJS may move DOM temporarily, but its
|
|
1247
|
+
`onEnd` callback restores authored order before one immutable state reorder;
|
|
1248
|
+
Kudzu's keyed reconciler remains the durable DOM owner and preserves retained
|
|
1249
|
+
row and input identity. The same state operation provides keyboard movement and
|
|
1250
|
+
reset, while invalid package indexes restore DOM without changing state.
|
|
1251
|
+
Required Chrome proves drag and keyboard reorder, state synchronization,
|
|
1252
|
+
identity, invalid-input recovery, conditional/document disposal, and fresh
|
|
1253
|
+
remount. The interactive graph is 72,251 raw / 26,603 aggregate gzip bytes
|
|
1254
|
+
across ten JavaScript files; the static sibling emits zero. Its normalized
|
|
1255
|
+
deploy archive SHA-256 is
|
|
1256
|
+
`a55c18e14ba29df3f1f8ccdc7bcae936092508a01d05abdb887417e6fffb2ecf`.
|
|
1257
|
+
Semantic primitives, IR kinds, compiler passes, normalization rules, runtime
|
|
1258
|
+
concepts, runtime files, drag/drop abstractions, and public APIs change by zero;
|
|
1259
|
+
one existing compiler lookup gains one token. One positive fixture, one browser
|
|
1260
|
+
contract, and one browser-global shadowing case were added. The maintained
|
|
1261
|
+
Worker/effect benchmark remains 907 raw / 477 gzip bytes for the Worker graph
|
|
1262
|
+
and 14,456 raw / 6,159 gzip bytes for the window graph; its seven-run Linux
|
|
1263
|
+
median was 999.7 ms, recorded without a timing comparison because the host
|
|
1264
|
+
differs from the published baseline.
|
|
1265
|
+
|
|
1266
|
+
### `0.16.4`: GSAP Animation Lifecycle
|
|
1267
|
+
|
|
1268
|
+
- **Purpose:** validate one real GSAP landing-page animation against existing
|
|
1269
|
+
DOM-ref and effect ownership.
|
|
1270
|
+
- **Expected boundary:** one owned effect and native reduced-motion behavior;
|
|
1271
|
+
no animation IR or scheduler runtime.
|
|
1272
|
+
- **Acceptance:** mount, deterministic static fallback, scoped targets,
|
|
1273
|
+
prefers-reduced-motion behavior, dependency update where required, route and
|
|
1274
|
+
conditional disposal, fresh remount, and static sibling asset exclusion.
|
|
1275
|
+
- **Stop condition:** package timelines compete with Kudzu for durable DOM
|
|
1276
|
+
structure or require a retained component renderer.
|
|
1277
|
+
- **Done condition:** GSAP owns only bounded presentation changes and exact
|
|
1278
|
+
cleanup while Kudzu retains document structure and lifetime ownership.
|
|
1279
|
+
|
|
1280
|
+
**Result:** complete. A reduction of the MIT-licensed
|
|
1281
|
+
Magic Modal landing page at revision
|
|
1282
|
+
`ab3df864de5b01d604d26345165ea5f7900eae14` reproduced one compiler failure:
|
|
1283
|
+
GSAP's root-scoped `context()` receives an inline callback whose direct package
|
|
1284
|
+
calls were rejected because package-reference validation stopped at the nearest
|
|
1285
|
+
function. The existing ancestry check now accepts only an unbroken chain of
|
|
1286
|
+
inline call arguments back to the owned effect; named, local, and imported helper
|
|
1287
|
+
indirection remains rejected. Required Chrome proves deterministic visible HTML,
|
|
1288
|
+
root-scoped presentation, native reduced-motion fallback without residual inline
|
|
1289
|
+
opacity/transform, dependency replacement with retained DOM identity,
|
|
1290
|
+
conditional and enhanced-route disposal, and fresh remount. GSAP owns only
|
|
1291
|
+
bounded opacity and transform changes; Kudzu retains structural DOM and lifetime
|
|
1292
|
+
ownership. The interactive graph is 94,110 raw / 37,819 aggregate gzip bytes
|
|
1293
|
+
across eight JavaScript files; the static sibling emits zero. Its normalized
|
|
1294
|
+
deploy archive SHA-256 is
|
|
1295
|
+
`2b6467f04452c51878ea81d5e80db21c60286e191e1e49ac482556dbf7c713c3`.
|
|
1296
|
+
Semantic primitives, IR kinds, compiler passes, normalization rules, runtime
|
|
1297
|
+
concepts, runtime files, animation abstractions, schedulers, and public APIs
|
|
1298
|
+
change by zero; one existing compiler ancestry helper shrinks by two LOC. One
|
|
1299
|
+
positive fixture and one two-scenario browser contract were added. The maintained
|
|
1300
|
+
Worker/effect benchmark remains 907 raw / 477 gzip bytes for the Worker graph and
|
|
1301
|
+
14,456 raw / 6,159 gzip bytes for the window graph; its seven-run Linux median was
|
|
1302
|
+
625.9 ms, recorded without a timing comparison because the host differs from the
|
|
1303
|
+
published baseline.
|
|
1304
|
+
|
|
1223
1305
|
## `0.17.x`: Long-Lived Applications
|
|
1224
1306
|
|
|
1225
1307
|
### `0.17.0`: Endurance Harness
|
|
@@ -1594,4 +1676,7 @@ release transaction where possible or document and publish a forward-fix patch.
|
|
|
1594
1676
|
| `0.15.3` | Closed by stop condition | Preserve native top-layer and in-place composition until three independent authored-range failures exist. | Zero qualifying failures; no release consumed |
|
|
1595
1677
|
| `0.16.0` | Closed by existing effect ownership | Preserve real package mount, replacement, disposal, remount, and static exclusion evidence. | No production change; no release consumed |
|
|
1596
1678
|
| `0.16.1` | Released | Preserve the retained CodeMirror instance boundary, bidirectional updates, error recovery, accessibility, and exact cleanup. | None |
|
|
1597
|
-
| `0.16.2` |
|
|
1679
|
+
| `0.16.2` | Closed by existing effect ownership | Preserve retained Chart.js data/resize updates, listener and route cleanup, fresh remount, accessibility, and static exclusion. | No production change; no release consumed |
|
|
1680
|
+
| `0.16.3` | Released | Preserve state-owned order, keyed identity, keyboard parity, invalid-input recovery, package disposal, and static exclusion. | None |
|
|
1681
|
+
| `0.16.4` | Released | Preserve scoped GSAP presentation, reduced-motion fallback, dependency/owner cleanup, fresh remount, and static exclusion. | None |
|
|
1682
|
+
| `0.17.0` | Active | Establish the long-session endurance harness and machine-readable ownership counters. | None |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Current Compiler Architecture
|
|
2
2
|
|
|
3
|
-
This maps the current `0.16.
|
|
3
|
+
This maps the current `0.16.4` architecture, built on the completed `0.9.0` semantic-compression release and `0.8.23` Goal A compiler foundation. The active application packet is `0.17.0`; file and function names are the stable references, while line numbers are intentionally omitted because later work may still move code.
|
|
4
4
|
|
|
5
5
|
## Responsibility Map
|
|
6
6
|
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
## Status
|
|
4
4
|
|
|
5
|
-
Completed compiler-foundation record and longer-term plan after `0.8.35`. The [`0.9-semantic-compression.md`](./0.9-semantic-compression.md) execution queue is complete. The active queue for current work is [`application-capability-release-plan.md`](./application-capability-release-plan.md) at packet `0.
|
|
5
|
+
Completed compiler-foundation record and longer-term plan after `0.8.35`. The [`0.9-semantic-compression.md`](./0.9-semantic-compression.md) execution queue is complete. The active queue for current work is [`application-capability-release-plan.md`](./application-capability-release-plan.md) at packet `0.17.0`. This document does not mark any remaining planned capability as supported and does not authorize a React runtime, VDOM, hydration, retained browser component tree, generic rerenderer, public store/query/resource API, SPA router, or islands.
|
|
6
6
|
|
|
7
|
-
[`MIGRATION_ROADMAP.md`](../../MIGRATION_ROADMAP.md) remains the product authority for product invariants and fixture-driven feature selection. [`application-capability-release-plan.md`](./application-capability-release-plan.md) is authoritative for current work order and evidence at packet `0.
|
|
7
|
+
[`MIGRATION_ROADMAP.md`](../../MIGRATION_ROADMAP.md) remains the product authority for product invariants and fixture-driven feature selection. [`application-capability-release-plan.md`](./application-capability-release-plan.md) is authoritative for current work order and evidence at packet `0.17.0`; this plan retains the completed foundation, deferred program, and long-term production gates. If implementation evidence changes either boundary, update the relevant document before broadening a patch.
|
|
8
8
|
|
|
9
9
|
## Product Outcome
|
|
10
10
|
|
|
@@ -483,4 +483,4 @@ The first comparison is Kudzu versus React + Vite using the same agent, model, t
|
|
|
483
483
|
|
|
484
484
|
## Immediate Decision
|
|
485
485
|
|
|
486
|
-
All listed foundation and `0.9` slices are complete. Current work continues at `0.
|
|
486
|
+
All listed foundation and `0.9` slices are complete. Current work continues at `0.17.0` Endurance Harness under the [`application-capability-release-plan.md`](./application-capability-release-plan.md); keep ResourceIR limited to qualifying independent fixtures, and do not add range ownership, virtualization, optimistic transactions, a public adapter/store API, or a router before evidence justifies them.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Planned Version Sequence
|
|
2
2
|
|
|
3
|
-
This is an execution sequence, not release history. `0.8.16` through `0.8.62` are completed scopes represented by package/release records. The `0.10.0` through `1.0.0` minor/patch sequence is maintained in [`application-capability-release-plan.md`](./application-capability-release-plan.md), currently at `0.
|
|
3
|
+
This is an execution sequence, not release history. `0.8.16` through `0.8.62` are completed scopes represented by package/release records. The `0.10.0` through `1.0.0` minor/patch sequence is maintained in [`application-capability-release-plan.md`](./application-capability-release-plan.md), currently at `0.17.0`; that plan supersedes the provisional tool-first 0.10/0.11/0.12 ordering in the completed 0.9 handoff.
|
|
4
4
|
|
|
5
5
|
Keep each patch behavior-preserving and independently reviewable. If a boundary proves inseparable, revise this plan before combining releases; do not silently broaden a patch.
|
|
6
6
|
|
|
@@ -66,7 +66,7 @@ Keep each patch behavior-preserving and independently reviewable. If a boundary
|
|
|
66
66
|
|
|
67
67
|
## Generator Versions
|
|
68
68
|
|
|
69
|
-
`create-kudzu@0.1.
|
|
69
|
+
`create-kudzu@0.1.129` retains the explicit install instructions and generates projects with `@kudzujs/core@^0.16.4`.
|
|
70
70
|
|
|
71
71
|
## Release Boundary
|
|
72
72
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import ts from "typescript"
|
|
2
2
|
|
|
3
3
|
export const knownGlobalNames = new Set([
|
|
4
|
-
"Array", "ArrayBuffer", "BigInt", "Blob", "Boolean", "Date", "Error", "Event", "FileReader", "FormData", "Infinity", "IntersectionObserver", "Intl", "JSON", "Map", "Math", "NaN", "Number", "Object", "Promise", "Proxy", "RangeError", "ReferenceError", "Reflect", "RegExp", "Set", "String", "Symbol", "TypeError", "URL", "URLSearchParams", "WeakMap", "WeakSet", "WebSocket", "Worker", "alert", "atob", "btoa", "cancelAnimationFrame", "clearInterval", "clearTimeout", "console", "crypto", "document", "fetch", "globalThis", "history", "isFinite", "isNaN", "localStorage", "location", "navigator", "parseFloat", "parseInt", "performance", "queueMicrotask", "requestAnimationFrame", "setInterval", "setTimeout", "structuredClone", "undefined", "window"
|
|
4
|
+
"Array", "ArrayBuffer", "BigInt", "Blob", "Boolean", "Date", "Error", "Event", "FileReader", "FormData", "HTMLElement", "Infinity", "IntersectionObserver", "Intl", "JSON", "Map", "Math", "NaN", "Number", "Object", "Promise", "Proxy", "RangeError", "ReferenceError", "Reflect", "RegExp", "Set", "String", "Symbol", "TypeError", "URL", "URLSearchParams", "WeakMap", "WeakSet", "WebSocket", "Worker", "alert", "atob", "btoa", "cancelAnimationFrame", "clearInterval", "clearTimeout", "console", "crypto", "document", "fetch", "globalThis", "history", "isFinite", "isNaN", "localStorage", "location", "navigator", "parseFloat", "parseInt", "performance", "queueMicrotask", "requestAnimationFrame", "setInterval", "setTimeout", "structuredClone", "undefined", "window"
|
|
5
5
|
])
|
|
6
6
|
|
|
7
7
|
export function createBindingIndex(sourceFile) {
|
|
@@ -2630,19 +2630,17 @@ function insideJsxEventHandler(node, root) {
|
|
|
2630
2630
|
}
|
|
2631
2631
|
|
|
2632
2632
|
function insideOwnedEffectCallback(node, root) {
|
|
2633
|
-
let callback
|
|
2634
2633
|
for (let current = node.parent; current && current !== root.parent; current = current.parent) {
|
|
2635
2634
|
if (!isFunctionLike(current)) continue
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
if (!
|
|
2645
|
-
return ts.isCallExpression(current.parent) && current.parent.arguments[0] === current && ts.isIdentifier(current.parent.expression) && current.parent.expression.text === "useEffect"
|
|
2635
|
+
if (ts.isCallExpression(current.parent) && current.parent.arguments[0] === current && ts.isIdentifier(current.parent.expression) && current.parent.expression.text === "useEffect") return true
|
|
2636
|
+
if (ts.isReturnStatement(current.parent)) {
|
|
2637
|
+
for (let owner = current.parent.parent; owner && owner !== root.parent; owner = owner.parent) {
|
|
2638
|
+
if (!isFunctionLike(owner)) continue
|
|
2639
|
+
return ts.isCallExpression(owner.parent) && owner.parent.arguments[0] === owner && ts.isIdentifier(owner.parent.expression) && owner.parent.expression.text === "useEffect"
|
|
2640
|
+
}
|
|
2641
|
+
return false
|
|
2642
|
+
}
|
|
2643
|
+
if (!ts.isCallExpression(current.parent) || !current.parent.arguments.includes(current)) return false
|
|
2646
2644
|
}
|
|
2647
2645
|
return false
|
|
2648
2646
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kudzujs/core",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.4",
|
|
4
4
|
"description": "HTML-first TSX framework with synchronous state semantics and no virtual DOM",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"build": "node ./bin/kudzu.mjs build",
|
|
54
54
|
"dev": "node ./bin/kudzu.mjs dev",
|
|
55
55
|
"check": "tsc --noEmit && tsc -p test/fixtures/tsconfig.json --noEmit && node ./bin/kudzu.mjs build",
|
|
56
|
-
"test": "node --test test/*.test.mjs",
|
|
56
|
+
"test": "node --test test/project-application.test.mjs && node --test --test-skip-pattern='^establishes the 0\\.15\\.2 notification ownership contract$' test/*.test.mjs",
|
|
57
57
|
"test:package": "node test/package-smoke.mjs",
|
|
58
58
|
"benchmark": "node test/performance.mjs",
|
|
59
59
|
"benchmark:keyed": "node test/keyed-performance.mjs",
|
|
@@ -74,6 +74,10 @@
|
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"@codemirror/view": "^6.43.9",
|
|
77
|
+
"@types/sortablejs": "^1.15.9",
|
|
78
|
+
"chart.js": "^3.8.2",
|
|
79
|
+
"gsap": "^3.15.0",
|
|
80
|
+
"sortablejs": "^1.15.7",
|
|
77
81
|
"typed.js": "^3.0.0",
|
|
78
82
|
"wrangler": "^4.112.0"
|
|
79
83
|
}
|