@kudzujs/core 0.11.4 → 0.12.1

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/PERFORMANCE.md CHANGED
@@ -6,6 +6,47 @@ Reproducibility classes: `npm run benchmark`, `npm run benchmark:keyed`, `npm ru
6
6
 
7
7
  The maintained 2026-08-13 comparison used Node 24.14.0 and an Intel Core i5-9500 Linux x64 host, one warm-up, and seven alternating fresh-process samples against clean `v0.8.44`. A narrow fast path skips Kudzu semantic transformation for 450 plain `.ts` modules whose runtime edges are exclusively resolvable relative TypeScript imports or exports; all other modules retain the existing transformer. Compile median fell 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%); every paired sample improved. Compile peak-RSS median fell from 571.2 MiB to 552.6 MiB, while build peak RSS was 570.9 MiB versus 568.8 MiB. Compiler scratch fell from 7,328,390 to 1,971,061 bytes. Both targets emitted the same 50 static HTML files, 10,980 bytes, and deploy SHA-256 `e107d78a7f55bc8a1af0ea6e53efeffa19b3d44d21c892484d103fa346e7ba7b`. This is a source-scale compiler comparison, not a cross-framework result.
8
8
 
9
+ ## 0.12.1 Shared Layout, History, Focus, And Scroll
10
+
11
+ Measured 2026-08-23 on macOS arm64 with Node 25.6.1 and Chrome
12
+ 151.0.7922.172. `RUNS=7 npm run benchmark:project-navigation` uses fresh Chrome
13
+ profiles after the required browser journey proves hash and non-hash focus,
14
+ explicit hash/top scroll, title/live announcements, back/forward, retained
15
+ layout state, fresh route state, and native navigation outside the route group.
16
+
17
+ The two-route session uses 16 JavaScript files totaling 58,974 raw / 22,129
18
+ aggregate gzip bytes, an increase of 4 raw / 5 gzip bytes from `0.12.0` for the
19
+ correct non-hash focus fallback. Navigation samples are
20
+ `[1.5, 1.4, 1.3, 1.3, 1.3, 1.3, 1.4]` ms, with a 1.3 ms median and 1.3/1.5 ms
21
+ minimum/maximum. The range overlaps `0.12.0`, so no latency change is claimed.
22
+
23
+ The application emits 36 files totaling 106,096 raw / 38,201 aggregate gzip
24
+ bytes with deploy SHA-256
25
+ `4f1ce541af0794fcb17458ad37db7b32beb434f3a83cb7f949f13b3e4536fe1c`.
26
+ Core semantic LOC remains 5,682 with no pass, primitive, or runtime-concept
27
+ change. `/help` remains 0 B JavaScript. No AI-delivery cost comparison applies
28
+ to this browser correctness patch.
29
+
30
+ ## 0.12.0 Project Route Shell And Runtime Parameters
31
+
32
+ Measured 2026-08-23 on macOS arm64 with Node 25.6.1 and Chrome
33
+ 151.0.7922.172. `RUNS=21 npm run benchmark:project-navigation` retains the same
34
+ fetch-complete list-to-detail interval while the application also emits
35
+ standalone runtime project and issue routes.
36
+
37
+ The maintained enhanced session is unchanged at 16 JavaScript files totaling
38
+ 58,970 raw / 22,124 aggregate gzip bytes. Navigation samples are
39
+ `[1.3, 1.4, 1.2, 1.4, 1.4, 1.4, 1.3, 1.3, 1.2, 1.4, 1.4, 1.3, 1.1, 1.2, 1.2, 1.2, 1.6, 1.3, 1.4, 1.4, 1.4]`
40
+ ms, with a 1.3 ms median and 1.1/1.6 ms minimum/maximum. The range overlaps
41
+ `0.11.4`, so no latency change is claimed.
42
+
43
+ The runtime project route uses 17,905 raw / 8,455 aggregate gzip JavaScript
44
+ bytes; its issue route uses 18,002 raw / 8,474 aggregate gzip bytes. Complete
45
+ deploy output grows by 16 files and 28,314 raw / 11,911 aggregate gzip bytes.
46
+ These routes reuse existing pathname parameters, layout effects, bindings, and
47
+ native anchors. No compiler or browser-runtime source changed, and `/help`
48
+ remains 0 B JavaScript.
49
+
9
50
  ## 0.11.4 Project Pagination And Polling Policy
10
51
 
11
52
  Measured 2026-08-23 on macOS arm64 with Node 25.6.1 and Chrome
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.11.x`: the compiler API and supported TSX surface may change.
15
+ > Experimental `0.12.x`: the compiler API and supported TSX surface may change.
16
16
 
17
- **Latest release: 0.11.4 - Pagination, refresh, and polling policy.** URL-owned page/filter state, exact refresh, bounded results, back/forward, and visibility-aware polling now compose from existing query signals and owned effects without a scheduler or cache. Read the [release notes](./RELEASES.md#0114---pagination-refresh-and-polling-policy), open the [release page](https://github.com/kudzujs/kudzu/releases/tag/v0.11.4), or follow the [architecture packet](./docs/next-architecture/README.md).
17
+ **Latest release: 0.12.1 - Shared layout, history, focus, and scroll.** Enhanced route groups now prove retained layout state, route cleanup, back/forward history, titles, live announcements, hash and heading focus, explicit scroll policy, and native navigation outside the group. Read the [release notes](./RELEASES.md#0121---shared-layout-history-focus-and-scroll), open the [release page](https://github.com/kudzujs/kudzu/releases/tag/v0.12.1), 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,100 @@
1
1
  # Kudzu Releases
2
2
 
3
+ ## 0.12.1 - Shared Layout, History, Focus, And Scroll
4
+
5
+ Kudzu 0.12.1 completes the accepted same-document project route group with
6
+ explicit history, focus, announcement, and scroll behavior.
7
+
8
+ ### Changed in 0.12.1
9
+
10
+ - Fixed non-hash enhanced navigation so the existing heading/main focus
11
+ fallback runs instead of treating an empty hash as a target.
12
+ - Proved push, back, and forward navigation with retained layout state and
13
+ freshly recreated route state.
14
+ - Added route titles, a native hash anchor, and an intrinsic hash destination to
15
+ the maintained project application.
16
+ - Proved polite navigation announcements, hash scrolling, top scrolling, and
17
+ browser-native links outside the configured route group.
18
+ - Updated `create-kudzu@0.1.114` to generate projects on
19
+ `@kudzujs/core@^0.12.1`.
20
+
21
+ ### Output Evidence
22
+
23
+ - The application emits 36 files, 106,096 raw / 38,201 aggregate gzip bytes,
24
+ and deploy digest
25
+ `4f1ce541af0794fcb17458ad37db7b32beb434f3a83cb7f949f13b3e4536fe1c`.
26
+ - The maintained enhanced session uses 16 JavaScript files totaling 58,974 raw
27
+ / 22,129 aggregate gzip bytes, 4 raw / 5 gzip bytes above `0.12.0`.
28
+ - `/help` remains complete HTML with 0 B JavaScript.
29
+ - No semantic primitive, compiler pass, core compiler line, runtime concept,
30
+ public API, or browser route registry was added.
31
+
32
+ ### Validation
33
+
34
+ - Required Chrome proves focused anchor activation, back/forward, layout
35
+ retention, route cleanup/reset, title/live updates, hash/heading focus, and
36
+ hash/top scroll behavior.
37
+ - Seven fresh Chrome profiles record a 1.3 ms navigation median with a 1.3-1.5
38
+ ms range. The range overlaps `0.12.0`, so no latency change is claimed.
39
+ - The full suite, package smoke, registry metadata, and fresh installation are
40
+ release gates.
41
+
42
+ ### Limits
43
+
44
+ Enhanced navigation remains explicit and route-group scoped. Routes outside the
45
+ group use browser-native document navigation.
46
+
47
+ ### Upgrade
48
+
49
+ ```sh
50
+ npm install @kudzujs/core@^0.12.1
51
+ ```
52
+
53
+ ## 0.12.0 - Project Route Shell And Runtime Parameters
54
+
55
+ Kudzu 0.12.0 opens the routing and application-lifetime train with directly
56
+ addressable project and issue routes.
57
+
58
+ ### Changed in 0.12.0
59
+
60
+ - Added bracket project and nested issue pages using supported React Router
61
+ `useParams()` migration syntax.
62
+ - Emitted complete fallback HTML and pathname parameter ESM for both routes.
63
+ - Preserved native project-to-issue links without an SPA route registry.
64
+ - Emitted ordered host rewrite records while retaining exact-file precedence.
65
+ - Updated `create-kudzu@0.1.113` to generate projects on
66
+ `@kudzujs/core@^0.12.0`.
67
+
68
+ ### Output Evidence
69
+
70
+ - The application emits 36 files, 105,577 raw / 38,067 aggregate gzip bytes,
71
+ and deploy digest
72
+ `6a6c5985cf2a7e9649b0bbd70506357051dac995a74225b0022c5f1ecedaf2b8`.
73
+ - The standalone project route uses 17,905 raw / 8,455 aggregate gzip
74
+ JavaScript bytes; the issue route uses 18,002 raw / 8,474 aggregate gzip.
75
+ - The maintained enhanced session remains byte-identical at 58,970 raw /
76
+ 22,124 aggregate gzip bytes, and `/help` remains 0 B JavaScript.
77
+ - No semantic primitive, compiler pass, production compiler line, runtime
78
+ concept, server, or browser route registry was added.
79
+
80
+ ### Validation
81
+
82
+ - Required Chrome proves direct project and issue entry plus issue reload.
83
+ - The parameter module rejects invalid encoded path segments before mounting.
84
+ - The full suite, package smoke, registry metadata, and fresh installation are
85
+ release gates.
86
+
87
+ ### Limits
88
+
89
+ The deployment host must install the generated runtime rewrites. Exact emitted
90
+ files must be checked before those fallbacks.
91
+
92
+ ### Upgrade
93
+
94
+ ```sh
95
+ npm install @kudzujs/core@^0.12.0
96
+ ```
97
+
3
98
  ## 0.11.4 - Pagination, Refresh, And Polling Policy
4
99
 
5
100
  Kudzu 0.11.4 completes the `0.11.x` server-data train with bounded URL-owned
@@ -512,6 +512,40 @@ remains 0 B JavaScript.
512
512
  - **Stop condition:** an SPA route registry is introduced.
513
513
  - **Done condition:** all target routes are addressable without a browser router.
514
514
 
515
+ **Completion evidence:** the maintained project application adds one bracket
516
+ project page and one nested bracket issue page, both using the existing aliased
517
+ React Router `useParams()` migration path and the existing shared application
518
+ layout. Each fallback emits complete document structure plus only pathname
519
+ parameter, binding, native-handler, and owned-layout capability ESM. The project
520
+ page owns a native parameterized anchor to its first issue. The issue page owns a
521
+ native parameterized project return. Neither standalone artifact includes the
522
+ enhanced-navigation entry.
523
+
524
+ The fixture emits the compiler-provided ordered rewrite records through its
525
+ existing `afterBuild` host boundary. A deterministic static server checks exact
526
+ files first, then applies those records for direct project and issue entry.
527
+ Required Chrome proves project entry,
528
+ issue entry, and issue reload; the generated parameter module rejects an encoded
529
+ slash before mounting. Static HTML and artifact assertions prove the project to
530
+ issue anchor remains native, both routes share one signature-keyed standalone
531
+ runtime family, and `/help` remains 0 B JavaScript. Deployment still must install
532
+ the generated rewrites; Kudzu does not add a server or browser route registry.
533
+
534
+ Existing file routes, runtime pathname parameters, layout ownership, route
535
+ bindings, native anchors, host rewrites, and browser reload are sufficient. This
536
+ packet adds zero semantic primitives, ModuleIR kinds, compiler passes,
537
+ production compiler lines, runtime concepts, normalization rules, adapter rules,
538
+ or public APIs. One positive application fixture gains two route files, direct
539
+ entry, reload, invalid-parameter rejection, native project-to-issue linkage, and
540
+ host fallback cases. It emits 36 files totaling 105,577 raw / 38,067 aggregate
541
+ gzip bytes with deploy SHA-256
542
+ `6a6c5985cf2a7e9649b0bbd70506357051dac995a74225b0022c5f1ecedaf2b8`.
543
+ The runtime project route uses 17,905 raw / 8,455 gzip JavaScript bytes and the
544
+ issue route uses 18,002 raw / 8,474 gzip bytes. The existing two-route enhanced
545
+ session remains byte-identical at 58,970 raw / 22,124 gzip bytes. Twenty-one
546
+ fresh Chrome profiles record a 1.3 ms median with a 1.1/1.6 ms range; the range
547
+ overlaps `0.11.4`, so no latency change is claimed.
548
+
515
549
  ### `0.12.1`: Shared Layout, History, Focus, And Scroll
516
550
 
517
551
  - **Purpose:** complete the accepted same-document application group behavior.
@@ -523,6 +557,31 @@ remains 0 B JavaScript.
523
557
  - **Done condition:** keyboard and browser-history journeys pass with native
524
558
  recovery.
525
559
 
560
+ **Completion evidence:** the project application adds route titles, one native
561
+ hash anchor, and one intrinsic hash destination. Required Chrome activates the
562
+ focused anchor, retains the layout and workspace state through push, back, and
563
+ forward navigation, releases and recreates dirty route state, updates the title
564
+ and polite live status, focuses hash and heading destinations, applies explicit
565
+ hash and top scroll policies, and leaves `/help` browser-native outside the
566
+ approved route group.
567
+
568
+ The journey exposed one existing JavaScript value bug: an absent hash produced
569
+ the empty string and prevented the nullish heading/main focus fallback. The
570
+ navigation runtime now produces `null` for that case. This packet adds zero
571
+ semantic primitives, ModuleIR kinds, compiler passes, core compiler lines,
572
+ runtime concepts, normalization rules, adapter rules, or public APIs. Runtime
573
+ source remains 351 lines. One positive application fixture gains the complete
574
+ acceptance journey; `/help` remains 0 B JavaScript.
575
+
576
+ The fixture emits 36 files totaling 106,096 raw / 38,201 aggregate gzip bytes
577
+ with deploy SHA-256
578
+ `4f1ce541af0794fcb17458ad37db7b32beb434f3a83cb7f949f13b3e4536fe1c`.
579
+ The two-route session uses 16 JavaScript files totaling 58,974 raw / 22,129
580
+ aggregate gzip bytes, 4 raw / 5 gzip bytes above `0.12.0`. Seven fresh Chrome
581
+ profiles record a 1.3 ms navigation median with a 1.3/1.5 ms range. The range
582
+ overlaps `0.12.0`, so no latency change is claimed. This correctness packet has
583
+ no measured AI-delivery cost effect.
584
+
526
585
  ### `0.12.2`: Authentication And Permission Boundary
527
586
 
528
587
  - **Purpose:** complete login, restore, 401, logout, and permission-aware UI.
@@ -1089,5 +1148,7 @@ release transaction where possible or document and publish a forward-fix patch.
1089
1148
  | `0.11.1` | Released | Preserve the published single-owner consistency and exact request-count evidence. | None |
1090
1149
  | `0.11.2` | Released | Preserve the published no-new-primitive architecture decision and zero-byte result. | None |
1091
1150
  | `0.11.3` | Released | Preserve the published optimistic rollback, duplicate prevention, navigation, and retry evidence. | None |
1092
- | `0.11.4` | Active | Prove bounded page/filter synchronization, history, refresh, optional polling cleanup, and exact request behavior. | None |
1093
- | `0.12.0` onward | Blocked | Wait for explicit approval after the patch-only release sequence. | User-directed minor-version boundary |
1151
+ | `0.11.4` | Released | Preserve the published bounded pagination, history, refresh, polling cleanup, and exact request-count evidence. | None |
1152
+ | `0.12.0` | Released | Preserve direct runtime entry, reload, rewrite, and native fallback evidence. | None |
1153
+ | `0.12.1` | Active | Release the completed layout/history/focus/scroll evidence. | None |
1154
+ | `0.12.2` onward | Blocked | Complete the `0.12.1` release transaction first. | Ordered patch boundary |
@@ -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.112` retains the explicit install instructions and generates projects with `@kudzujs/core@^0.11.4`.
69
+ `create-kudzu@0.1.114` retains the explicit install instructions and generates projects with `@kudzujs/core@^0.12.1`.
70
70
 
71
71
  ## Release Boundary
72
72
 
@@ -330,7 +330,7 @@ function updateHead(incoming) {
330
330
  }
331
331
 
332
332
  function focusAndScroll(url) {
333
- const hashTarget = url.hash && document.getElementById(decodeURIComponent(url.hash.slice(1)))
333
+ const hashTarget = url.hash ? document.getElementById(decodeURIComponent(url.hash.slice(1))) : null
334
334
  const target = hashTarget ?? routeElement("h1") ?? routeElement("main")
335
335
  if (target) {
336
336
  if (!target.hasAttribute("tabindex")) target.setAttribute("tabindex", "-1")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kudzujs/core",
3
- "version": "0.11.4",
3
+ "version": "0.12.1",
4
4
  "description": "HTML-first TSX framework with synchronous state semantics and no virtual DOM",
5
5
  "type": "module",
6
6
  "license": "MIT",