@kudzujs/core 0.16.3 → 0.16.5
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 +1 -1
- package/PERFORMANCE.md +33 -0
- package/README.md +1 -1
- package/RELEASES.md +80 -0
- package/docs/next-architecture/README.md +1 -1
- package/docs/next-architecture/application-capability-release-plan.md +117 -6
- 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/source-compiler.mjs +9 -11
- package/framework/navigation-runtime.js +1 -1
- package/package.json +4 -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.18.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
|
|
package/PERFORMANCE.md
CHANGED
|
@@ -2,6 +2,39 @@
|
|
|
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.5 Bounded Navigation Cache
|
|
6
|
+
|
|
7
|
+
Measured 2026-08-28 on Linux x64 with Node 24.14.0 and Chrome. Before the
|
|
8
|
+
production fix, five held-prefetch races increased retained CDP documents from 8
|
|
9
|
+
to 16 after a newer canonical navigation had pruned those URLs. Moving the
|
|
10
|
+
existing revision check before the cache write restores the exact bound without
|
|
11
|
+
adding an LRU, cancellation registry, runtime file, or cache abstraction.
|
|
12
|
+
|
|
13
|
+
The default endurance gate runs ten batched cache races and 30 ownership cycles
|
|
14
|
+
in one Chrome profile. Across 101 navigations, baseline/final documents remain
|
|
15
|
+
8, browser state entries 0, DOM nodes 174, listeners 7, and editor
|
|
16
|
+
mounts/disposals 71/71. Forced-GC heap moves from 1,826,244 to 2,022,160 bytes,
|
|
17
|
+
below the larger of the declared 2 MiB or 15% alarm.
|
|
18
|
+
|
|
19
|
+
The maintained Worker benchmark remains 907 raw / 477 gzip B for the Worker
|
|
20
|
+
graph and 14,456 raw / 6,160 gzip B for the window graph. Seven clean builds
|
|
21
|
+
record a 795.3 ms median on this host; timing is not compared because concurrent
|
|
22
|
+
host load differs. Production runtime LOC, concepts, and files remain unchanged.
|
|
23
|
+
|
|
24
|
+
## 0.16.4 Scoped GSAP Animation Lifecycle
|
|
25
|
+
|
|
26
|
+
Measured 2026-08-28 on Linux x64 with Node 24.14.0 and Chrome. The real GSAP
|
|
27
|
+
fixture emits 8 JavaScript files totaling 94,110 raw / 37,819 aggregate gzip
|
|
28
|
+
bytes, while its static sibling emits zero JavaScript. Required Chrome proves
|
|
29
|
+
scoped presentation, native reduced-motion fallback, dependency replacement,
|
|
30
|
+
conditional and enhanced-route disposal, retained structure, and fresh remount.
|
|
31
|
+
|
|
32
|
+
The maintained Worker benchmark remains byte-identical at 907 raw / 477 gzip B
|
|
33
|
+
for the Worker graph and 14,456 raw / 6,159 gzip B for the window graph. Seven
|
|
34
|
+
clean builds record a 625.9 ms median on this host. Timing is not compared with
|
|
35
|
+
the prior sweep. The change adds no runtime file or animation abstraction; one
|
|
36
|
+
existing package-reference ancestry helper shrinks by two lines.
|
|
37
|
+
|
|
5
38
|
## 0.16.3 State-Owned Drag And Drop
|
|
6
39
|
|
|
7
40
|
Measured 2026-08-28 on Linux x64 with Node 24.14.0 and Chrome. The real
|
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ Kudzu compiles ordinary React-shaped TypeScript and TSX into complete static HTM
|
|
|
14
14
|
|
|
15
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.5 - Bounded navigation cache.** Superseded navigations can no longer resurrect pruned prefetched documents, and the maintained endurance gate now covers cache races, route ownership, keyed state, dialogs, and external editors. Read the [release notes](./RELEASES.md#0165---bounded-navigation-cache), open the [release page](https://github.com/kudzujs/kudzu/releases/tag/v0.16.5), 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,85 @@
|
|
|
1
1
|
# Kudzu Releases
|
|
2
2
|
|
|
3
|
+
## 0.16.5 - Bounded Navigation Cache
|
|
4
|
+
|
|
5
|
+
Kudzu 0.16.5 prevents superseded enhanced navigations from resurrecting pruned
|
|
6
|
+
prefetched documents and adds a reproducible long-session ownership gate.
|
|
7
|
+
|
|
8
|
+
### Changed in 0.16.5
|
|
9
|
+
|
|
10
|
+
- Checks the navigation revision before writing a completed prefetched document
|
|
11
|
+
back into the route cache.
|
|
12
|
+
- Prevents stale slow navigations from retaining parsed documents after a newer
|
|
13
|
+
route has committed and pruned their URLs.
|
|
14
|
+
- Adds a dedicated Chrome endurance harness with machine-readable heap, DOM,
|
|
15
|
+
listener, logical-state, resource, and navigation counters.
|
|
16
|
+
- Exercises ten deterministic stale-prefetch races followed by 30 route,
|
|
17
|
+
conditional, keyed, dialog, and real CodeMirror ownership cycles.
|
|
18
|
+
- Proves a layout-owned project notification WebSocket journey with validated
|
|
19
|
+
keyed updates, reconnect, stale-callback rejection, offline recovery, retained
|
|
20
|
+
navigation lifetime, and exact cleanup.
|
|
21
|
+
- Adds no cache abstraction, LRU, transport runtime, ResourceIR, VDOM, hydration,
|
|
22
|
+
React runtime, or retained component tree.
|
|
23
|
+
- Updates `create-kudzu@0.1.130` to generate projects on
|
|
24
|
+
`@kudzujs/core@^0.16.5`.
|
|
25
|
+
|
|
26
|
+
### Output And Browser Evidence
|
|
27
|
+
|
|
28
|
+
- Before the fix, five stale-prefetch races increased retained CDP documents
|
|
29
|
+
from 8 to 16 while logical state remained empty.
|
|
30
|
+
- With the fix, the default 101-navigation run keeps documents at 8,
|
|
31
|
+
`browserState.size` at 0, DOM nodes at 174, listeners at 7, and editor
|
|
32
|
+
mounts/disposals balanced at 71/71.
|
|
33
|
+
- Forced-GC heap moves from 1,826,244 to 2,022,160 bytes, below the declared
|
|
34
|
+
larger-of-2-MiB-or-15% alarm.
|
|
35
|
+
- The maintained Worker graph remains 907 raw / 477 gzip bytes; the window graph
|
|
36
|
+
remains 14,456 raw / 6,160 gzip bytes. Static routes remain zero JavaScript.
|
|
37
|
+
|
|
38
|
+
### Upgrade
|
|
39
|
+
|
|
40
|
+
```sh
|
|
41
|
+
npm install @kudzujs/core@^0.16.5
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## 0.16.4 - Scoped GSAP Animation Lifecycle
|
|
45
|
+
|
|
46
|
+
Kudzu 0.16.4 lets inline GSAP callbacks remain inside one owned effect while
|
|
47
|
+
Kudzu retains structural DOM and exact route, conditional, and dependency
|
|
48
|
+
lifetime ownership.
|
|
49
|
+
|
|
50
|
+
### Changed in 0.16.4
|
|
51
|
+
|
|
52
|
+
- Accepts package references inside an unbroken chain of inline callbacks passed
|
|
53
|
+
directly within an owned effect setup or cleanup.
|
|
54
|
+
- Keeps named, local, imported, render-time, and mixed package indirection
|
|
55
|
+
unsupported.
|
|
56
|
+
- Preserves deterministic visible HTML before GSAP applies bounded opacity and
|
|
57
|
+
transform presentation.
|
|
58
|
+
- Uses native `prefers-reduced-motion` detection for a static presentation with
|
|
59
|
+
no residual inline opacity, transform, or visibility.
|
|
60
|
+
- Reverts the previous GSAP context before dependency replacement and on
|
|
61
|
+
conditional or enhanced-route disposal; remount creates a fresh owner.
|
|
62
|
+
- Adds no animation IR, scheduler, runtime concept, React, VDOM, hydration, or
|
|
63
|
+
retained component tree.
|
|
64
|
+
- Updates `create-kudzu@0.1.129` to generate projects on
|
|
65
|
+
`@kudzujs/core@^0.16.4`.
|
|
66
|
+
|
|
67
|
+
### Output And Browser Evidence
|
|
68
|
+
|
|
69
|
+
- The GSAP fixture emits 8 JavaScript files totaling 94,110 raw / 37,819
|
|
70
|
+
aggregate gzip bytes; its static sibling emits zero JavaScript.
|
|
71
|
+
- Required Chrome proves scoped mount, dependency replacement, reduced-motion
|
|
72
|
+
fallback, conditional and route disposal, retained structure, and fresh
|
|
73
|
+
remount.
|
|
74
|
+
- The maintained Worker and window graphs remain 907 raw / 477 gzip bytes and
|
|
75
|
+
14,456 raw / 6,159 gzip bytes respectively.
|
|
76
|
+
|
|
77
|
+
### Upgrade
|
|
78
|
+
|
|
79
|
+
```sh
|
|
80
|
+
npm install @kudzujs/core@^0.16.4
|
|
81
|
+
```
|
|
82
|
+
|
|
3
83
|
## 0.16.3 - State-Owned Drag And Drop
|
|
4
84
|
|
|
5
85
|
Kudzu 0.16.3 proves that a real SortableJS drag engine can remain a bounded
|
|
@@ -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.18.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
|
|
|
@@ -1277,9 +1277,32 @@ differs from the published baseline.
|
|
|
1277
1277
|
- **Done condition:** GSAP owns only bounded presentation changes and exact
|
|
1278
1278
|
cleanup while Kudzu retains document structure and lifetime ownership.
|
|
1279
1279
|
|
|
1280
|
-
|
|
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.
|
|
1281
1304
|
|
|
1282
|
-
### `0.
|
|
1305
|
+
### `0.16.5`: Endurance Harness
|
|
1283
1306
|
|
|
1284
1307
|
- **Purpose:** make long-session correctness locally reproducible.
|
|
1285
1308
|
- **Expected files:** a dedicated browser soak harness and machine-readable heap,
|
|
@@ -1289,7 +1312,30 @@ differs from the published baseline.
|
|
|
1289
1312
|
- **Stop condition:** only a short synthetic timing loop is measured.
|
|
1290
1313
|
- **Done condition:** failures identify the owner that retained memory or work.
|
|
1291
1314
|
|
|
1292
|
-
|
|
1315
|
+
**Result:** closed through existing document, route, conditional, keyed, and
|
|
1316
|
+
effect ownership. A dedicated application fixture repeatedly opens and closes a
|
|
1317
|
+
native dialog, removes and recreates keyed row state, conditionally disposes and
|
|
1318
|
+
remounts a real CodeMirror editor, and navigates to a canonical released route.
|
|
1319
|
+
The standalone Chrome harness keeps one browser profile alive, runs five warm-up
|
|
1320
|
+
and 30 measured cycles by default, forces GC only before five-cycle checkpoints,
|
|
1321
|
+
and retains machine-readable `samples.jsonl`, `summary.json`, and
|
|
1322
|
+
`environment.json` artifacts under the ignored `test-results/endurance/` path.
|
|
1323
|
+
The required default run completed 71 enhanced navigations with 71 editor mounts
|
|
1324
|
+
and 71 disposals. Every released checkpoint had zero active editors, dialogs,
|
|
1325
|
+
and keyed rows, 29 route elements, six documents, 141 DOM nodes, and seven event
|
|
1326
|
+
listeners. Forced-GC heap moved from 1,820,132 to 2,005,572 bytes, below the
|
|
1327
|
+
larger of the declared 2 MiB or 15% observation alarm. A deterministic failure
|
|
1328
|
+
reports `route:/plain` and the mismatched counters; browser exceptions and failed
|
|
1329
|
+
requests are retained with the same owner. The interactive route graph is
|
|
1330
|
+
242,928 raw / 81,792 aggregate gzip bytes across 11 JavaScript files. Semantic
|
|
1331
|
+
primitives, IR kinds, compiler passes, core/compiler LOC, runtime concepts,
|
|
1332
|
+
runtime files, and public APIs change by zero; one test fixture and one browser
|
|
1333
|
+
harness were added. This evidence changed no production source by itself and was
|
|
1334
|
+
published with the later stale-prefetch fix in the actual `0.16.5` patch.
|
|
1335
|
+
|
|
1336
|
+
## `0.17.x`: Long-Lived Applications
|
|
1337
|
+
|
|
1338
|
+
### `0.17.0`: WebSocket Application Journey
|
|
1293
1339
|
|
|
1294
1340
|
- **Purpose:** move from isolated fake socket ownership to project notifications.
|
|
1295
1341
|
- **Acceptance:** connect, message, keyed update, reconnect, stale socket
|
|
@@ -1298,7 +1344,31 @@ differs from the published baseline.
|
|
|
1298
1344
|
- **Done condition:** repeated navigation balances every listener, timer, and
|
|
1299
1345
|
socket handle.
|
|
1300
1346
|
|
|
1301
|
-
|
|
1347
|
+
**Result:** closed through existing layout state, `EffectIR`, keyed-list, and
|
|
1348
|
+
enhanced-navigation ownership. The first project-application browser extension
|
|
1349
|
+
failed at `websocket-connect`; one inline layout effect now owns a native
|
|
1350
|
+
WebSocket, four socket listeners, native online/offline listeners, generation
|
|
1351
|
+
and socket-identity stale guards, and one 50 ms reconnect timer. Incoming
|
|
1352
|
+
snapshots are validated before replacing the existing notification array, so a
|
|
1353
|
+
same-key server update retains its DOM node and live-region ownership. Required
|
|
1354
|
+
Chrome proves connect, message, keyed update, visible error, reconnect, stale
|
|
1355
|
+
message/error rejection, offline cancellation, online recovery, and eight
|
|
1356
|
+
list/detail enhanced transitions with one retained layout socket. The journey
|
|
1357
|
+
creates three sockets total; while connected it has one active socket, four
|
|
1358
|
+
socket listeners, and two online/offline listeners. Of two reconnect timers,
|
|
1359
|
+
one fires and one is cleared. Final document disposal leaves zero active sockets,
|
|
1360
|
+
socket listeners, window listeners, and reconnect timers, and repeated disposal
|
|
1361
|
+
changes no counter. The project deploy grows by 2,908 raw / 652 aggregate gzip
|
|
1362
|
+
bytes; the list-route JavaScript graph grows by 1,755 raw / 460 aggregate gzip
|
|
1363
|
+
bytes, while `/help` remains zero JavaScript. Semantic primitives, IR kinds,
|
|
1364
|
+
compiler passes, core/compiler LOC, runtime concepts, runtime files, transport
|
|
1365
|
+
abstractions, and public APIs change by zero; one existing application fixture
|
|
1366
|
+
and one browser scenario grow. The maintained Worker/effect graph remains 907
|
|
1367
|
+
raw / 477 gzip bytes for Worker and 14,456 raw / 6,159 gzip bytes for window;
|
|
1368
|
+
its seven-run Linux median was 605.6 ms. No production source changed, so no
|
|
1369
|
+
release was consumed.
|
|
1370
|
+
|
|
1371
|
+
### `0.17.1`: Shared SSE/Transport Decision
|
|
1302
1372
|
|
|
1303
1373
|
- **Purpose:** test multiple independently mounted consumers, replay, and
|
|
1304
1374
|
reconnect against existing layout effects/shared state.
|
|
@@ -1309,7 +1379,20 @@ differs from the published baseline.
|
|
|
1309
1379
|
- **Done condition:** existing composition passes or a minimal transport owner is
|
|
1310
1380
|
architecture-approved.
|
|
1311
1381
|
|
|
1312
|
-
|
|
1382
|
+
**Result:** closed by the stop condition with zero qualifying applications.
|
|
1383
|
+
Mattermost and Twenty remain external research candidates, but neither has a
|
|
1384
|
+
repository-owned reduction proving the complete shared-consumer, ordered replay,
|
|
1385
|
+
reconnect, independent removal, final close, and bounded-history contract. The
|
|
1386
|
+
project application has one layout consumer; all Lupin reductions belong to one
|
|
1387
|
+
application and each owns its socket in one page effect; the route WebSocket,
|
|
1388
|
+
navigation telemetry, Worker dashboard, Memos audit, and development EventSource
|
|
1389
|
+
also lack the complete shared transport shape. Existing layout state and
|
|
1390
|
+
independent `EffectIR` owners remain authoritative. Semantic primitives, IR
|
|
1391
|
+
kinds, compiler passes, core/compiler LOC, runtime concepts, runtime files,
|
|
1392
|
+
fixtures, browser bytes, and public APIs change by zero. No production source
|
|
1393
|
+
changed, so no release was consumed.
|
|
1394
|
+
|
|
1395
|
+
### `0.17.2`: Memory And Disposal Gate
|
|
1313
1396
|
|
|
1314
1397
|
- **Purpose:** close document/layout/route/range/external-instance memory risks.
|
|
1315
1398
|
- **Acceptance:** long repeated journeys show bounded heap, DOM, prefetch cache,
|
|
@@ -1318,6 +1401,29 @@ differs from the published baseline.
|
|
|
1318
1401
|
- **Done condition:** retained growth has a declared bound and repeated samples
|
|
1319
1402
|
pass the agreed threshold.
|
|
1320
1403
|
|
|
1404
|
+
**Result:** complete with one navigation-cache ownership fix. A deterministic
|
|
1405
|
+
race holds unique prefetched documents, starts navigation to each, commits a
|
|
1406
|
+
canonical route that prunes them, and then releases the stale responses. Before
|
|
1407
|
+
the fix, five races left `browserState.size` at zero but increased CDP documents
|
|
1408
|
+
from 8 to 16 under owner `navigation:documents`: stale `navigate()` calls wrote
|
|
1409
|
+
their parsed documents back into the cache before checking the navigation
|
|
1410
|
+
revision. `navigation-runtime.js` now checks revision before the existing cache
|
|
1411
|
+
write; no cache type, LRU, cancellation registry, or public instrumentation was
|
|
1412
|
+
added. The default gate batches ten races within browser connection limits, then
|
|
1413
|
+
runs 30 route, conditional, keyed, dialog, and editor cycles in one Chrome
|
|
1414
|
+
profile. Across 101 navigations, baseline/final documents remain 8, browser state
|
|
1415
|
+
entries 0, DOM nodes 174, listeners 7, and editor mounts/disposals 71/71. Forced-
|
|
1416
|
+
GC heap moves from 1,826,244 to 2,022,160 bytes, below the declared larger-of-2-
|
|
1417
|
+
MiB-or-15% alarm. Semantic primitives, IR kinds, compiler passes, runtime
|
|
1418
|
+
concepts, runtime files, cache abstractions, and public APIs change by zero; one
|
|
1419
|
+
production runtime reorders one existing statement with zero LOC growth. The
|
|
1420
|
+
maintained Worker graph remains 907 raw / 477 gzip bytes and the window graph
|
|
1421
|
+
remains 14,456 raw bytes with gzip moving from 6,159 to 6,160 bytes; its seven-
|
|
1422
|
+
run Linux median was 795.3 ms, recorded without a timing comparison because the
|
|
1423
|
+
host load differs. One endurance fixture and browser gate grow, while static
|
|
1424
|
+
routes remain zero JavaScript. This packet ships as the actual `0.16.5` patch to
|
|
1425
|
+
retain the public `0.16.x` version line.
|
|
1426
|
+
|
|
1321
1427
|
## `0.18.x`: Lazy Loading And Code Splitting
|
|
1322
1428
|
|
|
1323
1429
|
### `0.18.0`: Route And Feature Artifact Baseline
|
|
@@ -1653,4 +1759,9 @@ release transaction where possible or document and publish a forward-fix patch.
|
|
|
1653
1759
|
| `0.16.1` | Released | Preserve the retained CodeMirror instance boundary, bidirectional updates, error recovery, accessibility, and exact cleanup. | None |
|
|
1654
1760
|
| `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 |
|
|
1655
1761
|
| `0.16.3` | Released | Preserve state-owned order, keyed identity, keyboard parity, invalid-input recovery, package disposal, and static exclusion. | None |
|
|
1656
|
-
| `0.16.4` |
|
|
1762
|
+
| `0.16.4` | Released | Preserve scoped GSAP presentation, reduced-motion fallback, dependency/owner cleanup, fresh remount, and static exclusion. | None |
|
|
1763
|
+
| `0.16.5` | Released | Preserve the reproducible endurance evidence, project notification ownership, and bounded stale-prefetch cache disposal. | None |
|
|
1764
|
+
| `0.17.0` | Closed by existing layout effect ownership | Preserve project notification connect, keyed update, reconnect, stale rejection, offline recovery, retained navigation, and exact cleanup evidence. | No production change; no release consumed |
|
|
1765
|
+
| `0.17.1` | Closed by stop condition | Preserve independent effect ownership until three applications prove the complete shared transport and bounded replay contract. | Zero qualifying applications; no release consumed |
|
|
1766
|
+
| `0.17.2` | Released as `0.16.5` | Preserve stale-prefetch rejection and bounded document, state, resource, listener, DOM, and external-instance ownership. | Patch release retained the `0.16.x` public version line |
|
|
1767
|
+
| `0.18.0` | Active | Record exact current route and feature artifact ownership before adding lazy loading. | 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.5` 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.18.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.18.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.18.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.18.0` Route And Feature Artifact Baseline 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.18.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.130` retains the explicit install instructions and generates projects with `@kudzujs/core@^0.16.5`.
|
|
70
70
|
|
|
71
71
|
## Release Boundary
|
|
72
72
|
|
|
@@ -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
|
}
|
|
@@ -129,9 +129,9 @@ async function navigate(url, push, source) {
|
|
|
129
129
|
try { documentResult = await cached }
|
|
130
130
|
catch { documentResult = await fetchDocument(url, record, request.signal) }
|
|
131
131
|
} else documentResult = await fetchDocument(url, record, request.signal)
|
|
132
|
-
documents.set(url.href, Promise.resolve(documentResult))
|
|
133
132
|
const { incoming, parsed, capabilities } = documentResult
|
|
134
133
|
if (current !== revision) return
|
|
134
|
+
documents.set(url.href, Promise.resolve(documentResult))
|
|
135
135
|
styleUpdate = prepareStyles(parsed.styles)
|
|
136
136
|
pendingStyleUpdate = styleUpdate
|
|
137
137
|
await styleUpdate.ready
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kudzujs/core",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.5",
|
|
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,8 @@
|
|
|
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/project-application.test.mjs && node --test --test-skip-pattern='^establishes the 0\\.
|
|
56
|
+
"test": "node --test test/project-application.test.mjs && node --test --test-skip-pattern='^establishes the 0\\.17\\.0 notification WebSocket ownership contract$' test/*.test.mjs",
|
|
57
|
+
"test:endurance": "node test/endurance.mjs",
|
|
57
58
|
"test:package": "node test/package-smoke.mjs",
|
|
58
59
|
"benchmark": "node test/performance.mjs",
|
|
59
60
|
"benchmark:keyed": "node test/keyed-performance.mjs",
|
|
@@ -76,6 +77,7 @@
|
|
|
76
77
|
"@codemirror/view": "^6.43.9",
|
|
77
78
|
"@types/sortablejs": "^1.15.9",
|
|
78
79
|
"chart.js": "^3.8.2",
|
|
80
|
+
"gsap": "^3.15.0",
|
|
79
81
|
"sortablejs": "^1.15.7",
|
|
80
82
|
"typed.js": "^3.0.0",
|
|
81
83
|
"wrangler": "^4.112.0"
|