@kudzujs/core 0.16.15 → 0.16.16
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 +29 -13
- package/README.md +1 -1
- package/RELEASES.md +29 -0
- package/docs/next-architecture/README.md +1 -1
- package/docs/next-architecture/application-capability-release-plan.md +17 -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/project-session.mjs +8 -1
- package/package.json +1 -1
package/MIGRATION_ROADMAP.md
CHANGED
|
@@ -57,7 +57,7 @@ Syntax compatibility does not mean reproducing React wholesale. Kudzu accepts th
|
|
|
57
57
|
- stronger JavaScript failure resilience;
|
|
58
58
|
- no remaining material large-route build-scaling weakness.
|
|
59
59
|
|
|
60
|
-
The completed 0.9 plan defines the cross-framework comparison and release gate. The active application packet is `0.21.
|
|
60
|
+
The completed 0.9 plan defines the cross-framework comparison and release gate. The active application packet is `0.21.2` 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.
|
|
61
61
|
|
|
62
62
|
### 0.10.0 Through 0.21.x: Application Capability Release Train
|
|
63
63
|
|
package/PERFORMANCE.md
CHANGED
|
@@ -2,18 +2,22 @@
|
|
|
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`, `npm run benchmark:source-scale`, and `npm run benchmark:ai-delivery` 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.21.1 Compiler And Route Scale
|
|
5
|
+
## 0.21.1 Compiler And Route Scale
|
|
6
6
|
|
|
7
7
|
Measured 2026-09-01 on Linux x64 with Node 24.14.0, an Intel i5-9500, six
|
|
8
|
-
logical CPUs, and 31.2 GiB RAM.
|
|
9
|
-
measured fresh-process samples. The
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
logical CPUs, and 31.2 GiB RAM. The 100- and 1,000-route scales use one warm-up
|
|
9
|
+
and three measured fresh-process samples. The 10,000-route scale records one
|
|
10
|
+
complete full-contract run with no warm-up after two diagnostic runs completed
|
|
11
|
+
the measured stages but exposed cleanup and recovery-timeout harness defects.
|
|
12
|
+
The generated topology contains nine imported modules plus one page per route
|
|
13
|
+
and 1,011 lines per route. Fixture generation is excluded. These are absolute
|
|
14
|
+
candidate measurements, not cross-framework claims.
|
|
12
15
|
|
|
13
16
|
| Routes | Modules / lines | Graph median | TypeScript parse median | Normalize median | Compile/transform median | Render median | Write median | Clean median / RSS | Incremental median / retained-session peak RSS |
|
|
14
17
|
|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
|
|
15
18
|
| 100 | 1,000 / 101,100 | 1,184.4 ms | 1,796.7 ms | 37.9 ms | 2,428.1 ms | 456.5 ms | 70.4 ms | 7,444.3 ms / 672.3 MiB | 1,838.0 ms / 680.9 MiB |
|
|
16
19
|
| 1,000 | 10,000 / 1,011,000 | 12,152.6 ms | 18,717.6 ms | 302.9 ms | 23,681.5 ms | 4,919.4 ms | 521.7 ms | 77,515.9 ms / 3,182.3 MiB | 18,132.1 ms / 3,281.1 MiB |
|
|
20
|
+
| 10,000 | 100,000 / 10,110,000 | 103,200.9 ms | 232,840.3 ms | 2,350.3 ms | 244,578.3 ms | 44,885.7 ms | 6,690.1 ms | 1,117,753.0 ms / 5,461.0 MiB | 643,697.2 ms / 8,266.9 MiB |
|
|
17
21
|
|
|
18
22
|
The exact 100-route runs are source read `[30.5, 30.3, 24.7]`, graph
|
|
19
23
|
`[1273.8, 1138.8, 1184.4]`, parse `[1749.8, 1911.6, 1796.7]`, normalize
|
|
@@ -33,6 +37,13 @@ incremental build `[22359.7, 18132.1, 17097.2]` ms. Clean-build RSS is
|
|
|
33
37
|
`[3181.5, 3182.3, 3188.5]` MiB and retained-session peak RSS is
|
|
34
38
|
`[3281.0, 3281.1, 3284.5]` MiB.
|
|
35
39
|
|
|
40
|
+
The complete 10,000-route run records source read `17077.4`, graph `103200.9`,
|
|
41
|
+
TypeScript parse `232840.3`, normalize `2350.3`, compile/transform `244578.3`,
|
|
42
|
+
render `44885.7`, write `6690.1`, clean build `1117753.0`, and incremental
|
|
43
|
+
build `643697.2` ms. Compile-only RSS is 5,561.4 MiB, clean-build RSS is
|
|
44
|
+
5,461.0 MiB, and retained-session peak RSS is 8,266.9 MiB under
|
|
45
|
+
`--max-old-space-size=10240`.
|
|
46
|
+
|
|
36
47
|
Graph time excludes measured TypeScript parsing. Compile/transform excludes
|
|
37
48
|
measured TypeScript parse and Kudzu normalization, but includes the indivisible
|
|
38
49
|
esbuild parse/transform call for proven import-free modules. Render includes
|
|
@@ -52,14 +63,19 @@ At 1,000 routes, clean output is 1,000 files / 221,780 B with digest
|
|
|
52
63
|
`ccdd2630bcaf9fac4a481b64c69982c341e4798205bb9fbb4cac67d528246635`;
|
|
53
64
|
the source change produces digest
|
|
54
65
|
`024811a5f4598d5025abc57320695503b2d63d0fd6aa54bcf79efde848c2a94e`.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
66
|
+
At 10,000 routes, clean output is 10,000 files / 2,237,780 B with digest
|
|
67
|
+
`7a48bc40ff33c4faaef8a01ab90fcfe611a4bada5364a6fedca42f80ad5070d3`;
|
|
68
|
+
the source change emits 2,237,788 B with digest
|
|
69
|
+
`09a42f84b4ce16c994a8bd55b92e5b645c716168f9290d241cfe27903ccfe98f`.
|
|
70
|
+
Both clean and retained-session failure probes reject invalid source without
|
|
71
|
+
changing the prior deploy and recover to the expected digest.
|
|
72
|
+
|
|
73
|
+
The first full 10,000-route attempt exhausted a 10,240 MiB V8 heap while the
|
|
74
|
+
unbounded canonical module cache retained roughly 90,000 parent-linked
|
|
75
|
+
TypeScript ASTs. Bounding complete canonical records to 1,024 retains stable
|
|
76
|
+
position-based symbols while allowing old ASTs to be collected. The identical
|
|
77
|
+
100,000-module / 10,110,000-line topology then completed under the same heap cap.
|
|
78
|
+
This adds eight net production compiler lines, no semantic primitive, compiler
|
|
63
79
|
pass, runtime concept, public API, deploy file, or browser byte.
|
|
64
80
|
|
|
65
81
|
## 0.21.0 Functional Parity Matrix
|
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.16 - Bounded compiler module cache.** Kudzu now completes the full 10,000-route, 100,000-module source-scale contract under a 10 GiB V8 heap by bounding retained canonical TypeScript AST records. Read the [release notes](./RELEASES.md#01616---bounded-compiler-module-cache), open the [release page](https://github.com/kudzujs/kudzu/releases/tag/v0.16.16), 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,34 @@
|
|
|
1
1
|
# Kudzu Releases
|
|
2
2
|
|
|
3
|
+
## 0.16.16 - Bounded Compiler Module Cache
|
|
4
|
+
|
|
5
|
+
Kudzu 0.16.16 bounds canonical TypeScript AST retention so the complete
|
|
6
|
+
10,000-route production-scale contract runs under a 10 GiB V8 heap.
|
|
7
|
+
|
|
8
|
+
### Changed in 0.16.16
|
|
9
|
+
|
|
10
|
+
- Bounds complete canonical module records to a 1,024-entry LRU while preserving
|
|
11
|
+
stable position-based module symbols and reparsing evicted source on demand.
|
|
12
|
+
- Fixes the measured 10,000-route failure where roughly 90,000 retained
|
|
13
|
+
parent-linked TypeScript ASTs exhausted a 10,240 MiB heap.
|
|
14
|
+
- Completes the identical 100,000-module / 10,110,000-line topology with 5,461.0
|
|
15
|
+
MiB clean-build RSS and 8,266.9 MiB retained-session peak RSS.
|
|
16
|
+
- Verifies 10-module / one-page incremental scope, byte-identical changed-clean
|
|
17
|
+
output, deterministic digests, and clean and retained-session recovery.
|
|
18
|
+
- Adds scale-aware recovery timeout, diagnostic stage progress, and bounded
|
|
19
|
+
temporary-fixture cleanup retries to the maintained benchmark harness.
|
|
20
|
+
- Adds eight net production compiler lines, no semantic primitive, compiler
|
|
21
|
+
pass, runtime concept, application API, dependency, deploy artifact, or
|
|
22
|
+
browser byte.
|
|
23
|
+
- Updates `create-kudzu@0.1.141` to generate projects on
|
|
24
|
+
`@kudzujs/core@^0.16.16`.
|
|
25
|
+
|
|
26
|
+
### Upgrade
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
npm install @kudzujs/core@^0.16.16
|
|
30
|
+
```
|
|
31
|
+
|
|
3
32
|
## 0.16.15 - Production Evidence Gates
|
|
4
33
|
|
|
5
34
|
Kudzu 0.16.15 turns compiler scale, large-list parity, and AI attribution gaps
|
|
@@ -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.21.
|
|
18
|
+
[`application-capability-release-plan.md`](./application-capability-release-plan.md) is the authoritative post-0.9 execution queue, currently at `0.21.2`. 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
|
|
|
@@ -1987,7 +1987,7 @@ inventory pass. No production feature changed, so no release is consumed.
|
|
|
1987
1987
|
- **Done condition:** repeated measurements and all material regressions are
|
|
1988
1988
|
explained or fixed.
|
|
1989
1989
|
|
|
1990
|
-
**
|
|
1990
|
+
**Result:** opt-in internal telemetry records source reads, reachable
|
|
1991
1991
|
graph discovery, TypeScript parse, normalize, compile/transform, render, and
|
|
1992
1992
|
write boundaries without changing deploy output. Compile/transform excludes
|
|
1993
1993
|
the measured TypeScript parse and Kudzu normalization but includes indivisible
|
|
@@ -2009,10 +2009,21 @@ incremental medians are 1,838.0 and 18,132.1 ms, recompiling exactly 10 modules
|
|
|
2009
2009
|
and rendering one page in every sample. Clean and changed digests differ,
|
|
2010
2010
|
incremental output equals a clean changed-source build, and clean and retained
|
|
2011
2011
|
failure probes preserve then recover the expected digest. Exact phase samples,
|
|
2012
|
-
bytes, and digests are recorded in `PERFORMANCE.md`.
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2012
|
+
bytes, and digests are recorded in `PERFORMANCE.md`.
|
|
2013
|
+
|
|
2014
|
+
The full 10,000-route / 100,000-module / 10,110,000-line topology initially
|
|
2015
|
+
exhausted a 10,240 MiB V8 heap because the canonical module cache retained about
|
|
2016
|
+
90,000 complete TypeScript ASTs. A 1,024-record LRU bounds that existing cache
|
|
2017
|
+
without changing stable position-based symbols. The identical topology then
|
|
2018
|
+
completed under the same heap cap with 5,461.0 MiB clean-build RSS and 8,266.9
|
|
2019
|
+
MiB retained-session peak RSS. It emits 10,000 files / 2,237,780 B with clean
|
|
2020
|
+
digest `7a48bc40ff33c4faaef8a01ab90fcfe611a4bada5364a6fedca42f80ad5070d3`;
|
|
2021
|
+
incremental output matches a clean changed-source build, recompiles 10 modules,
|
|
2022
|
+
renders one page, and clean and retained recovery pass. One complete measured
|
|
2023
|
+
run is retained after two diagnostic runs completed measured stages but exposed
|
|
2024
|
+
cleanup and timeout defects; no projection or reduced topology is counted.
|
|
2025
|
+
The memory fix adds eight net production lines, no semantic primitive, pass,
|
|
2026
|
+
runtime concept, public API, deploy artifact, or browser byte.
|
|
2016
2027
|
|
|
2017
2028
|
### `0.21.2`: Browser Performance And Memory
|
|
2018
2029
|
|
|
@@ -2186,4 +2197,4 @@ release transaction where possible or document and publish a forward-fix patch.
|
|
|
2186
2197
|
| `0.20.4` | Released as `0.16.14` | Preserve pinned equal conditions, isolated paired attempts, raw failures, independent acceptance, attribution, failure-inclusive costs, source retention, and browser artifact evidence. | Deterministic fixture validates the protocol only; no framework ranking claimed |
|
|
2187
2198
|
| `0.20.5` | Closed by measured stop condition | Preserve the negative tooling-cost result and do not present structured tools as an AI cost reduction. | Tool-assisted attempts cost 16,933 more tokens per success; no release consumed |
|
|
2188
2199
|
| `0.21.0` | Closed by existing semantics | Preserve the complete browser parity matrix, large-list keyboard/release acceptance, and static exclusion controls. | No production change; no release consumed |
|
|
2189
|
-
| `0.21.1` |
|
|
2200
|
+
| `0.21.1` | Released as `0.16.16` | Preserve 100/1,000/10,000-route phase, RSS, output, digest, incremental-equivalence, recovery, and bounded canonical-AST retention evidence. | Full 10,000-route report has one complete measured run after two measured-stage diagnostics; no projection used |
|
|
@@ -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.16` 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.21.2`; 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.21.
|
|
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.21.2`. 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.21.
|
|
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.21.2`; 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.21.
|
|
486
|
+
All listed foundation and `0.9` slices are complete. Current work continues at `0.21.2` browser performance and memory 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.21.
|
|
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.21.2`; 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.141` retains the explicit install instructions and generates projects with `@kudzujs/core@^0.16.16`.
|
|
70
70
|
|
|
71
71
|
## Release Boundary
|
|
72
72
|
|
|
@@ -28,6 +28,7 @@ export function createProjectSession(projectRoot = process.cwd(), { counters, so
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
function createModuleCache(root, sourceIndex, graph, counters, timings) {
|
|
31
|
+
const recordLimit = 1024
|
|
31
32
|
const records = new Map()
|
|
32
33
|
let resolvedExports = new WeakMap()
|
|
33
34
|
const moduleName = file => relative(root, file).replaceAll(sep, "/")
|
|
@@ -46,7 +47,11 @@ function createModuleCache(root, sourceIndex, graph, counters, timings) {
|
|
|
46
47
|
const read = (file, source = sourceIndex.get(file)) => {
|
|
47
48
|
if (typeof source !== "string") throw new Error(`Source text is unavailable for ${file}`)
|
|
48
49
|
const cached = records.get(file)
|
|
49
|
-
if (cached?.source === source)
|
|
50
|
+
if (cached?.source === source) {
|
|
51
|
+
records.delete(file)
|
|
52
|
+
records.set(file, cached)
|
|
53
|
+
return cached
|
|
54
|
+
}
|
|
50
55
|
const parseBefore = timings ? ts.performance.getDuration("Parse") : 0
|
|
51
56
|
const sourceFile = graph.parseSourceFile(file, source)
|
|
52
57
|
if (timings) timings.parseMs = (timings.parseMs ?? 0) + ts.performance.getDuration("Parse") - parseBefore
|
|
@@ -54,7 +59,9 @@ function createModuleCache(root, sourceIndex, graph, counters, timings) {
|
|
|
54
59
|
const summary = summarizeModule(file, sourceFile, moduleSymbol, siteId)
|
|
55
60
|
increment("exportSummaries")
|
|
56
61
|
const record = { source, sourceFile, ...summary }
|
|
62
|
+
records.delete(file)
|
|
57
63
|
records.set(file, record)
|
|
64
|
+
if (records.size > recordLimit) records.delete(records.keys().next().value)
|
|
58
65
|
resolvedExports = new WeakMap()
|
|
59
66
|
return record
|
|
60
67
|
}
|