@kudzujs/core 0.16.24 → 0.16.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -5
- package/framework/compiler/effect-private-ref-pass.mjs +2 -0
- package/framework/compiler/source-compiler.mjs +6 -1
- package/package.json +2 -7
- package/GOAL_A.md +0 -116
- package/GOAL_B.md +0 -121
- package/MIGRATION_ROADMAP.md +0 -457
- package/PERFORMANCE.md +0 -2200
- package/RELEASES.md +0 -4653
- package/docs/next-architecture/0.9-baseline.md +0 -1199
- package/docs/next-architecture/0.9-benchmark-contracts.md +0 -507
- package/docs/next-architecture/0.9-component-property-contract.md +0 -89
- package/docs/next-architecture/0.9-compression-ledger.md +0 -227
- package/docs/next-architecture/0.9-final-proof-audit.md +0 -176
- package/docs/next-architecture/0.9-implementation-plan.md +0 -1819
- package/docs/next-architecture/0.9-resource-lifecycle.md +0 -118
- package/docs/next-architecture/0.9-semantic-compression.md +0 -384
- package/docs/next-architecture/1.0-large-application-compatibility-audit.md +0 -372
- package/docs/next-architecture/README.md +0 -56
- package/docs/next-architecture/application-capability-release-plan.md +0 -2358
- package/docs/next-architecture/compiler-current-architecture.md +0 -95
- package/docs/next-architecture/goal-a-compiler-foundation.md +0 -151
- package/docs/next-architecture/goal-b-optimization-benchmarks.md +0 -86
- package/docs/next-architecture/goal-c-state-resource-research.md +0 -88
- package/docs/next-architecture/goal-d-routing-compatibility-decisions.md +0 -52
- package/docs/next-architecture/large-application-ai-native-roadmap.md +0 -486
- package/docs/next-architecture/performance-gates.md +0 -50
- package/docs/next-architecture/versioning.md +0 -91
- package/framework/README.md +0 -105
|
@@ -1,2358 +0,0 @@
|
|
|
1
|
-
# Application Capability Release Plan
|
|
2
|
-
|
|
3
|
-
This is the authoritative execution plan from `0.10.0` through `1.0.0`. It
|
|
4
|
-
replaces the provisional `0.10` normalize, `0.11` diagnostics, and `0.12`
|
|
5
|
-
adapter ordering recorded in the completed 0.9 packet. Those tools remain in
|
|
6
|
-
scope, but application capability evidence now determines their order.
|
|
7
|
-
|
|
8
|
-
The plan assigns one application-capability section to each minor release and
|
|
9
|
-
one independently releasable evidence packet to each patch release. Planned
|
|
10
|
-
versions are not completed releases. `package.json`, release notes, tags, and
|
|
11
|
-
registry metadata change only after the matching packet passes every gate.
|
|
12
|
-
|
|
13
|
-
## Product Outcome
|
|
14
|
-
|
|
15
|
-
Kudzu must support complete modern application journeys with no React runtime,
|
|
16
|
-
VDOM, hydration, retained browser component tree, generic component renderer,
|
|
17
|
-
or hook dispatcher. Static routes may still emit zero JavaScript. Interactive
|
|
18
|
-
routes may emit every route- or feature-specific capability required for
|
|
19
|
-
correct behavior.
|
|
20
|
-
|
|
21
|
-
The target is zero unused runtime, not zero runtime.
|
|
22
|
-
|
|
23
|
-
## Version Map
|
|
24
|
-
|
|
25
|
-
| Minor | Capability section | Required outcome |
|
|
26
|
-
|---|---|---|
|
|
27
|
-
| `0.10.x` | Local and shared state | The greenfield application shell and state ownership baseline are executable. |
|
|
28
|
-
| `0.11.x` | Async and server data | Loading, errors, stale work, mutation, and evidence-backed shared coordination are complete. |
|
|
29
|
-
| `0.12.x` | Routing and application lifetime | Authenticated route, layout, history, focus, and failure journeys are complete. |
|
|
30
|
-
| `0.13.x` | Forms | Production-shaped validation, drafts, conditional fields, autosave, and upload boundaries are complete. |
|
|
31
|
-
| `0.14.x` | Lists, tables, and virtualization | Large keyed data behavior and a measured bounded-DOM decision are complete. |
|
|
32
|
-
| `0.15.x` | Overlay and layer ownership | Accessible dialog, popover/menu, toast, and any proven layer ownership are complete. |
|
|
33
|
-
| `0.16.x` | External complex UI | Real editor, chart/map, or grid packages use bounded mount/update/dispose ownership. |
|
|
34
|
-
| `0.17.x` | Long-lived applications | Realtime, repeated navigation, cleanup, and long-running memory gates pass. |
|
|
35
|
-
| `0.18.x` | Lazy loading and code splitting | Large feature dependencies load only when their owner requires them. |
|
|
36
|
-
| `0.19.x` | React ecosystem migration | Apache Answer and Memos pass connected browser journeys through the compatibility boundary. |
|
|
37
|
-
| `0.20.x` | AI tooling and delivery cost | Structured tools and a fair tracked AI benchmark reduce cost per successful task. |
|
|
38
|
-
| `0.21.x` | Production-scale proof | Functional parity, build scale, browser performance, memory, and release evidence pass together. |
|
|
39
|
-
| `1.0.0` | Stable application model | Semantic IR v1 is stable and the maintained AI delivery gate passes. |
|
|
40
|
-
|
|
41
|
-
## Execution Rules
|
|
42
|
-
|
|
43
|
-
1. Work on exactly one patch packet at a time. Start the next packet only after
|
|
44
|
-
the previous packet is released or this document explicitly replans it.
|
|
45
|
-
2. Begin behavior work with a real failing greenfield or React-derived fixture.
|
|
46
|
-
3. Reduce the failure through native platform behavior, existing Kudzu
|
|
47
|
-
semantics, normalization, or an internal adapter, in that order.
|
|
48
|
-
4. Two unrelated real fixtures register a repeated application limitation.
|
|
49
|
-
Three unrelated real fixtures are required before architecture review may
|
|
50
|
-
authorize a new semantic primitive.
|
|
51
|
-
5. A patch may complete without a new primitive, compiler pass, public API, or
|
|
52
|
-
runtime when existing composition satisfies its acceptance contract.
|
|
53
|
-
6. Package-specific knowledge ends in compatibility analysis, normalization,
|
|
54
|
-
or an internal adapter. It must not enter generic IR, codegen, or runtime.
|
|
55
|
-
7. Every static sibling remains JavaScript-free. Every interactive route emits
|
|
56
|
-
only the capabilities selected by its validated route record.
|
|
57
|
-
8. Every patch records semantic primitives, core compiler/pass LOC, runtime
|
|
58
|
-
concepts, browser bytes, fixtures, output hashes, and benchmark deltas.
|
|
59
|
-
9. Do not publish a planned version merely because its source compiles. The
|
|
60
|
-
exact release commit must pass behavior, accessibility, browser, output,
|
|
61
|
-
package, and applicable performance gates.
|
|
62
|
-
10. Never silently combine patch packets. Revise this plan first when an
|
|
63
|
-
inseparable producer/consumer boundary is proven.
|
|
64
|
-
|
|
65
|
-
## Shared Testbeds
|
|
66
|
-
|
|
67
|
-
### Greenfield Project Application
|
|
68
|
-
|
|
69
|
-
The maintained greenfield testbed is a project-management SaaS with this route
|
|
70
|
-
shape:
|
|
71
|
-
|
|
72
|
-
```text
|
|
73
|
-
/login
|
|
74
|
-
/app/projects
|
|
75
|
-
/app/projects/:projectId
|
|
76
|
-
/app/issues
|
|
77
|
-
/app/issues/:issueId
|
|
78
|
-
/app/settings
|
|
79
|
-
/help
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
It grows one accepted user journey at a time. `/help` is the static zero-JS
|
|
83
|
-
control. The application uses a deterministic local HTTP server until a packet
|
|
84
|
-
explicitly requires a different transport.
|
|
85
|
-
|
|
86
|
-
### Apache Answer
|
|
87
|
-
|
|
88
|
-
The connected acceptance target is:
|
|
89
|
-
|
|
90
|
-
```text
|
|
91
|
-
login
|
|
92
|
-
-> question list
|
|
93
|
-
-> search/filter/pagination
|
|
94
|
-
-> detail
|
|
95
|
-
-> create/edit
|
|
96
|
-
-> server validation/error
|
|
97
|
-
-> mutation and list refresh
|
|
98
|
-
-> logout
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### Memos
|
|
102
|
-
|
|
103
|
-
The connected acceptance target is:
|
|
104
|
-
|
|
105
|
-
```text
|
|
106
|
-
login
|
|
107
|
-
-> feed
|
|
108
|
-
-> pagination
|
|
109
|
-
-> create memo
|
|
110
|
-
-> reaction
|
|
111
|
-
-> realtime refresh
|
|
112
|
-
-> logout
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Actual Budget remains deferred until a complete pinned workspace and executable
|
|
116
|
-
dependency graph are available.
|
|
117
|
-
|
|
118
|
-
## `0.10.x`: Local And Shared State
|
|
119
|
-
|
|
120
|
-
### `0.10.0`: Application Contract And State Baseline
|
|
121
|
-
|
|
122
|
-
- **Purpose:** create the durable greenfield testbed and capability inventory.
|
|
123
|
-
- **Current limitation:** state, forms, lists, and navigation are proven mostly
|
|
124
|
-
in isolated fixtures rather than one maintained application.
|
|
125
|
-
- **Expected files:** a dedicated project-application fixture, browser
|
|
126
|
-
acceptance entry, package script, and capability manifest; no production
|
|
127
|
-
compiler or runtime file should change.
|
|
128
|
-
- **Acceptance:** `/app/projects` renders deterministic project state, one
|
|
129
|
-
interaction updates direct DOM, `/help` emits zero JavaScript, required
|
|
130
|
-
Chrome runs in CI, and route/artifact baselines are recorded.
|
|
131
|
-
- **AI effect:** one application and one manifest replace repeated repository
|
|
132
|
-
exploration when selecting later capability work.
|
|
133
|
-
- **Stop condition:** the fixture becomes a syntax showcase instead of a user
|
|
134
|
-
journey, or requires a new primitive before the baseline exists.
|
|
135
|
-
- **Done condition:** every later packet can add behavior to the same testbed
|
|
136
|
-
and reuse its framework-neutral acceptance harness.
|
|
137
|
-
|
|
138
|
-
**Completion evidence:** the tracked project application emits `/login`,
|
|
139
|
-
`/app/projects`, and `/help`. The project route reuses one existing primitive
|
|
140
|
-
SignalIR state and one command handler; it adds no production compiler LOC,
|
|
141
|
-
pass, semantic primitive, Handler ESM, or runtime concept. Its existing command
|
|
142
|
-
runtime graph is 768 raw / 441 aggregate gzip bytes, while `/help` emits 0 B
|
|
143
|
-
JavaScript. The complete fixture emits 4 files, 1,970 raw / 1,265 aggregate gzip
|
|
144
|
-
bytes, with deploy digest
|
|
145
|
-
`94ce7d01cac2e80823a36279294015d2f22328acaed571abb9996f8ca6171121`.
|
|
146
|
-
The focused Chrome journey, `npm run check`, 273 non-browser tests, 273
|
|
147
|
-
required-Chrome tests, and package smoke pass. No production performance claim
|
|
148
|
-
is made because compiler and runtime sources are unchanged.
|
|
149
|
-
|
|
150
|
-
### `0.10.1`: Local, Object, Array, And Derived State Scale
|
|
151
|
-
|
|
152
|
-
- **Purpose:** prove stable dependency and ownership behavior with many ordinary
|
|
153
|
-
states and nested JSON-safe application records.
|
|
154
|
-
- **Expected boundary:** existing SignalIR, DerivedIR, bindings, conditions, and
|
|
155
|
-
keyed ownership; no normalized-state runtime.
|
|
156
|
-
- **Acceptance:** deterministic updates across project summary, filters, issue
|
|
157
|
-
counts, derived labels, conditional owners, and nested lists; unrelated DOM
|
|
158
|
-
does not change; removal releases owned state.
|
|
159
|
-
- **Performance:** record commit latency and runtime metadata for increasing
|
|
160
|
-
state/dependency counts.
|
|
161
|
-
- **Stop condition:** proposed support depends on arbitrary object mutation or a
|
|
162
|
-
generic rerender loop.
|
|
163
|
-
- **Done condition:** the recorded scale remains within the material regression
|
|
164
|
-
threshold and nearby unsupported dynamic paths fail at authored locations.
|
|
165
|
-
|
|
166
|
-
**Completion evidence:** the project journey composes five ordinary route
|
|
167
|
-
states: one object, two arrays, and two primitives. Six existing reactive
|
|
168
|
-
bindings, one conditional owner, three keyed lists, one nested issue list, and
|
|
169
|
-
one keyed row-local state cover summary replacement, filtering, derived issue
|
|
170
|
-
counts, saved-filter append, conditional release/remount, keyed identity, and
|
|
171
|
-
row-state release/reset. An unrelated control records zero DOM mutations. The
|
|
172
|
-
route adds no semantic primitive, pass, browser runtime concept, normalized
|
|
173
|
-
state, or generic rerender path; the only supported source adjustment is the
|
|
174
|
-
application's use of a separate project array state at the existing keyed-list
|
|
175
|
-
boundary. Direct object-field nested-list replacement remains outside this
|
|
176
|
-
packet after its isolated experiment failed browser replacement, while the
|
|
177
|
-
existing dynamic object-property diagnostic remains source-located.
|
|
178
|
-
|
|
179
|
-
The application deploy contains 12 files, 47,546 raw / 16,285 aggregate gzip
|
|
180
|
-
bytes, with SHA-256
|
|
181
|
-
`d50c9ff6dccba338559dd9e9141c4607ec62da30385658e617a86f7af3f52e0f`.
|
|
182
|
-
`/app/projects` uses 39,178 raw / 14,143 aggregate gzip JavaScript bytes;
|
|
183
|
-
`/help` remains 0 B. The generated 1/8/32-state scale benchmark emits identical
|
|
184
|
-
deploy output under `v0.10.0` and the candidate. Seven fresh Chrome processes
|
|
185
|
-
record commit medians of 0.5/0.6/0.9 ms as the derived binding dependency edges
|
|
186
|
-
increase from 0 to 8 to 32. Runtime JavaScript is 768/10,935/11,341 raw bytes
|
|
187
|
-
and 441/4,789/4,841 aggregate gzip bytes. No material regression is present.
|
|
188
|
-
Release commit `f04041b`, tag `v0.10.1`, both CI jobs, the GitHub release,
|
|
189
|
-
`@kudzujs/core@0.10.1`, `create-kudzu@0.1.105`, registry metadata, and a fresh
|
|
190
|
-
scaffold install/check are verified.
|
|
191
|
-
|
|
192
|
-
### `0.10.2`: Shared Layout And Cross-Route State
|
|
193
|
-
|
|
194
|
-
- **Purpose:** keep workspace/session state across an explicit application
|
|
195
|
-
navigation group while resetting route-owned state.
|
|
196
|
-
- **Expected boundary:** existing SharedStateIR, layout state IDs, route release,
|
|
197
|
-
and native fallback.
|
|
198
|
-
- **Acceptance:** workspace selection survives project/list/detail transitions;
|
|
199
|
-
route drafts reset; reload behavior is explicit; a separate route group does
|
|
200
|
-
not receive the shared state.
|
|
201
|
-
- **Stop condition:** implementation requires a document-global store or SPA
|
|
202
|
-
router.
|
|
203
|
-
- **Done condition:** state lifetime and disposal are exact in browser tests and
|
|
204
|
-
static routes receive no shared-state runtime.
|
|
205
|
-
|
|
206
|
-
**Completion evidence:** the greenfield application adds one exact Alpha detail
|
|
207
|
-
route and one explicit navigation group around list/detail routes. A relative
|
|
208
|
-
Context hook lowers through the existing `SharedStateIR`: both routes own the
|
|
209
|
-
same `workspace` layout state while list state and the detail `draft` remain
|
|
210
|
-
route-owned. Required Chrome proves retained layout DOM identity, workspace
|
|
211
|
-
persistence in both directions, detail DOM release, fresh draft state on
|
|
212
|
-
re-entry, and initial layout/draft values in a fresh document. `/help` remains
|
|
213
|
-
outside the group, retains its native anchor path, and emits complete HTML with
|
|
214
|
-
0 B JavaScript.
|
|
215
|
-
|
|
216
|
-
This packet adds no semantic primitive, ModuleIR kind, compiler pass, production
|
|
217
|
-
compiler LOC, runtime concept, normalization rule, adapter rule, store, or SPA
|
|
218
|
-
router. It adds one application layout/context module, one route, one config,
|
|
219
|
-
and one positive browser journey; existing navigation-group diagnostics retain
|
|
220
|
-
the nearby rejected configuration boundary. The fixture emits 14 files, 57,293
|
|
221
|
-
raw / 19,985 aggregate gzip bytes, with deploy SHA-256
|
|
222
|
-
`1c867ee7119f7eb23b935c4506c2a46639acb75c13f0916b29c255421b0d123d`.
|
|
223
|
-
The list/detail session uses 10 unique JavaScript files totaling 46,418 raw /
|
|
224
|
-
17,045 aggregate gzip bytes. Seven fresh Chrome profiles record list-to-detail
|
|
225
|
-
completion at `[2.3, 6.5, 1.4, 1.3, 5.1, 1.3, 4.0]` ms, median 2.3 ms.
|
|
226
|
-
|
|
227
|
-
Release commit `76a45c4`, tag `v0.10.2`, both CI jobs, the GitHub release,
|
|
228
|
-
`@kudzujs/core@0.10.2`, `create-kudzu@0.1.106`, registry metadata, and a fresh
|
|
229
|
-
registry-backed scaffold install/check passed on 2026-08-22. Publish workflow
|
|
230
|
-
`32566976581` completed every version, package, publication, and registry gate.
|
|
231
|
-
|
|
232
|
-
### `0.10.3`: Persistence Recipe And State Release
|
|
233
|
-
|
|
234
|
-
- **Purpose:** prove URL, storage, and server-backed persistence without adding a
|
|
235
|
-
persistence framework.
|
|
236
|
-
- **Expected boundary:** application-owned effects and Web Storage.
|
|
237
|
-
- **Acceptance:** guarded restore, schema/version failure fallback, write after
|
|
238
|
-
state changes, logout clear, conditional/keyed release, and fresh remount.
|
|
239
|
-
- **Stop condition:** a generic persistence API is proposed without another
|
|
240
|
-
independent application requirement.
|
|
241
|
-
- **Done condition:** deterministic static fallback and browser recovery pass
|
|
242
|
-
with no storage runtime in unused routes.
|
|
243
|
-
|
|
244
|
-
**Completion evidence:** the greenfield application layout now owns one guarded
|
|
245
|
-
`localStorage` recipe composed entirely from ordinary state and two existing
|
|
246
|
-
effects. Static HTML starts with `Primary`; a mount effect accepts only version
|
|
247
|
-
1 records whose workspace is `Primary` or `Secondary`, while absent, malformed,
|
|
248
|
-
wrong-schema, and wrong-version records fall back safely. A readiness state
|
|
249
|
-
prevents the dependency effect from overwriting storage before restore.
|
|
250
|
-
Workspace changes write the versioned record, and logout disables persistence,
|
|
251
|
-
removes the record, and resets visible state in one synchronous handler.
|
|
252
|
-
|
|
253
|
-
Required Chrome proves valid restore, every fallback, post-commit persistence,
|
|
254
|
-
logout removal, conditional and keyed release/fresh remount, route draft
|
|
255
|
-
release/fresh revisit, and a fresh direct document. `/help` remains outside the
|
|
256
|
-
navigation group with complete HTML and 0 B JavaScript. The fixture emits 19
|
|
257
|
-
files, 65,376 raw / 23,471 aggregate gzip bytes, with deploy SHA-256
|
|
258
|
-
`bb58826876bdf090a85d2c1f8a1edcbbc9abd35d5335eb3d1e7fb1fafe6bed72`.
|
|
259
|
-
The two-route session uses 15 unique JavaScript files totaling 53,562 raw /
|
|
260
|
-
20,323 aggregate gzip bytes.
|
|
261
|
-
|
|
262
|
-
This packet adds zero semantic primitives, ModuleIR kinds, compiler passes,
|
|
263
|
-
production compiler lines, runtime concepts, normalization rules, adapter
|
|
264
|
-
rules, public APIs, stores, or persistence runtimes. One existing positive
|
|
265
|
-
application fixture gains valid, absent, malformed, wrong-schema, wrong-version,
|
|
266
|
-
write, and clear browser cases. A matched 21-profile measurement records the
|
|
267
|
-
authored capability cost: the 0.10.2 list/detail median of 1.9 ms and 46,418 raw /
|
|
268
|
-
17,045 gzip session JavaScript becomes 1.5 ms and 53,562 / 20,323 bytes. The
|
|
269
|
-
timing ranges overlap with no material loss; the 7,144 raw / 3,278 gzip byte
|
|
270
|
-
increase is the explicit cost of route-owned effect/native entries, not a
|
|
271
|
-
compiler or shared-runtime change.
|
|
272
|
-
|
|
273
|
-
Release commit `4420ccc`, tag `v0.10.3`, both CI jobs, the GitHub release,
|
|
274
|
-
`@kudzujs/core@0.10.3`, `create-kudzu@0.1.107`, registry metadata, and a fresh
|
|
275
|
-
registry-backed scaffold install/check passed on 2026-08-22. Publish workflow
|
|
276
|
-
`32568752477` completed every version, package, publication, and registry gate.
|
|
277
|
-
|
|
278
|
-
## `0.11.x`: Async And Server Data
|
|
279
|
-
|
|
280
|
-
### `0.11.0`: Owned Fetch Lifecycle
|
|
281
|
-
|
|
282
|
-
- **Purpose:** establish the greenfield loading/error/data/refetch baseline.
|
|
283
|
-
- **Expected boundary:** existing EffectIR, ordinary state, and native `fetch`.
|
|
284
|
-
- **Acceptance:** delayed stale response loses state authority, HTTP failure is
|
|
285
|
-
accessible, explicit refetch recovers, route removal blocks late writes, and
|
|
286
|
-
authored cancellation is tested where required.
|
|
287
|
-
- **Stop condition:** a query cache is added to implement one request.
|
|
288
|
-
- **Done condition:** the project list journey passes and `/help` stays zero-JS.
|
|
289
|
-
|
|
290
|
-
**Completion evidence:** the project list now composes one route-owned native
|
|
291
|
-
`fetch` effect with ordinary request, status, error, project, and summary state.
|
|
292
|
-
The deterministic server drives initial loading, a fast explicit refetch, an
|
|
293
|
-
HTTP 500 alert, and recovery. A delayed prior continuation attempts its writes
|
|
294
|
-
after dependency replacement and cannot replace the newer keyed project data.
|
|
295
|
-
The effect owns an `AbortController`; dependency replacement and route removal
|
|
296
|
-
invoke authored abort cleanup, and late route work cannot mutate the detail
|
|
297
|
-
route or recreated list ownership. Existing project filtering, nested keyed
|
|
298
|
-
identity, row state, shared layout state, persistence, and logout journeys still
|
|
299
|
-
pass. `/help` remains complete HTML with 0 B JavaScript.
|
|
300
|
-
|
|
301
|
-
This packet adds zero semantic primitives, ModuleIR kinds, compiler passes,
|
|
302
|
-
production compiler lines, runtime concepts, normalization rules, adapter
|
|
303
|
-
rules, public APIs, caches, Providers, retry schedulers, or query runtimes. One
|
|
304
|
-
existing positive application fixture gains loading, success, stale completion,
|
|
305
|
-
HTTP failure, recovery, cancellation, and route-release cases. The fixture
|
|
306
|
-
still emits 19 files and now totals 67,886 raw / 24,077 aggregate gzip bytes,
|
|
307
|
-
with deploy SHA-256
|
|
308
|
-
`9c06d2a5d47b4ea2ae54cebbc0448bf161907691ee37a02a5dae0e7c37779ae4`.
|
|
309
|
-
The project route uses 52,130 raw / 19,502 aggregate gzip JavaScript bytes; the
|
|
310
|
-
two-route session uses 54,770 / 20,763 bytes, an authored capability increase of
|
|
311
|
-
1,208 raw / 440 gzip bytes over `0.10.3`. Twenty-one fresh Chrome profiles record
|
|
312
|
-
0.8 ms median list-to-detail completion with a 0.6/1.3 ms range. The changed
|
|
313
|
-
fetch-completion prerequisite permits no latency improvement claim; no material
|
|
314
|
-
regression is present.
|
|
315
|
-
|
|
316
|
-
Clean-worktree `npm run check`, 273/273 standard tests, the required project
|
|
317
|
-
Chrome journey, the focused required-Chrome retry for the one full-suite browser
|
|
318
|
-
timeout, and packed-package smoke pass on 2026-08-22.
|
|
319
|
-
|
|
320
|
-
Release commit `8065d86`, tag `v0.11.0`, both CI jobs, the GitHub release,
|
|
321
|
-
`@kudzujs/core@0.11.0`, `create-kudzu@0.1.108`, registry metadata, and a fresh
|
|
322
|
-
registry-backed scaffold install/check passed on 2026-08-22. Publish workflow
|
|
323
|
-
`32571667242` completed every version, package, publication, and registry gate.
|
|
324
|
-
|
|
325
|
-
### `0.11.1`: List And Detail Data Consistency Evidence
|
|
326
|
-
|
|
327
|
-
- **Purpose:** expose the first real multi-consumer coordination limit.
|
|
328
|
-
- **Expected boundary:** layout shared state plus existing effects first.
|
|
329
|
-
- **Acceptance:** project list and detail observe one mutation, duplicate
|
|
330
|
-
requests are counted, route changes and refresh are deterministic, and all
|
|
331
|
-
current limitations are machine-recorded.
|
|
332
|
-
- **Stop condition:** the fixture invents package-shaped query semantics not
|
|
333
|
-
required by the user journey.
|
|
334
|
-
- **Done condition:** existing composition is accepted or the smallest repeated
|
|
335
|
-
missing coordination contract is isolated.
|
|
336
|
-
|
|
337
|
-
**Completion evidence:** one layout-owned project record composes from two
|
|
338
|
-
primitive shared signals and one existing mount effect. The list and detail
|
|
339
|
-
routes observe the same server-confirmed rename without another read. The
|
|
340
|
-
deterministic journey records one initial GET, zero additional GETs across two
|
|
341
|
-
enhanced route changes, one mutation POST, and exactly one new GET after full
|
|
342
|
-
document reload. The refreshed document reconstructs revision 1 from server
|
|
343
|
-
truth while route-owned detail draft state resets. `/help` remains complete HTML
|
|
344
|
-
with 0 B JavaScript.
|
|
345
|
-
|
|
346
|
-
Current composition is accepted. Shared data lasts for one document and retained
|
|
347
|
-
layout owner; independently authored fetch owners are not deduplicated, and no
|
|
348
|
-
request registry, invalidation graph, subscriber set, or retained query cache
|
|
349
|
-
exists. This one fixture does not authorize `0.11.2`: it needs no coordination
|
|
350
|
-
primitive after ownership is placed correctly, while the packet requires two
|
|
351
|
-
additional independent fixtures to demonstrate the same missing contract.
|
|
352
|
-
|
|
353
|
-
This packet adds zero semantic primitives, ModuleIR kinds, compiler passes,
|
|
354
|
-
production compiler lines, runtime concepts, normalization rules, adapter rules,
|
|
355
|
-
public APIs, caches, Providers, or query runtimes. One existing positive fixture
|
|
356
|
-
gains list/detail consistency, counted domain requests, mutation, navigation,
|
|
357
|
-
and reload cases. It emits 20 files totaling 69,501 raw / 24,649 aggregate gzip
|
|
358
|
-
bytes with deploy SHA-256
|
|
359
|
-
`bc6335131b7867da2857621211919fad43ebfb9414aac711c45f0c8ed3803022`.
|
|
360
|
-
The two-route session uses 16 JavaScript files totaling 55,736 raw / 21,208
|
|
361
|
-
aggregate gzip bytes, an authored application increase of 966 raw / 445 gzip
|
|
362
|
-
bytes over `0.11.0`. Twenty-one fresh Chrome profiles record a 0.9 ms median
|
|
363
|
-
list-to-detail completion with a 0.7/1.2 ms range, overlapping the prior
|
|
364
|
-
0.6/1.3 ms range; no latency change is claimed.
|
|
365
|
-
|
|
366
|
-
Clean-worktree `npm run check`, 273/273 required-Chrome tests, and packed-package
|
|
367
|
-
smoke passed on 2026-08-22. Release commit `5bab3fe`, tag `v0.11.1`, feature CI
|
|
368
|
-
`32573961250`, the GitHub release, `@kudzujs/core@0.11.1`,
|
|
369
|
-
`create-kudzu@0.1.109`, registry metadata, and a fresh registry-backed scaffold
|
|
370
|
-
install/check passed. Publish workflow `32574182988` completed every version,
|
|
371
|
-
package, publication, and registry gate.
|
|
372
|
-
|
|
373
|
-
### `0.11.2`: Shared Request Coordination
|
|
374
|
-
|
|
375
|
-
- **Purpose:** implement only the deduplication, subscriber, and invalidation
|
|
376
|
-
semantics authorized by `0.11.1` and two additional independent fixtures.
|
|
377
|
-
- **Expected boundary:** package-neutral application semantics; no TanStack,
|
|
378
|
-
SWR, Provider, retry scheduler, or public query API by default.
|
|
379
|
-
- **Acceptance:** one in-flight request per key, exact subscriber ownership,
|
|
380
|
-
invalidation after mutation, route/layout disposal, bounded retention, and
|
|
381
|
-
static exclusion.
|
|
382
|
-
- **Stop condition:** three unrelated fixtures do not require the same semantic
|
|
383
|
-
primitive, or ordinary shared state remains sufficient.
|
|
384
|
-
- **Done condition:** architecture review records the reused or new primitive,
|
|
385
|
-
runtime bytes, cache bound, and cleanup behavior.
|
|
386
|
-
|
|
387
|
-
**Completion evidence:** architecture review covers three unrelated executable
|
|
388
|
-
fixtures: the project application, TanStack Query-shaped product loading, and
|
|
389
|
-
Apache Answer/SWR-shaped question loading. Every fixture has one explicit data
|
|
390
|
-
owner, ordinary loading/error/data state, one native fetch effect, dependency or
|
|
391
|
-
owner invalidation, exact cleanup, and static exclusion. None has two independent
|
|
392
|
-
owners requesting one key, independently releasable subscribers, mutation-key
|
|
393
|
-
invalidation, retained results after owner release, or a cache bound.
|
|
394
|
-
|
|
395
|
-
The stop condition is met and this packet closes with no new primitive. The
|
|
396
|
-
project application records `closed-no-new-primitive`, the three reviewed
|
|
397
|
-
fixtures, an empty repeated-missing-contract list, and the reused semantics in
|
|
398
|
-
its machine-readable capability contract. Existing fixture journeys remain the
|
|
399
|
-
executable behavioral evidence. Absence of generic deduplication is not itself
|
|
400
|
-
fixture pressure.
|
|
401
|
-
|
|
402
|
-
This packet adds zero semantic primitives, ModuleIR kinds, compiler passes,
|
|
403
|
-
production compiler lines, runtime concepts, normalization rules, adapter rules,
|
|
404
|
-
public APIs, request registries, subscriber sets, invalidation graphs, caches, or
|
|
405
|
-
browser bytes. One existing machine-readable contract and assertion change;
|
|
406
|
-
all three existing positive fixtures remain behaviorally unchanged. The project
|
|
407
|
-
application retains its 20-file, 69,501 raw / 24,649 aggregate gzip deploy and
|
|
408
|
-
55,736 raw / 21,208 aggregate gzip two-route JavaScript session. Cache bound is
|
|
409
|
-
not applicable because no cache exists; cleanup remains existing effect and
|
|
410
|
-
route/layout owner release.
|
|
411
|
-
|
|
412
|
-
Clean-worktree `npm run check`, 273/273 required-Chrome tests, and packed-package
|
|
413
|
-
smoke passed on 2026-08-22. Release commit `0ae4d5d`, tag `v0.11.2`, CI
|
|
414
|
-
`32575316981`, the GitHub release, `@kudzujs/core@0.11.2`,
|
|
415
|
-
`create-kudzu@0.1.110`, registry metadata, and a fresh registry-backed scaffold
|
|
416
|
-
install/check passed. Publish workflow `32575541567` completed every version,
|
|
417
|
-
package, publication, and registry gate.
|
|
418
|
-
|
|
419
|
-
### `0.11.3`: Mutation, Optimistic Update, And Rollback
|
|
420
|
-
|
|
421
|
-
- **Purpose:** complete issue create/edit/delete behavior under failure.
|
|
422
|
-
- **Expected boundary:** immediate state setters and existing shared data
|
|
423
|
-
coordination; a transaction primitive is evidence-gated.
|
|
424
|
-
- **Acceptance:** optimistic list/detail update, server rejection, exact
|
|
425
|
-
rollback, duplicate-submit prevention, retained row identity, and accessible
|
|
426
|
-
error state.
|
|
427
|
-
- **Stop condition:** generic transactions are proposed for a single-owner
|
|
428
|
-
handler.
|
|
429
|
-
- **Done condition:** data integrity survives success, failure, navigation, and
|
|
430
|
-
retry.
|
|
431
|
-
|
|
432
|
-
**Completion evidence:** one layout-owned async rename handler snapshots the
|
|
433
|
-
current project name/revision, writes an immediate optimistic value, disables its
|
|
434
|
-
button after the synchronous-turn commit, and sends one native POST. The
|
|
435
|
-
deterministic server rejects the first attempt. The handler restores the exact
|
|
436
|
-
snapshot, exposes `HTTP 500` through an accessible alert, and leaves the retained
|
|
437
|
-
keyed row identity unchanged. A retry from detail writes the optimistic value,
|
|
438
|
-
clears the alert, commits the confirmed revision, survives list/detail
|
|
439
|
-
navigation, and restores from server truth after full document reload. Counts
|
|
440
|
-
record two attempts, one accepted mutation, and no mutation-triggered GET.
|
|
441
|
-
|
|
442
|
-
Existing immediate setters, native async handlers, shared layout signals, and
|
|
443
|
-
owner authority are sufficient. This packet adds zero semantic primitives,
|
|
444
|
-
ModuleIR kinds, compiler passes, production compiler lines, runtime concepts,
|
|
445
|
-
normalization rules, adapter rules, public APIs, transaction primitives, caches,
|
|
446
|
-
or schedulers. One positive application fixture gains optimistic success,
|
|
447
|
-
failure, rollback, disabled duplicate submission, navigation, retry, and reload
|
|
448
|
-
cases. It emits 19 files totaling 73,202 raw / 25,057 aggregate gzip bytes with
|
|
449
|
-
deploy SHA-256
|
|
450
|
-
`40c68fef4eeba5ea4c1a92e9a8003b74e6a45b7a10671ee2f3e4952010117b26`.
|
|
451
|
-
The two-route session uses 15 JavaScript files totaling 56,318 raw / 21,211
|
|
452
|
-
aggregate gzip bytes, an authored application increase of 582 raw / 3 gzip bytes
|
|
453
|
-
over `0.11.2`. Twenty-one fresh Chrome profiles record a 0.8 ms median with a
|
|
454
|
-
0.7/1.0 ms range; no latency change is claimed.
|
|
455
|
-
|
|
456
|
-
Clean-worktree `npm run check`, 273/273 required-Chrome tests, and packed-package
|
|
457
|
-
smoke passed on 2026-08-22. Release commit `ba6f97a`, tag `v0.11.3`, CI
|
|
458
|
-
`32576861865`, the GitHub release, `@kudzujs/core@0.11.3`,
|
|
459
|
-
`create-kudzu@0.1.111`, registry metadata, and a fresh registry-backed scaffold
|
|
460
|
-
install/check passed. Publish workflow `32577090955` completed every version,
|
|
461
|
-
package, publication, and registry gate.
|
|
462
|
-
|
|
463
|
-
### `0.11.4`: Pagination, Refresh, And Polling Policy
|
|
464
|
-
|
|
465
|
-
- **Purpose:** complete bounded server-data loading before infinite data work.
|
|
466
|
-
- **Expected boundary:** URL signals, effects, native timers, and visibility
|
|
467
|
-
events.
|
|
468
|
-
- **Acceptance:** page/filter synchronization, back/forward, refresh, optional
|
|
469
|
-
polling cleanup, no duplicate work, and bounded retained results.
|
|
470
|
-
- **Stop condition:** background policy becomes a universal scheduler without
|
|
471
|
-
repeated evidence.
|
|
472
|
-
- **Done condition:** the exact owner and network behavior are measured and
|
|
473
|
-
documented.
|
|
474
|
-
|
|
475
|
-
**Completion evidence:** the project list reads page and filter from two
|
|
476
|
-
existing React Router query signals and restarts its existing abortable fetch
|
|
477
|
-
effect when either changes. Static updater handlers push page 2/all and page
|
|
478
|
-
1/active URLs. Two browser back operations restore the prior URL, signal values,
|
|
479
|
-
and bounded server results. An explicit refresh increments the same route-owned
|
|
480
|
-
request signal. Optional polling owns one native interval and one
|
|
481
|
-
`visibilitychange` listener; hidden events perform no work, one visible event
|
|
482
|
-
performs one refresh, and disabling polling clears both owners before a later
|
|
483
|
-
event. The deterministic journey records 11 total list requests across initial
|
|
484
|
-
stale replacement, HTTP recovery, page/filter history, refresh, polling, and
|
|
485
|
-
route remount. Every response retains at most two rows.
|
|
486
|
-
|
|
487
|
-
Existing query signals, primitive state, dependency effects, abort invalidation,
|
|
488
|
-
native timers/listeners, and route cleanup are sufficient. This packet adds zero
|
|
489
|
-
semantic primitives, ModuleIR kinds, compiler passes, production compiler lines,
|
|
490
|
-
runtime concepts, normalization rules, adapter rules, public APIs, caches,
|
|
491
|
-
schedulers, or retained result stores. One positive application fixture gains
|
|
492
|
-
page/filter URL ownership, history, refresh, visibility-aware polling, exact
|
|
493
|
-
cleanup, request counts, and bounded-result cases. It emits 20 files totaling
|
|
494
|
-
77,263 raw / 26,156 aggregate gzip bytes with deploy SHA-256
|
|
495
|
-
`a3864a5155d658e86378fce80de94e082ef0894c5db5f5793d91b4de7f359b46`.
|
|
496
|
-
The two-route session uses 16 JavaScript files totaling 58,970 raw / 22,124
|
|
497
|
-
aggregate gzip bytes, an authored application increase of 2,652 raw / 913 gzip
|
|
498
|
-
bytes over `0.11.3`. Twenty-one fresh Chrome profiles record a 1.3 ms median
|
|
499
|
-
with a 1.2/1.6 ms range. The prior range does not overlap, so the 0.5 ms median
|
|
500
|
-
increase is disclosed rather than presented as a no-regression result. `/help`
|
|
501
|
-
remains 0 B JavaScript.
|
|
502
|
-
|
|
503
|
-
## `0.12.x`: Routing And Application Lifetime
|
|
504
|
-
|
|
505
|
-
### `0.12.0`: Project Route Shell And Runtime Parameters
|
|
506
|
-
|
|
507
|
-
- **Purpose:** prove directly addressable project and issue routes.
|
|
508
|
-
- **Expected boundary:** file routes, runtime parameters, complete HTML, and
|
|
509
|
-
native navigation.
|
|
510
|
-
- **Acceptance:** direct entry, reload, invalid parameter rejection, project to
|
|
511
|
-
issue navigation, and standalone fallback.
|
|
512
|
-
- **Stop condition:** an SPA route registry is introduced.
|
|
513
|
-
- **Done condition:** all target routes are addressable without a browser router.
|
|
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
|
-
|
|
549
|
-
### `0.12.1`: Shared Layout, History, Focus, And Scroll
|
|
550
|
-
|
|
551
|
-
- **Purpose:** complete the accepted same-document application group behavior.
|
|
552
|
-
- **Expected boundary:** existing navigation runtime and layout/route lifetime.
|
|
553
|
-
- **Acceptance:** back/forward, retained layout state, route cleanup, title/live
|
|
554
|
-
announcement, focus destination, hash behavior, and explicit scroll policy.
|
|
555
|
-
- **Stop condition:** browser-native navigation is weakened for routes outside
|
|
556
|
-
the approved group.
|
|
557
|
-
- **Done condition:** keyboard and browser-history journeys pass with native
|
|
558
|
-
recovery.
|
|
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
|
-
|
|
585
|
-
### `0.12.2`: Authentication And Permission Boundary
|
|
586
|
-
|
|
587
|
-
- **Purpose:** complete login, restore, 401, logout, and permission-aware UI.
|
|
588
|
-
- **Expected boundary:** shared layout state, owned fetch, storage, and server or
|
|
589
|
-
host authorization.
|
|
590
|
-
- **Acceptance:** invalid and valid login, reload restoration, direct protected
|
|
591
|
-
entry, role-aware controls, server rejection, token clear, and logout.
|
|
592
|
-
- **Stop condition:** client conditional rendering is presented as a security
|
|
593
|
-
boundary.
|
|
594
|
-
- **Done condition:** server authorization and client UX responsibilities are
|
|
595
|
-
executable and explicit.
|
|
596
|
-
|
|
597
|
-
**Completion evidence:** the project application replaces its placeholder login
|
|
598
|
-
route with a native constrained form and one async handler. The shared layout
|
|
599
|
-
restores a stored token, validates the current user, exposes authenticated
|
|
600
|
-
identity and role state, and clears local state before replacement navigation on
|
|
601
|
-
rejection or logout. Required Chrome proves invalid and valid login, reload
|
|
602
|
-
restoration, anonymous and rejected direct protected entry, member/admin control
|
|
603
|
-
visibility, server 401/403 enforcement, token clearing, and logout. Client
|
|
604
|
-
conditions are recorded as presentation only; the deterministic API server
|
|
605
|
-
authorizes every protected read and mutation.
|
|
606
|
-
|
|
607
|
-
Existing native forms, state, layout ownership, effects, storage, fetch, and
|
|
608
|
-
native navigation are sufficient. This packet adds zero semantic primitives,
|
|
609
|
-
ModuleIR kinds, compiler passes, production compiler/runtime lines, runtime
|
|
610
|
-
concepts, normalization rules, adapter rules, public APIs, auth runtimes, or
|
|
611
|
-
servers. The fixture emits 43 files totaling 123,476 raw / 45,305 aggregate gzip
|
|
612
|
-
bytes with deploy SHA-256
|
|
613
|
-
`81d0b3c5e0d1d1f72f29d219647601463f5317f215274e14a45fe5ba92eb033e`.
|
|
614
|
-
The login route uses 12,093 raw / 5,795 gzip JavaScript bytes. The two-route
|
|
615
|
-
session uses 16 JavaScript files totaling 60,767 raw / 22,561 aggregate gzip
|
|
616
|
-
bytes. Seven fresh Chrome profiles record a 1.4 ms navigation median with a
|
|
617
|
-
1.2/1.5 ms range; the range overlaps `0.12.1`, so no latency change is claimed.
|
|
618
|
-
`/help` remains 0 B JavaScript.
|
|
619
|
-
|
|
620
|
-
### `0.12.3`: Route Failure And Restoration Policy
|
|
621
|
-
|
|
622
|
-
- **Purpose:** decide application-visible handling of navigation/data failures.
|
|
623
|
-
- **Expected boundary:** native fallback and application-owned error UI first.
|
|
624
|
-
- **Acceptance:** invalid document, asset failure, offline/error state, retry,
|
|
625
|
-
focus restoration, and no half-replaced route for those precommit failures.
|
|
626
|
-
- **Stop condition:** a generic React-style error-boundary renderer is required.
|
|
627
|
-
- **Done condition:** each classified transport, document-validation,
|
|
628
|
-
capability-loading, or stylesheet-loading failure leaves a valid document
|
|
629
|
-
and recoverable navigation path.
|
|
630
|
-
|
|
631
|
-
**Completion evidence:** required Chrome injects deterministic fetch and
|
|
632
|
-
response-body transport rejections through a pending prefetch and click retry,
|
|
633
|
-
then proves the current URL, route DOM, and retained layout remain unchanged.
|
|
634
|
-
The test moves focus away while the request is pending; the existing polite
|
|
635
|
-
navigation status announces the failure and restores the initiating link.
|
|
636
|
-
Activating that link again completes list-to-detail replacement and focuses the
|
|
637
|
-
destination heading.
|
|
638
|
-
Separate invalid-identity, missing-capability-module, and missing-stylesheet
|
|
639
|
-
responses fail before route disposal and recover through the existing native
|
|
640
|
-
document fallback. The maintained HTTP 500 project read still reports an
|
|
641
|
-
application-owned alert and succeeds on explicit retry.
|
|
642
|
-
|
|
643
|
-
Only `navigation-runtime.js` changes: fetch and response-body transport failures
|
|
644
|
-
receive one private error classification, while document validation and asset
|
|
645
|
-
failures keep their existing fallback. The source grows from 351 to 374 lines and adds no
|
|
646
|
-
semantic primitive, ModuleIR kind, compiler pass, core compiler line, runtime
|
|
647
|
-
concept, public API, error-boundary renderer, route registry, or additional
|
|
648
|
-
browser file. The application emits 43 files totaling 123,835 raw / 45,379
|
|
649
|
-
aggregate gzip bytes with deploy SHA-256
|
|
650
|
-
`fb9d24cc01791bf80b67b659738ba62beded6ff6ce14a86a278fa4b34d088acf`.
|
|
651
|
-
The two-route session remains 16 JavaScript files totaling 61,126 raw / 22,663
|
|
652
|
-
aggregate gzip bytes, 359 raw bytes above `0.12.2`; the unpaired,
|
|
653
|
-
environment-sensitive 102-byte gzip difference is not attributed to the patch.
|
|
654
|
-
`/help` remains 0 B JavaScript. Seven fresh Linux x64 Chrome 142 profiles record
|
|
655
|
-
a 1.8 ms median with a 1.5/2.4 ms range. No latency comparison is claimed
|
|
656
|
-
against the macOS arm64 Chrome 151 `0.12.2` samples.
|
|
657
|
-
|
|
658
|
-
### `0.12.4`: Nested Layout Evidence Decision
|
|
659
|
-
|
|
660
|
-
- **Purpose:** determine whether multiple independently retained layout owners
|
|
661
|
-
are required.
|
|
662
|
-
- **Acceptance:** at least three unrelated application routes demonstrate the
|
|
663
|
-
same lifetime that one shared layout plus static composition cannot express.
|
|
664
|
-
- **Stop condition:** route nesting is only a source-organization preference.
|
|
665
|
-
- **Done condition:** either existing layout composition is accepted or a
|
|
666
|
-
minimal layout-owner chain is approved with explicit disposal order.
|
|
667
|
-
|
|
668
|
-
**Completion evidence:** architecture review covers the project application's
|
|
669
|
-
list, static detail, runtime project, and runtime issue routes; Apache Answer's
|
|
670
|
-
questions, tags, admin, and legal route-shell reduction; its independently
|
|
671
|
-
reduced authentication shell; the Context and Zustand cart reductions; and the
|
|
672
|
-
two disjoint navigation-group shells. All executable evidence fits one retained
|
|
673
|
-
layout owner around one replaceable route owner, followed by existing
|
|
674
|
-
conditional, keyed, effect, and DOM ownership. The project runtime routes use
|
|
675
|
-
native document navigation, the Answer shell is static composition, and the
|
|
676
|
-
independent navigation groups require disjoint top-level owners rather than a
|
|
677
|
-
nested owner chain.
|
|
678
|
-
|
|
679
|
-
No reviewed route proves an intermediate layout whose DOM, state, or effects
|
|
680
|
-
must survive descendant route replacement and then dispose on subtree exit.
|
|
681
|
-
The qualifying evidence count is zero, below the required three unrelated
|
|
682
|
-
routes. The stop condition is met: current nesting is source organization or
|
|
683
|
-
static composition, so this packet accepts the existing single-layout model and
|
|
684
|
-
does not authorize a layout-owner chain. A future review must first prove the
|
|
685
|
-
same otherwise-inexpressible intermediate lifetime in three unrelated
|
|
686
|
-
executable application routes, including leaf-before-intermediate and
|
|
687
|
-
deepest-first disposal requirements.
|
|
688
|
-
|
|
689
|
-
The project application records `closed-by-stop-condition`, the reviewed route
|
|
690
|
-
sets, an empty qualifying-route list, and the reused ownership semantics in its
|
|
691
|
-
machine-readable capability contract. This packet adds zero semantic
|
|
692
|
-
primitives, ModuleIR or RouteIR kinds, compiler passes, production compiler or
|
|
693
|
-
runtime lines, runtime concepts, normalization or adapter rules, public APIs,
|
|
694
|
-
layout registries, disposal paths, browser files, or browser bytes. Existing
|
|
695
|
-
fixtures and output remain unchanged: 43 deploy files totaling 123,835 raw /
|
|
696
|
-
45,379 aggregate gzip bytes with the same deploy digest, a 61,126 raw / 22,663
|
|
697
|
-
aggregate gzip two-route JavaScript session, and 0 B JavaScript on `/help`. No
|
|
698
|
-
benchmark rerun or latency claim applies to a machine-readable evidence decision
|
|
699
|
-
with no generated-output change.
|
|
700
|
-
|
|
701
|
-
## `0.13.x`: Forms
|
|
702
|
-
|
|
703
|
-
### `0.13.0`: Production Form And Server Validation
|
|
704
|
-
|
|
705
|
-
- **Purpose:** complete issue creation with native constraints and server errors.
|
|
706
|
-
- **Expected boundary:** native form, FormData, state, and async handler.
|
|
707
|
-
- **Acceptance:** keyboard submit, native constraints, pending state, field and
|
|
708
|
-
form errors, retry, focus/ARIA linkage, and retained valid input.
|
|
709
|
-
- **Stop condition:** React Hook Form is reproduced.
|
|
710
|
-
- **Done condition:** complete accessible create/edit behavior passes without a
|
|
711
|
-
form runtime.
|
|
712
|
-
|
|
713
|
-
**Completion evidence:** the maintained Alpha project detail now authors one
|
|
714
|
-
ordinary uncontrolled issue form with native `required` and `minLength`
|
|
715
|
-
constraints, `FormData`, three route-owned primitive states, one object ref, and
|
|
716
|
-
one async submit handler. Required Chrome sends real Enter key events through
|
|
717
|
-
the browser input domain and proves empty and short titles make zero requests.
|
|
718
|
-
For valid input, the deterministic server returns a delayed `422` field error,
|
|
719
|
-
then a `503` form error, then a `201` success. The journey verifies pending
|
|
720
|
-
disable/label state, title focus, `aria-invalid` and `aria-describedby` linkage,
|
|
721
|
-
alert/status roles, exact attempt/create counts, retry without re-entry, and
|
|
722
|
-
retention of the valid title and description through every response.
|
|
723
|
-
|
|
724
|
-
The existing native-form, state, ref, conditional, binding, and handler
|
|
725
|
-
semantics cover the complete packet. Production compiler and runtime source do
|
|
726
|
-
not change. The application route grows from 20 to 70 authored lines and emits
|
|
727
|
-
one additional route handler file; no form package, registration API, proxy
|
|
728
|
-
metadata graph, schema adapter, semantic primitive, IR kind, compiler pass,
|
|
729
|
-
runtime concept, public API, or browser runtime file is added. `/help` remains
|
|
730
|
-
complete HTML with 0 B JavaScript.
|
|
731
|
-
|
|
732
|
-
The project application emits 44 files totaling 127,343 raw / 46,261 aggregate
|
|
733
|
-
gzip bytes with deploy SHA-256
|
|
734
|
-
`183f5a7ca081f99ae38de6974e61fdcb32ca49de699359aac053d0154ae38036`.
|
|
735
|
-
The two-route session uses 17 JavaScript files totaling 62,118 raw / 23,096
|
|
736
|
-
aggregate gzip bytes, 992 raw / 433 gzip bytes above `0.12.4`; the detail route
|
|
737
|
-
itself adds the same 992 raw bytes and 440 gzip bytes. Seven fresh Linux x64
|
|
738
|
-
Chrome 142 profiles record list-to-detail samples of
|
|
739
|
-
`[3.8, 5.6, 4.3, 2.6, 2.9, 3.6, 3.1]` ms, a 3.6 ms median and 2.6/5.6 ms range.
|
|
740
|
-
The range does not overlap `0.12.4`; this is the measured cost of adding the
|
|
741
|
-
form DOM and route-specific handler to the destination application route, not a
|
|
742
|
-
same-content compiler/runtime comparison or a latency improvement claim.
|
|
743
|
-
|
|
744
|
-
### `0.13.1`: Nested Fields, Field Arrays, Dirty, And Touched
|
|
745
|
-
|
|
746
|
-
- **Purpose:** determine which form metadata needs framework support.
|
|
747
|
-
- **Expected boundary:** object/array state and keyed rows first.
|
|
748
|
-
- **Acceptance:** dynamic assignee/checklist rows, reorder/remove, conditional
|
|
749
|
-
fields, dirty/touched display, reset, and exact row identity.
|
|
750
|
-
- **Stop condition:** a registration/proxy runtime is added before three
|
|
751
|
-
independent forms require the same metadata graph.
|
|
752
|
-
- **Done condition:** application composition is accepted or the smallest
|
|
753
|
-
repeated metadata semantic is isolated.
|
|
754
|
-
|
|
755
|
-
**Completion evidence:** the maintained Alpha issue form now owns nested
|
|
756
|
-
assignee metadata as one ordinary object state and a dynamic checklist as one
|
|
757
|
-
ordinary array state with stable string keys. Native `input`, `blur`, `change`,
|
|
758
|
-
and `reset` events drive explicit dirty/touched display, conditional assignee
|
|
759
|
-
fields, immutable checklist add/reorder/remove operations, and reset to the
|
|
760
|
-
authored baseline. Required Chrome proves retained checklist keys preserve exact
|
|
761
|
-
DOM identity through reorder and reset, removed and reset-added keys disconnect,
|
|
762
|
-
conditional ownership releases the assignee controls, and native reset clears
|
|
763
|
-
uncontrolled title/body values plus application-owned metadata. The existing
|
|
764
|
-
keyboard constraints and delayed `422`, `503`, and `201` server journey continue
|
|
765
|
-
to pass while nested assignee/checklist values survive field and form failures.
|
|
766
|
-
|
|
767
|
-
The first failing fixture was the `0.13.1` project-application contract against
|
|
768
|
-
the released `0.13.0` Alpha form. Native controls and existing object/array
|
|
769
|
-
state, condition, keyed-list, binding, and handler semantics close it without a
|
|
770
|
-
normalization rule, adapter, semantic primitive, IR kind, compiler pass,
|
|
771
|
-
production compiler/runtime line, runtime concept, public API, registration
|
|
772
|
-
function, proxy metadata graph, schema adapter, or form runtime. The
|
|
773
|
-
machine-readable decision is `closed-by-application-composition`; dynamic field
|
|
774
|
-
names, schema-driven registration, generic watchers, and proxy dirty/touched
|
|
775
|
-
graphs remain unsupported until independent real forms prove a repeated gap.
|
|
776
|
-
|
|
777
|
-
The application emits 44 files totaling 138,064 raw / 47,964 aggregate gzip
|
|
778
|
-
bytes with deploy SHA-256
|
|
779
|
-
`f0d96cfd5dee2cf3fa67f4ebe25d8b32cbb1bf66e72ed5ca1c29bd06fdcc0a33`.
|
|
780
|
-
The maintained two-route session remains 17 JavaScript files and grows by 3,286
|
|
781
|
-
raw / 803 aggregate gzip bytes to 65,404 / 23,899 bytes. This is authored
|
|
782
|
-
route-specific form behavior, not a shared form runtime; `/help` remains 0 B
|
|
783
|
-
JavaScript. Seven fresh Linux x64 Chrome 142 profiles record list-to-detail
|
|
784
|
-
samples of `[3.5, 3.3, 4.4, 3.3, 3.2, 4.7, 3.3]` ms, a 3.3 ms median and
|
|
785
|
-
3.2/4.7 ms range. The range overlaps `0.13.0` and the destination content
|
|
786
|
-
changed, so no latency regression or improvement is claimed.
|
|
787
|
-
|
|
788
|
-
### `0.13.2`: Multistep Draft And Autosave
|
|
789
|
-
|
|
790
|
-
- **Purpose:** prove draft persistence across steps and failures.
|
|
791
|
-
- **Expected boundary:** routes or conditionals, state, dependency effects,
|
|
792
|
-
debounce cleanup, and storage/server persistence.
|
|
793
|
-
- **Acceptance:** step navigation, validation gate, debounced save, stale-save
|
|
794
|
-
rejection, reload restore, reset, and conflict/error state.
|
|
795
|
-
- **Stop condition:** a wizard or autosave scheduler is added for one form.
|
|
796
|
-
- **Done condition:** no data loss occurs across navigation, reload, or failure.
|
|
797
|
-
|
|
798
|
-
Development evidence is complete. The Alpha application now owns a two-step
|
|
799
|
-
project setup draft with native first-step constraints, parent-owned values,
|
|
800
|
-
versioned local storage, one mount restore effect, and one dependency effect
|
|
801
|
-
whose direct timeout cleanup debounces an owned server write. Required Chrome
|
|
802
|
-
proves step navigation, validation, two overlapping versions, server rejection
|
|
803
|
-
of the older save, ignored stale completion, enhanced-navigation restoration,
|
|
804
|
-
reload restoration, retained conflict input, and reset of state, storage, and
|
|
805
|
-
pending work.
|
|
806
|
-
|
|
807
|
-
The first failing fixture was the `0.13.2` project-application contract against
|
|
808
|
-
the released `0.13.1` Alpha route. Existing ordinary state, conditional
|
|
809
|
-
ownership, dependency invalidation, effect cleanup, owned fetch, late-write
|
|
810
|
-
rejection, and guarded versioned storage close it without a semantic primitive,
|
|
811
|
-
IR kind, compiler pass, production compiler/runtime line, normalization rule,
|
|
812
|
-
adapter, runtime concept, public API, wizard scheduler, or autosave scheduler.
|
|
813
|
-
The machine-readable decision is `closed-by-application-composition`.
|
|
814
|
-
|
|
815
|
-
The application emits 44 files totaling 144,633 raw / 49,217 aggregate gzip
|
|
816
|
-
bytes with deploy SHA-256
|
|
817
|
-
`06a35341c5e70bfec48c46ad767ac351326b39ba701f5c1f1d03992a65ec8b9e`.
|
|
818
|
-
The maintained two-route session remains 17 JavaScript files and grows by 3,260
|
|
819
|
-
raw / 848 aggregate gzip bytes to 68,664 / 24,747 bytes; `/help` remains 0 B
|
|
820
|
-
JavaScript. Seven fresh Linux x64 Chrome 142 profiles record list-to-detail
|
|
821
|
-
samples of `[10.7, 7.4, 3.7, 7.9, 6.1, 4.0, 5.4]` ms, a 6.1 ms median and
|
|
822
|
-
3.7/10.7 ms range. The destination content changed and the range is noisy, so
|
|
823
|
-
no same-content latency regression or improvement is claimed.
|
|
824
|
-
|
|
825
|
-
### `0.13.3`: File Upload Boundary
|
|
826
|
-
|
|
827
|
-
- **Purpose:** move beyond local file reading to a real upload lifecycle.
|
|
828
|
-
- **Expected boundary:** native input, FormData/fetch or a proven browser API.
|
|
829
|
-
- **Acceptance:** type/size validation, progress when the selected transport can
|
|
830
|
-
expose it, cancellation, failure/retry, route departure, and successful
|
|
831
|
-
attachment mutation.
|
|
832
|
-
- **Stop condition:** chunking/resume/background upload is added without a real
|
|
833
|
-
application requirement.
|
|
834
|
-
- **Done condition:** the supported transport and unsupported progress/resume
|
|
835
|
-
boundary are explicit and tested.
|
|
836
|
-
|
|
837
|
-
Development evidence is complete. The Alpha application accepts one plain-text
|
|
838
|
-
attachment up to 1 KiB, rejects invalid type and size before any request, reads
|
|
839
|
-
the selected file into bounded route state, and reconstructs it as a `Blob` in
|
|
840
|
-
one dependency effect that owns `FormData`, fetch, and `AbortController`.
|
|
841
|
-
Required Chrome proves explicit user cancellation, delayed `503` feedback,
|
|
842
|
-
retry without reselection, successful keyed attachment mutation, and exact
|
|
843
|
-
abort when enhanced navigation releases the route.
|
|
844
|
-
|
|
845
|
-
The first failing fixture was the `0.13.3` project-application contract against
|
|
846
|
-
the released `0.13.2` Alpha route. Existing native file handlers, ordinary
|
|
847
|
-
state, dependency invalidation, effect cleanup, owned fetch, route release, and
|
|
848
|
-
keyed list identity close it without a semantic primitive, IR kind, compiler
|
|
849
|
-
pass, production compiler/runtime line, normalization rule, adapter, runtime
|
|
850
|
-
concept, public API, upload scheduler, or transfer runtime. The machine-readable
|
|
851
|
-
decision is `closed-by-application-composition`.
|
|
852
|
-
|
|
853
|
-
Fetch does not expose upload progress, so the application renders that boundary
|
|
854
|
-
explicitly and does not emit a fake progress element. Chunking, resume,
|
|
855
|
-
background sync, binary formats, multiple concurrent files, and files above the
|
|
856
|
-
authored 1 KiB in-memory text limit remain unsupported. Add a different
|
|
857
|
-
transport only when a real application requires one of those capabilities.
|
|
858
|
-
|
|
859
|
-
The application emits 44 files totaling 150,023 raw / 50,240 aggregate gzip
|
|
860
|
-
bytes with deploy SHA-256
|
|
861
|
-
`a16fd5dbc08086aa6a7c0ec0aba3a38fbe2a63b96005a81e8747a7f4e45e214e`.
|
|
862
|
-
The maintained two-route session remains 17 JavaScript files and grows by 2,367
|
|
863
|
-
raw / 557 aggregate gzip bytes to 71,031 / 25,304 bytes; `/help` remains 0 B
|
|
864
|
-
JavaScript. Seven fresh Linux x64 Chrome 142 profiles record list-to-detail
|
|
865
|
-
samples of `[3.7, 5.0, 3.5, 3.7, 3.8, 3.8, 4.0]` ms, a 3.8 ms median and
|
|
866
|
-
3.5/5.0 ms range. The destination content changed, so no same-content latency
|
|
867
|
-
regression or improvement is claimed.
|
|
868
|
-
|
|
869
|
-
## `0.14.x`: Lists, Tables, And Virtualization
|
|
870
|
-
|
|
871
|
-
### `0.14.0`: Project Table CRUD And Identity
|
|
872
|
-
|
|
873
|
-
- **Purpose:** establish the production table baseline.
|
|
874
|
-
- **Expected boundary:** existing keyed list runtime and valid table structure.
|
|
875
|
-
- **Acceptance:** insert, update, delete, reorder, sort, filter, selection,
|
|
876
|
-
row-local edit state, keyboard access, and retained DOM identity.
|
|
877
|
-
- **Stop condition:** a data-grid runtime is introduced for ordinary tables.
|
|
878
|
-
- **Done condition:** complete CRUD behavior passes with measured update latency.
|
|
879
|
-
|
|
880
|
-
Evidence complete. The first failing fixture was the
|
|
881
|
-
`0.14.0` project-application contract against the previous article list. It now
|
|
882
|
-
uses a native table, ordinary array/object state, the existing pure collection
|
|
883
|
-
selector, three existing keyed row-state slots, and native button/input keyboard
|
|
884
|
-
behavior for insert, update, delete, reverse, sort, filter, selection, and edit.
|
|
885
|
-
The browser journey proves retained row and draft-input identity through reorder
|
|
886
|
-
and sort, fresh identity/state after filter removal and restoration, and focused
|
|
887
|
-
keyboard reachability. Native `hidden` keeps the editor mounted rather than
|
|
888
|
-
introducing a conditional callback-scope adapter or data-grid runtime.
|
|
889
|
-
|
|
890
|
-
This slice adds zero semantic primitives, zero compiler passes, zero core LOC,
|
|
891
|
-
and zero runtime concepts. It changes one real fixture, its contract, the
|
|
892
|
-
machine-readable capability record, and the existing project benchmark. The
|
|
893
|
-
application remains 44 files and changes from the `0.13.3` baseline by +9,235
|
|
894
|
-
raw / +1,387 aggregate gzip bytes to 159,258 / 51,627 bytes, with deploy SHA-256
|
|
895
|
-
`ebb3358e7a03612459e723ae765c39d105498db9d293415b924f1066cddf4793`.
|
|
896
|
-
The maintained two-route session remains 17 JavaScript files and grows by 2,273
|
|
897
|
-
raw / 626 aggregate gzip bytes to 73,304 / 25,930 bytes; `/help` remains 0 B
|
|
898
|
-
JavaScript.
|
|
899
|
-
|
|
900
|
-
Seven fresh Linux x64 Chrome 142 profiles record table Save-click-to-committed-
|
|
901
|
-
DOM samples of `[0.7, 0.8, 1.0, 0.7, 1.1, 0.7, 0.8]` ms, a 0.8 ms median and
|
|
902
|
-
0.7/1.1 ms range. This is the first equivalent table-update measurement, so no
|
|
903
|
-
same-content latency delta is claimed. The same runs record list-to-detail
|
|
904
|
-
samples of `[3.9, 3.9, 5.5, 4.2, 6.1, 3.5, 3.4]` ms, a 3.9 ms median and
|
|
905
|
-
3.4/6.1 ms range. No compiler/runtime production logic changed; `0.14.0`
|
|
906
|
-
publishes the accepted application-capability packet and `create-kudzu@0.1.122`
|
|
907
|
-
generates projects on `@kudzujs/core@^0.14.0`.
|
|
908
|
-
|
|
909
|
-
### `0.14.1`: Nested And Object-State Collections
|
|
910
|
-
|
|
911
|
-
- **Purpose:** prove project/group/issue/checklist nesting from ordinary object
|
|
912
|
-
state without authored field state.
|
|
913
|
-
- **Expected boundary:** existing object-property links and nested KeyedBlockIR.
|
|
914
|
-
- **Acceptance:** replacement, nested insertion/removal/reorder, latest handlers,
|
|
915
|
-
row cleanup, invalid-shape rejection, and static sibling exclusion.
|
|
916
|
-
- **Stop condition:** dynamic property paths or mutation require generic runtime
|
|
917
|
-
object observation.
|
|
918
|
-
- **Done condition:** direct immutable paths cover the application journey and
|
|
919
|
-
nearby dynamic forms fail clearly.
|
|
920
|
-
|
|
921
|
-
Release evidence complete. The first failure replaced the project route's
|
|
922
|
-
separate array state with one direct `projectData.projects` field and failed at
|
|
923
|
-
build time because nested lists required their source ownership signal itself to
|
|
924
|
-
contain an array. The compiler already emitted a binding-backed root
|
|
925
|
-
`KeyedBlockIR`, its selector states, and the nested issue child block. Build-time
|
|
926
|
-
list validation now allows an object-valued signal only for a compiler-proven
|
|
927
|
-
`ownerField`; root lists still require arrays and nested non-array fields still
|
|
928
|
-
fail. Browser mounting initializes binding-backed roots with children from their
|
|
929
|
-
serialized state before the evaluator module loads, preserving the existing
|
|
930
|
-
parent prototype and ownership path.
|
|
931
|
-
|
|
932
|
-
Required Chrome proves immutable whole-object replacement, nested issue insert,
|
|
933
|
-
update, reorder, removal, re-addition, retained project/issue identity, latest
|
|
934
|
-
issue handlers, descendant state release, and fresh remount. Existing dynamic
|
|
935
|
-
object-property, alias, mutation, mutating-sort, and non-array diagnostics retain
|
|
936
|
-
the negative boundary, while `/help` remains complete HTML with 0 B JavaScript.
|
|
937
|
-
The slice adds zero semantic primitives, IR kinds, compiler passes,
|
|
938
|
-
normalization rules, adapters, runtime concepts, or public APIs. It changes one
|
|
939
|
-
build-time validation line and adds one production list-runtime line.
|
|
940
|
-
|
|
941
|
-
The release emits 44 files totaling 164,305 raw / 52,185 aggregate gzip bytes
|
|
942
|
-
with deploy SHA-256
|
|
943
|
-
`0a3b7e10b3447a76a9c04ef34ad7c2bfa30400ea53c9d16fc85b1c7cbf2ea203`.
|
|
944
|
-
The two-route session remains 17 JavaScript files totaling 74,826 raw / 26,204
|
|
945
|
-
aggregate gzip bytes. Seven fresh Chrome 142 profiles record table
|
|
946
|
-
update samples of `[0.8, 0.8, 0.7, 0.8, 0.9, 0.8, 0.8]` ms, a 0.8 ms median and
|
|
947
|
-
0.7/0.9 ms range, plus navigation samples of
|
|
948
|
-
`[3.7, 4.1, 4.5, 3.9, 4.2, 3.9, 4.3]` ms, a 4.1 ms median and 3.7/4.5 ms range.
|
|
949
|
-
`0.14.1` publishes this accepted packet, and `create-kudzu@0.1.123` generates
|
|
950
|
-
projects on `@kudzujs/core@^0.14.1`.
|
|
951
|
-
|
|
952
|
-
### `0.14.2`: Infinite Loading Composition
|
|
953
|
-
|
|
954
|
-
- **Purpose:** prove sentinel-driven incremental loading before virtualization.
|
|
955
|
-
- **Expected boundary:** IntersectionObserver, owned fetch, append, keyed list.
|
|
956
|
-
- **Acceptance:** cursor progression, duplicate suppression, end/error/retry,
|
|
957
|
-
route cleanup, retained identity, and bounded result policy.
|
|
958
|
-
- **Stop condition:** infinite-query or observer runtime is added for one list.
|
|
959
|
-
- **Done condition:** the full journey passes with explicit network and memory
|
|
960
|
-
bounds.
|
|
961
|
-
|
|
962
|
-
Published release evidence complete. The maintained project application adds one
|
|
963
|
-
intrinsic sentinel, an owned native `IntersectionObserver`, cursor and request
|
|
964
|
-
primitive state, an owned fetch with `AbortController`, immutable keyed append,
|
|
965
|
-
duplicate ID suppression, and explicit loading/error/retry/end UI. The authored
|
|
966
|
-
policy permits two successful pages of two records and retains at most six unique
|
|
967
|
-
projects. It adds no infinite-query runtime, observer scheduler, cache, retained
|
|
968
|
-
component tree, or virtualization machinery.
|
|
969
|
-
|
|
970
|
-
Required Chrome proves duplicate sentinel triggers issue one request, duplicate
|
|
971
|
-
records do not remount retained rows, cursor progression reaches an authored
|
|
972
|
-
`503`, retry reaches terminal state, post-terminal triggers issue no request, and
|
|
973
|
-
enhanced navigation disconnects the observer and aborts the in-flight fetch
|
|
974
|
-
signal. Exact request counts and retained DOM identity pass. `/help` remains
|
|
975
|
-
complete HTML with 0 B JavaScript.
|
|
976
|
-
|
|
977
|
-
The slice adds zero semantic primitives, IR kinds, compiler passes, production
|
|
978
|
-
compiler/runtime lines, normalization rules, adapters, runtime concepts, or
|
|
979
|
-
public APIs. The application emits 44 files totaling 168,037 raw / 52,955
|
|
980
|
-
aggregate gzip bytes with deploy SHA-256
|
|
981
|
-
`230dea098442275e42a966ca595743a4da9c832327ba52d4d09de663c68f8f1a`.
|
|
982
|
-
The maintained two-route session remains 17 JavaScript files totaling 76,889 raw
|
|
983
|
-
/ 26,750 aggregate gzip bytes.
|
|
984
|
-
|
|
985
|
-
Seven fresh macOS arm64 Chrome 151 profiles record table update samples of
|
|
986
|
-
`[0.4, 0.5, 0.5, 0.3, 0.5, 0.4, 0.6]` ms, a 0.5 ms median and 0.3/0.6 ms range,
|
|
987
|
-
plus navigation samples of `[2.3, 2.3, 2.2, 2.6, 2.5, 2.5, 2.3]` ms, a 2.3 ms
|
|
988
|
-
median and 2.2/2.6 ms range. The environment differs from `0.14.1`, so no timing
|
|
989
|
-
delta is claimed. `0.14.2` publishes this accepted packet, and
|
|
990
|
-
`create-kudzu@0.1.124` generates projects on `@kudzujs/core@^0.14.2`.
|
|
991
|
-
|
|
992
|
-
### `0.14.3`: 10,000-Item Browser Decision
|
|
993
|
-
|
|
994
|
-
- **Purpose:** measure direct DOM, pagination, and windowing alternatives.
|
|
995
|
-
- **Acceptance:** equivalent behavior, keyboard access, edit identity, scroll
|
|
996
|
-
latency, DOM count, heap, and update latency across alternatives.
|
|
997
|
-
- **Stop condition:** a virtualization result is claimed without equivalent
|
|
998
|
-
behavior or repeated samples.
|
|
999
|
-
- **Done condition:** the selected strategy and thresholds are recorded without
|
|
1000
|
-
assuming direct 10,000-row rendering is acceptable.
|
|
1001
|
-
|
|
1002
|
-
Decision evidence is complete. A tracked three-route fixture and
|
|
1003
|
-
`npm run benchmark:project-list-decision` now compare one static 10,000-row
|
|
1004
|
-
table with pagination and a scroll-driven 100-row window over the same
|
|
1005
|
-
deterministic records and native edit controls. Seven rotating fresh Chrome 142
|
|
1006
|
-
profiles show direct DOM
|
|
1007
|
-
at an 806.6 ms load median and 90,023 DOM nodes, versus 165.4/161.2 ms and a
|
|
1008
|
-
1,470/1,471-node median for pagination and the scroll window. Direct JavaScript
|
|
1009
|
-
heap is lower because its route is static; DOM size and load remain materially
|
|
1010
|
-
worse.
|
|
1011
|
-
|
|
1012
|
-
Pagination is selected. Its 12.1 ms range median is lower than the window's 16.5
|
|
1013
|
-
ms, it uses 100,300 fewer median JavaScript-heap bytes, and it preserves native
|
|
1014
|
-
page, keyboard, focus, and variable-row-height behavior without a scroll listener
|
|
1015
|
-
or measurement policy. Both bounded routes release an edited off-range row and
|
|
1016
|
-
restore fresh native input identity. The experiment adds no semantic primitive,
|
|
1017
|
-
IR kind, compiler pass, production compiler/runtime line, runtime concept, or
|
|
1018
|
-
public API. `0.14.4` remains blocked because this one fixture cannot authorize
|
|
1019
|
-
virtual range ownership.
|
|
1020
|
-
|
|
1021
|
-
### `0.14.4`: Virtual Range Ownership
|
|
1022
|
-
|
|
1023
|
-
- **Purpose:** implement bounded DOM only if `0.14.3` and three independent
|
|
1024
|
-
fixtures authorize it.
|
|
1025
|
-
- **Expected boundary:** keyed ownership extended by a minimal visible-range
|
|
1026
|
-
owner; no general component renderer.
|
|
1027
|
-
- **Acceptance:** spacer/measurement behavior, retained key state, keyboard and
|
|
1028
|
-
focus, dynamic row height policy, cleanup, and bounded heap.
|
|
1029
|
-
- **Stop condition:** evidence favors pagination or native containment.
|
|
1030
|
-
- **Done condition:** range semantics are package-neutral, optional, measured,
|
|
1031
|
-
and absent from non-virtual routes.
|
|
1032
|
-
|
|
1033
|
-
Closed by stop condition. The `0.14.3` decision selected pagination over both
|
|
1034
|
-
direct 10,000-row DOM and the authored fixed-height scroll window. No independent
|
|
1035
|
-
application fixture proves pagination or application-owned bounded ranges
|
|
1036
|
-
insufficient, against the required three. Kudzu therefore adds no visible-range
|
|
1037
|
-
owner, measurement policy, range primitive, or virtualization runtime and moves
|
|
1038
|
-
to the next evidence-ready application capability.
|
|
1039
|
-
|
|
1040
|
-
## `0.15.x`: Overlay And Layer Ownership
|
|
1041
|
-
|
|
1042
|
-
### `0.15.0`: Native Dialog Baseline
|
|
1043
|
-
|
|
1044
|
-
- **Purpose:** use browser top-layer semantics for destructive issue actions.
|
|
1045
|
-
- **Acceptance:** initial focus, Escape/cancel, confirm, trigger focus restore,
|
|
1046
|
-
inert background, route cleanup, and static exclusion.
|
|
1047
|
-
- **Stop condition:** a custom modal/focus-trap runtime replaces `<dialog>`.
|
|
1048
|
-
- **Done condition:** project delete and edit confirmation pass accessibly.
|
|
1049
|
-
|
|
1050
|
-
Validation evidence is complete and the packet closed without consuming a release
|
|
1051
|
-
because no production compiler or runtime changed. The maintained
|
|
1052
|
-
project application replaces immediate keyed project deletion with one shared
|
|
1053
|
-
native `<dialog>`, one route-owned object ref, and one pending project ID state.
|
|
1054
|
-
Existing row callback specialization opens the browser top layer; native cancel,
|
|
1055
|
-
explicit cancel, and confirmation handlers close it without a Portal, focus trap,
|
|
1056
|
-
overlay runtime, or retained component tree.
|
|
1057
|
-
|
|
1058
|
-
Required Chrome proves modal top-layer behavior, native initial focus, explicit
|
|
1059
|
-
cancel, Escape-equivalent `requestClose()`, trigger-focus restoration, confirmed
|
|
1060
|
-
keyed deletion with fallback focus, retained sibling identity, and exact top-layer
|
|
1061
|
-
release on enhanced route navigation. The static `/help` sibling remains 0 B
|
|
1062
|
-
JavaScript. The slice adds no semantic primitive, IR kind, compiler pass,
|
|
1063
|
-
production compiler/runtime line, normalization rule, adapter, runtime concept,
|
|
1064
|
-
or public API. The application emits 44 files totaling 169,778 raw / 53,294
|
|
1065
|
-
aggregate gzip bytes with deploy SHA-256
|
|
1066
|
-
`91c5517e69c341bbd2051f07b3f0ad7df627098ba8e1984561268ea8666f3407`.
|
|
1067
|
-
The maintained two-route session remains 17 JavaScript files totaling 77,453 raw
|
|
1068
|
-
/ 26,905 aggregate gzip bytes.
|
|
1069
|
-
|
|
1070
|
-
Seven fresh macOS arm64 Chrome 151 profiles record table update samples of
|
|
1071
|
-
`[0.5, 0.6, 0.6, 0.6, 0.6, 0.4, 0.5]` ms, a 0.6 ms median and 0.4/0.6 ms range,
|
|
1072
|
-
plus navigation samples of `[2.3, 2.6, 2.9, 2.6, 2.5, 2.7, 2.5]` ms, a 2.6 ms
|
|
1073
|
-
median and 2.3/2.9 ms range. These retained-path ranges overlap the previous
|
|
1074
|
-
same-environment evidence, so no timing improvement or regression is claimed.
|
|
1075
|
-
|
|
1076
|
-
### `0.15.1`: Popover, Dropdown, And Menu Behavior
|
|
1077
|
-
|
|
1078
|
-
- **Purpose:** establish the native-first non-modal overlay boundary.
|
|
1079
|
-
- **Expected boundary:** native Popover where available, ordinary state/events,
|
|
1080
|
-
and owned listeners.
|
|
1081
|
-
- **Acceptance:** positioning policy, outside click, Escape, trigger restore,
|
|
1082
|
-
roving keyboard behavior where menu semantics apply, and route cleanup.
|
|
1083
|
-
- **Stop condition:** package Portal/Slot reconciliation enters the runtime.
|
|
1084
|
-
- **Done condition:** supported native and custom boundaries are explicit.
|
|
1085
|
-
|
|
1086
|
-
Completed with the maintained project application as the qualifying fixture. A
|
|
1087
|
-
keyed project row now authors one top-level `useId()`, a native
|
|
1088
|
-
`popovertarget`, and a native `popover="auto"` action group. The compiler scopes
|
|
1089
|
-
the generated ID by the existing keyed ownership path and the list runtime
|
|
1090
|
-
rewrites only intrinsic `id`, `for`, static ARIA IDREF, `form`, `headers`,
|
|
1091
|
-
`list`, and `popovertarget` attributes. Unsupported ID escapes receive a source
|
|
1092
|
-
diagnostic. Native Chrome behavior supplies the top layer, Escape, light
|
|
1093
|
-
dismiss, and trigger focus restoration; ordinary keyed ownership preserves IDs
|
|
1094
|
-
across reorder, scopes inserted rows, recreates deterministic IDs after
|
|
1095
|
-
remove/re-add, and releases an open popover during enhanced navigation. The
|
|
1096
|
-
authored overlay uses static anchor positioning and `role="group"`, so menu
|
|
1097
|
-
roving focus is not applicable.
|
|
1098
|
-
|
|
1099
|
-
The slice adds no semantic primitive, IR kind, compiler pass, runtime concept,
|
|
1100
|
-
public API, Portal/Slot reconciliation, focus manager, positioning engine, or
|
|
1101
|
-
retained overlay tree. It adds 52 and removes 24 production lines across the
|
|
1102
|
-
source compiler, RouteIR validation, capability projection, build renderer, and
|
|
1103
|
-
existing list runtime. The maintained application emits 44 files totaling
|
|
1104
|
-
171,202 raw / 53,629 aggregate gzip bytes with deploy SHA-256
|
|
1105
|
-
`46ba45b4a423b9627c6ede5f8dd3a667f593cb5401454ae42ecc66207b07b323`.
|
|
1106
|
-
The two-route session remains 17 JavaScript files totaling 77,779 raw / 27,050
|
|
1107
|
-
aggregate gzip bytes, a 326 raw / 145 gzip byte increase from `0.15.0`; the
|
|
1108
|
-
static `/help` sibling remains 0 B JavaScript. Familiar React-shaped `useId()`
|
|
1109
|
-
authoring remains intact, so no application adapter or migration-only source
|
|
1110
|
-
structure is added.
|
|
1111
|
-
|
|
1112
|
-
Seven fresh macOS arm64 Chrome 151 profiles record table update samples of
|
|
1113
|
-
`[0.4, 0.4, 0.5, 0.4, 0.5, 0.5, 0.5]` ms, a 0.5 ms median and 0.4/0.5 ms range,
|
|
1114
|
-
plus navigation samples of `[4, 2.4, 2.6, 2.5, 2.5, 2.8, 2.4]` ms, a 2.5 ms
|
|
1115
|
-
median and 2.4/4 ms range. These retained-path ranges overlap prior evidence,
|
|
1116
|
-
so no timing improvement or regression is claimed.
|
|
1117
|
-
|
|
1118
|
-
Release transaction complete at commit
|
|
1119
|
-
`2dd5c409d3553cdf0b04080f1ba7c39b4541c523` and immutable tag `v0.15.1`.
|
|
1120
|
-
CI run `33069675599` passed both jobs. The GitHub release is
|
|
1121
|
-
[`v0.15.1`](https://github.com/kudzujs/kudzu/releases/tag/v0.15.1), and publish
|
|
1122
|
-
workflow run `33071439012` published and verified `@kudzujs/core@0.15.1` and
|
|
1123
|
-
`create-kudzu@0.1.126`. A fresh registry install imported `useId()` from core
|
|
1124
|
-
and confirmed both exact package versions. The first publish attempt stopped at
|
|
1125
|
-
the existing concurrent Chrome timing gate before any publish step; the exact
|
|
1126
|
-
same immutable tag passed on the release-event retry.
|
|
1127
|
-
|
|
1128
|
-
### `0.15.2`: Toast And Notification Ownership
|
|
1129
|
-
|
|
1130
|
-
- **Purpose:** provide application feedback across route mutations.
|
|
1131
|
-
- **Expected boundary:** layout state, keyed list, timer effects, and live region.
|
|
1132
|
-
- **Acceptance:** queue, deduplication, timeout, pause/focus behavior if required,
|
|
1133
|
-
dismissal, route persistence, announcement, and disposal.
|
|
1134
|
-
- **Stop condition:** a global scheduler is added before ordinary composition is
|
|
1135
|
-
shown insufficient.
|
|
1136
|
-
- **Done condition:** notifications remain owner-bounded and absent from unused
|
|
1137
|
-
route output.
|
|
1138
|
-
|
|
1139
|
-
**Result:** closed by ordinary layout composition. The maintained project
|
|
1140
|
-
application now owns one deduplicated notification queue in layout state, renders
|
|
1141
|
-
keyed rows in a native polite live region, and uses one cleanup-owned sequential
|
|
1142
|
-
timeout plus explicit dismissal. Required Chrome preserves the live-region and
|
|
1143
|
-
row identities through enhanced route replacement, proves timeout removal and
|
|
1144
|
-
disposal, and keeps `/help` at zero JavaScript. The 45-file deploy totals 193,770
|
|
1145
|
-
raw / 60,227 aggregate gzip bytes. No scheduler, primitive, runtime concept, or
|
|
1146
|
-
production source changed, so no release was consumed.
|
|
1147
|
-
|
|
1148
|
-
### `0.15.3`: Layer Owner Decision
|
|
1149
|
-
|
|
1150
|
-
- **Purpose:** decide whether logical ownership of DOM rendered outside its
|
|
1151
|
-
authored range is necessary.
|
|
1152
|
-
- **Acceptance:** three independent overlay fixtures fail native top-layer and
|
|
1153
|
-
in-place composition for the same reason.
|
|
1154
|
-
- **Stop condition:** the request is React Portal source compatibility alone.
|
|
1155
|
-
- **Done condition:** no new concept is added, or a minimal owner edge with exact
|
|
1156
|
-
cleanup/focus order is approved.
|
|
1157
|
-
|
|
1158
|
-
**Result:** closed with no owner edge. Native dialog and Popover already satisfy
|
|
1159
|
-
modal and non-modal top-layer behavior, while maintained dropdown, tooltip,
|
|
1160
|
-
notification, and menu fixtures compose in their authored ranges. Zero fixtures
|
|
1161
|
-
fail because DOM must render outside its authored range, below the required three
|
|
1162
|
-
independent failures. Portal source compatibility alone remains insufficient;
|
|
1163
|
-
no production source or release changed.
|
|
1164
|
-
|
|
1165
|
-
## `0.16.x`: External Complex UI
|
|
1166
|
-
|
|
1167
|
-
### `0.16.0`: Bounded External UI Contract
|
|
1168
|
-
|
|
1169
|
-
- **Purpose:** define and prove `mount`, `update`, `dispose`, owner, lifetime, and
|
|
1170
|
-
route-specific assets without a React island.
|
|
1171
|
-
- **Expected boundary:** DOM ref plus owned effect first.
|
|
1172
|
-
- **Acceptance:** a small imperative package creates and disposes one real DOM or
|
|
1173
|
-
canvas instance; static siblings exclude it.
|
|
1174
|
-
- **Stop condition:** the package requires React reconciliation.
|
|
1175
|
-
- **Done condition:** package ownership remains inside effect/handler ESM and no
|
|
1176
|
-
generic widget runtime is added.
|
|
1177
|
-
|
|
1178
|
-
**Result:** closed through existing effect ownership. A real Typed.js instance
|
|
1179
|
-
creates DOM from one attached host ref, replaces on application-state dependency
|
|
1180
|
-
change, disposes on conditional/document release, and remounts fresh. The package
|
|
1181
|
-
is absent from the complete zero-JavaScript static sibling. No compiler, IR,
|
|
1182
|
-
runtime concept, or production source changed, so no release was consumed.
|
|
1183
|
-
|
|
1184
|
-
### `0.16.1`: Real Editor Lifecycle
|
|
1185
|
-
|
|
1186
|
-
- **Purpose:** integrate one real CodeMirror-class editor.
|
|
1187
|
-
- **Acceptance:** mount, initial value, application-state update, editor-to-state
|
|
1188
|
-
update, dependency changes, route disposal, remount, errors, and accessibility.
|
|
1189
|
-
- **Stop condition:** preserving the React wrapper requires a React island.
|
|
1190
|
-
- **Done condition:** the native package owns its DOM and Kudzu owns only its
|
|
1191
|
-
bounded lifecycle.
|
|
1192
|
-
|
|
1193
|
-
**Result:** complete. The Apache Answer-derived CodeMirror fixture exposes the
|
|
1194
|
-
first real retained-instance failure: an unattached `useRef(null)` shared by one
|
|
1195
|
-
mount/cleanup effect and a later dependency update effect was incorrectly treated
|
|
1196
|
-
as a DOM ref. Kudzu now lowers exactly one proven retained handle to existing
|
|
1197
|
-
owner-scoped object state. Required Chrome proves initial value, retained
|
|
1198
|
-
application updates, editor-to-state updates, package-error recovery, accessible
|
|
1199
|
-
textbox naming, conditional disposal, fresh remount, and document disposal. The
|
|
1200
|
-
fixture emits 214,968 raw / 71,607 aggregate gzip JavaScript bytes while its
|
|
1201
|
-
static sibling emits zero. One existing normalization pass grows; semantic
|
|
1202
|
-
concepts, IR kinds, runtime concepts, runtime files, and public APIs remain
|
|
1203
|
-
unchanged.
|
|
1204
|
-
|
|
1205
|
-
### `0.16.2`: Chart And Map Lifecycle
|
|
1206
|
-
|
|
1207
|
-
- **Purpose:** validate the same contract against unrelated canvas/SVG/map DOM.
|
|
1208
|
-
- **Acceptance:** resize/data update, listener/source cleanup, route transition,
|
|
1209
|
-
retained instance where required, and asset exclusion.
|
|
1210
|
-
- **Stop condition:** package-specific concepts enter generic IR/runtime.
|
|
1211
|
-
- **Done condition:** one lifecycle model covers editor and chart/map evidence.
|
|
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
|
-
|
|
1231
|
-
### `0.16.3`: Grid And Drag/Drop Decision
|
|
1232
|
-
|
|
1233
|
-
- **Purpose:** test external data-grid or drag engine ownership against keyed
|
|
1234
|
-
Kudzu state.
|
|
1235
|
-
- **Acceptance:** keyboard equivalent, reorder/mutation, state synchronization,
|
|
1236
|
-
package disposal, and failure recovery.
|
|
1237
|
-
- **Stop condition:** two independent renderers attempt to own the same DOM.
|
|
1238
|
-
- **Done condition:** either bounded ownership is proven or the package is
|
|
1239
|
-
explicitly unsupported with a migration path.
|
|
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
|
-
|
|
1305
|
-
### `0.16.5`: Endurance Harness
|
|
1306
|
-
|
|
1307
|
-
- **Purpose:** make long-session correctness locally reproducible.
|
|
1308
|
-
- **Expected files:** a dedicated browser soak harness and machine-readable heap,
|
|
1309
|
-
listener, resource, DOM, and navigation counters.
|
|
1310
|
-
- **Acceptance:** repeated route, conditional, keyed, dialog, and editor cycles;
|
|
1311
|
-
raw traces are retained.
|
|
1312
|
-
- **Stop condition:** only a short synthetic timing loop is measured.
|
|
1313
|
-
- **Done condition:** failures identify the owner that retained memory or work.
|
|
1314
|
-
|
|
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
|
-
Release transaction complete at commit
|
|
1337
|
-
`f23db7403060df7615b684f3a4a39781e600ed23` and immutable tag `v0.16.5`.
|
|
1338
|
-
CI run `33235364419` passed Node 22, required-Chrome Node 24, and the Cloudflare
|
|
1339
|
-
deployment. The GitHub release is
|
|
1340
|
-
[`v0.16.5`](https://github.com/kudzujs/kudzu/releases/tag/v0.16.5), and publish
|
|
1341
|
-
workflow run `33235705347` published and verified `@kudzujs/core@0.16.5` and
|
|
1342
|
-
`create-kudzu@0.1.130`. A fresh registry-only install imported core, confirmed
|
|
1343
|
-
both exact package versions, generated a two-route application, and passed its
|
|
1344
|
-
TypeScript and production build check.
|
|
1345
|
-
|
|
1346
|
-
## `0.17.x`: Long-Lived Applications
|
|
1347
|
-
|
|
1348
|
-
### `0.17.0`: WebSocket Application Journey
|
|
1349
|
-
|
|
1350
|
-
- **Purpose:** move from isolated fake socket ownership to project notifications.
|
|
1351
|
-
- **Acceptance:** connect, message, keyed update, reconnect, stale socket
|
|
1352
|
-
rejection, route/layout lifetime, offline/error state, and exact cleanup.
|
|
1353
|
-
- **Stop condition:** a shared transport runtime is added for one consumer.
|
|
1354
|
-
- **Done condition:** repeated navigation balances every listener, timer, and
|
|
1355
|
-
socket handle.
|
|
1356
|
-
|
|
1357
|
-
**Result:** closed through existing layout state, `EffectIR`, keyed-list, and
|
|
1358
|
-
enhanced-navigation ownership. The first project-application browser extension
|
|
1359
|
-
failed at `websocket-connect`; one inline layout effect now owns a native
|
|
1360
|
-
WebSocket, four socket listeners, native online/offline listeners, generation
|
|
1361
|
-
and socket-identity stale guards, and one 50 ms reconnect timer. Incoming
|
|
1362
|
-
snapshots are validated before replacing the existing notification array, so a
|
|
1363
|
-
same-key server update retains its DOM node and live-region ownership. Required
|
|
1364
|
-
Chrome proves connect, message, keyed update, visible error, reconnect, stale
|
|
1365
|
-
message/error rejection, offline cancellation, online recovery, and eight
|
|
1366
|
-
list/detail enhanced transitions with one retained layout socket. The journey
|
|
1367
|
-
creates three sockets total; while connected it has one active socket, four
|
|
1368
|
-
socket listeners, and two online/offline listeners. Of two reconnect timers,
|
|
1369
|
-
one fires and one is cleared. Final document disposal leaves zero active sockets,
|
|
1370
|
-
socket listeners, window listeners, and reconnect timers, and repeated disposal
|
|
1371
|
-
changes no counter. The project deploy grows by 2,908 raw / 652 aggregate gzip
|
|
1372
|
-
bytes; the list-route JavaScript graph grows by 1,755 raw / 460 aggregate gzip
|
|
1373
|
-
bytes, while `/help` remains zero JavaScript. Semantic primitives, IR kinds,
|
|
1374
|
-
compiler passes, core/compiler LOC, runtime concepts, runtime files, transport
|
|
1375
|
-
abstractions, and public APIs change by zero; one existing application fixture
|
|
1376
|
-
and one browser scenario grow. The maintained Worker/effect graph remains 907
|
|
1377
|
-
raw / 477 gzip bytes for Worker and 14,456 raw / 6,159 gzip bytes for window;
|
|
1378
|
-
its seven-run Linux median was 605.6 ms. No production source changed, so no
|
|
1379
|
-
release was consumed.
|
|
1380
|
-
|
|
1381
|
-
### `0.17.1`: Shared SSE/Transport Decision
|
|
1382
|
-
|
|
1383
|
-
- **Purpose:** test multiple independently mounted consumers, replay, and
|
|
1384
|
-
reconnect against existing layout effects/shared state.
|
|
1385
|
-
- **Acceptance:** subscription add/remove, one transport, replay ordering,
|
|
1386
|
-
reconnect, consumer removal, final close, and bounded history.
|
|
1387
|
-
- **Stop condition:** fewer than three independent applications require the same
|
|
1388
|
-
shared transport semantics.
|
|
1389
|
-
- **Done condition:** existing composition passes or a minimal transport owner is
|
|
1390
|
-
architecture-approved.
|
|
1391
|
-
|
|
1392
|
-
**Result:** closed by the stop condition with zero qualifying applications.
|
|
1393
|
-
Mattermost and Twenty remain external research candidates, but neither has a
|
|
1394
|
-
repository-owned reduction proving the complete shared-consumer, ordered replay,
|
|
1395
|
-
reconnect, independent removal, final close, and bounded-history contract. The
|
|
1396
|
-
project application has one layout consumer; all Lupin reductions belong to one
|
|
1397
|
-
application and each owns its socket in one page effect; the route WebSocket,
|
|
1398
|
-
navigation telemetry, Worker dashboard, Memos audit, and development EventSource
|
|
1399
|
-
also lack the complete shared transport shape. Existing layout state and
|
|
1400
|
-
independent `EffectIR` owners remain authoritative. Semantic primitives, IR
|
|
1401
|
-
kinds, compiler passes, core/compiler LOC, runtime concepts, runtime files,
|
|
1402
|
-
fixtures, browser bytes, and public APIs change by zero. No production source
|
|
1403
|
-
changed, so no release was consumed.
|
|
1404
|
-
|
|
1405
|
-
### `0.17.2`: Memory And Disposal Gate
|
|
1406
|
-
|
|
1407
|
-
- **Purpose:** close document/layout/route/range/external-instance memory risks.
|
|
1408
|
-
- **Acceptance:** long repeated journeys show bounded heap, DOM, prefetch cache,
|
|
1409
|
-
resource handles, listener counts, and state maps.
|
|
1410
|
-
- **Stop condition:** undocumented browser GC timing is presented as exact proof.
|
|
1411
|
-
- **Done condition:** retained growth has a declared bound and repeated samples
|
|
1412
|
-
pass the agreed threshold.
|
|
1413
|
-
|
|
1414
|
-
**Result:** complete with one navigation-cache ownership fix. A deterministic
|
|
1415
|
-
race holds unique prefetched documents, starts navigation to each, commits a
|
|
1416
|
-
canonical route that prunes them, and then releases the stale responses. Before
|
|
1417
|
-
the fix, five races left `browserState.size` at zero but increased CDP documents
|
|
1418
|
-
from 8 to 16 under owner `navigation:documents`: stale `navigate()` calls wrote
|
|
1419
|
-
their parsed documents back into the cache before checking the navigation
|
|
1420
|
-
revision. `navigation-runtime.js` now checks revision before the existing cache
|
|
1421
|
-
write; no cache type, LRU, cancellation registry, or public instrumentation was
|
|
1422
|
-
added. The default gate batches ten races within browser connection limits, then
|
|
1423
|
-
runs 30 route, conditional, keyed, dialog, and editor cycles in one Chrome
|
|
1424
|
-
profile. Across 101 navigations, baseline/final documents remain 8, browser state
|
|
1425
|
-
entries 0, DOM nodes 174, listeners 7, and editor mounts/disposals 71/71. Forced-
|
|
1426
|
-
GC heap moves from 1,826,244 to 2,022,160 bytes, below the declared larger-of-2-
|
|
1427
|
-
MiB-or-15% alarm. Semantic primitives, IR kinds, compiler passes, runtime
|
|
1428
|
-
concepts, runtime files, cache abstractions, and public APIs change by zero; one
|
|
1429
|
-
production runtime reorders one existing statement with zero LOC growth. The
|
|
1430
|
-
maintained Worker graph remains 907 raw / 477 gzip bytes and the window graph
|
|
1431
|
-
remains 14,456 raw bytes with gzip moving from 6,159 to 6,160 bytes; its seven-
|
|
1432
|
-
run Linux median was 795.3 ms, recorded without a timing comparison because the
|
|
1433
|
-
host load differs. One endurance fixture and browser gate grow, while static
|
|
1434
|
-
routes remain zero JavaScript. This packet ships as the actual `0.16.5` patch to
|
|
1435
|
-
retain the public `0.16.x` version line.
|
|
1436
|
-
|
|
1437
|
-
## `0.18.x`: Lazy Loading And Code Splitting
|
|
1438
|
-
|
|
1439
|
-
### `0.18.0`: Route And Feature Artifact Baseline
|
|
1440
|
-
|
|
1441
|
-
- **Purpose:** record current route-specific ESM, shared chunks, preload, Worker,
|
|
1442
|
-
CSS, and navigation prefetch behavior.
|
|
1443
|
-
- **Expected boundary:** existing RouteBuildRecord and artifact report.
|
|
1444
|
-
- **Acceptance:** exact source-to-artifact ownership and bytes for the greenfield
|
|
1445
|
-
app, editor, Answer, and Memos routes.
|
|
1446
|
-
- **Stop condition:** a new loader is designed before the current graph is
|
|
1447
|
-
measured.
|
|
1448
|
-
- **Done condition:** every eager dependency has a structural reason.
|
|
1449
|
-
|
|
1450
|
-
**Result:** closed by the existing RouteBuildRecord and artifact report. A
|
|
1451
|
-
test-only collector builds the greenfield project, real CodeMirror editor, four
|
|
1452
|
-
separate Apache Answer reductions, and Memos outline reduction: seven fixtures
|
|
1453
|
-
and 25 routes total. It joins each route's source page to HTML, runtime entries
|
|
1454
|
-
and requirements, handler entries/chunks, Worker entries/chunks, and styles,
|
|
1455
|
-
then records exact raw/gzip bytes and SHA-256 values. Every generated JavaScript
|
|
1456
|
-
file has at least one route owner, every direct module script has one matching
|
|
1457
|
-
`modulepreload`, and every static control owns zero JavaScript and zero preload.
|
|
1458
|
-
No measured fixture emits a shared chunk.
|
|
1459
|
-
|
|
1460
|
-
The greenfield deploy is 45 files and 196,678 raw / 60,880 aggregate gzip
|
|
1461
|
-
bytes. Its project routes own 38,652-69,178 raw JavaScript bytes; `/login` owns
|
|
1462
|
-
12,093 raw bytes and `/help` owns zero. The editor route owns 214,968 raw /
|
|
1463
|
-
71,607 gzip bytes, including its 200,260 raw / 64,949 gzip CodeMirror handler;
|
|
1464
|
-
its static sibling owns zero. The Answer question reduction owns 32,022 raw /
|
|
1465
|
-
12,408 gzip bytes. Its route-shell static pages own zero while the two runtime
|
|
1466
|
-
parameter pages own 2,134 and 2,078 raw bytes. Answer auth routes own 25,684 and
|
|
1467
|
-
26,818 raw bytes with a zero-byte public sibling; authoring/admin routes own
|
|
1468
|
-
12,251 and 20,919 raw bytes with a zero-byte legal sibling. The Memos outline
|
|
1469
|
-
owns 14,701 raw / 7,044 gzip bytes and its static sibling owns zero.
|
|
1470
|
-
|
|
1471
|
-
Current navigation prefetch remains structurally bounded: eligible same-origin
|
|
1472
|
-
group links prefetch on hover, focus, viewport proximity, or idle fallback;
|
|
1473
|
-
promises deduplicate, failures leave the cache, current/eligible URLs define the
|
|
1474
|
-
retained set, and the `0.16.5` revision check rejects stale navigation results
|
|
1475
|
-
before cache insertion. The report intentionally records emitted closure rather
|
|
1476
|
-
than esbuild input-byte attribution. Answer and Memos remain disconnected
|
|
1477
|
-
reductions, not whole-application claims. Semantic primitives, IR kinds,
|
|
1478
|
-
compiler passes, production compiler/runtime LOC, runtime concepts/files, and
|
|
1479
|
-
public APIs change by zero. No release is consumed.
|
|
1480
|
-
|
|
1481
|
-
### `0.18.1`: Bounded Lazy Capability Import
|
|
1482
|
-
|
|
1483
|
-
- **Purpose:** permit one statically analyzable feature dependency to load only
|
|
1484
|
-
when its owner requests it.
|
|
1485
|
-
- **Expected boundary:** validated static dynamic-import edge, route artifact
|
|
1486
|
-
closure, owner token, and native ESM import.
|
|
1487
|
-
- **Acceptance:** exact specifier, no arbitrary graph escape, deduplicated load,
|
|
1488
|
-
error/retry, owner release, and static exclusion.
|
|
1489
|
-
- **Stop condition:** arbitrary dynamic imports or lazy component rendering are
|
|
1490
|
-
required.
|
|
1491
|
-
- **Done condition:** the feature loader is capability-specific, not a component
|
|
1492
|
-
runtime.
|
|
1493
|
-
|
|
1494
|
-
**Completion evidence:** one direct literal bare-package `import()` may remain
|
|
1495
|
-
inside an inline synchronous effect when its first statement is the exact
|
|
1496
|
-
dependency-state guard `if (!state) return`. The source graph, descriptor
|
|
1497
|
-
session, ModuleIR validation, build-module erasure, esbuild split graph, and
|
|
1498
|
-
route artifact report preserve that edge without adding a loader. Relative,
|
|
1499
|
-
URL, render-time, event, indirect, async-effect, unguarded, and multiple dynamic
|
|
1500
|
-
imports remain rejected. Failed native ESM evaluation remains visible through
|
|
1501
|
-
application-owned error state; same-document retry of the failed URL is not
|
|
1502
|
-
claimed because the browser module map cannot be reset without adding the
|
|
1503
|
-
loader forbidden by this packet.
|
|
1504
|
-
|
|
1505
|
-
The CodeMirror-derived fixture initially requests no deferred chunk. Activation
|
|
1506
|
-
requests one chunk, mounts the editor, and owner release destroys it. Remount
|
|
1507
|
-
uses the browser module map without another request, and document disposal
|
|
1508
|
-
balances the second mount. The initial eager graph is 12,982 raw / 6,153 gzip
|
|
1509
|
-
bytes versus 214,968 raw / 71,607 gzip bytes for the existing eager editor;
|
|
1510
|
-
250,086 raw / 80,890 gzip bytes move to the deferred graph. Initial gzip falls
|
|
1511
|
-
by 65,454 bytes (91.4%), while the static sibling remains 0 B JavaScript.
|
|
1512
|
-
|
|
1513
|
-
The packet adds no semantic primitive, compiler pass, public API, browser
|
|
1514
|
-
runtime concept/file, React, VDOM, hydration, retained component tree, or retry
|
|
1515
|
-
cache. It adds one validated `ImportIR` kind and additive
|
|
1516
|
-
`handlers.lazyChunks` reporting. Production compiler sources change by 76 added
|
|
1517
|
-
and 11 removed lines. The artifact collector now covers eight fixtures and 27
|
|
1518
|
-
routes with no ownerless JavaScript or preload mismatch. `npm run check`, 284
|
|
1519
|
-
required-Chrome tests, package smoke, and the maintained benchmark pass. The
|
|
1520
|
-
Worker graph remains 907 raw / 477 gzip bytes; the window graph remains 14,456
|
|
1521
|
-
raw / 6,160 gzip bytes, with a seven-build median of 222.8 ms. This packet ships
|
|
1522
|
-
as the actual `0.16.6` patch to retain the public `0.16.x` version line.
|
|
1523
|
-
|
|
1524
|
-
### `0.18.2`: Lazy Editor Journey
|
|
1525
|
-
|
|
1526
|
-
- **Purpose:** apply `0.18.1` to the real editor.
|
|
1527
|
-
- **Acceptance:** editor package absent before activation, loaded once on demand,
|
|
1528
|
-
mount/update/dispose behavior unchanged, failure recoverable, and revisit
|
|
1529
|
-
semantics explicit.
|
|
1530
|
-
- **Stop condition:** package evaluation must occur during build rendering.
|
|
1531
|
-
- **Done condition:** initial route bytes fall by the exact deferred package
|
|
1532
|
-
graph without losing behavior.
|
|
1533
|
-
|
|
1534
|
-
**Completion evidence:** a real retained CodeMirror editor now begins closed and
|
|
1535
|
-
uses the `0.18.1` guarded literal package edge for its mount. The existing
|
|
1536
|
-
effect-private-ref normalization recognizes its one direct `.then()` assignment
|
|
1537
|
-
as the retained setup write, lowers the handle to owner-scoped state, and leaves
|
|
1538
|
-
later value effects read-only. Indirect callbacks, repeated writes, attached
|
|
1539
|
-
refs, update-effect writes, missing null-reset cleanup, and broader dynamic
|
|
1540
|
-
imports retain diagnostics. Package evaluation remains entirely in browser
|
|
1541
|
-
effect ESM.
|
|
1542
|
-
|
|
1543
|
-
Required Chrome records zero chunk requests before activation and one afterward.
|
|
1544
|
-
It proves initial content and accessible name, application-to-editor and
|
|
1545
|
-
editor-to-application updates, retained DOM identity, authored update failure
|
|
1546
|
-
and recovery, exact conditional disposal, fresh `Alpha` state on remount, no
|
|
1547
|
-
second package request, and final document disposal. Native ESM evaluation
|
|
1548
|
-
failure retry remains outside this packet as recorded in `0.18.1`.
|
|
1549
|
-
|
|
1550
|
-
The eager editor owns 214,968 raw / 71,607 gzip bytes. The lazy retained editor
|
|
1551
|
-
initially owns 15,896 raw / 7,230 gzip bytes and defers 250,086 raw / 80,890 gzip
|
|
1552
|
-
bytes, reducing initial gzip by 64,377 bytes (89.9%). Its static sibling remains
|
|
1553
|
-
0 B JavaScript. The artifact collector covers nine fixtures and 29 routes with
|
|
1554
|
-
no ownerless JavaScript or preload mismatch.
|
|
1555
|
-
|
|
1556
|
-
The packet adds no semantic primitive, IR kind, compiler pass, public API,
|
|
1557
|
-
browser runtime concept/file, loader, resource registry, or widget runtime. One
|
|
1558
|
-
existing normalization pass changes by 15 added and four removed production
|
|
1559
|
-
lines. `npm run check`, 285 required-Chrome tests, package smoke, and the
|
|
1560
|
-
maintained benchmark pass. Worker and window graphs remain 907 raw / 477 gzip
|
|
1561
|
-
and 14,456 raw / 6,160 gzip bytes; the seven-build median is 230.5 ms. This
|
|
1562
|
-
packet ships as the actual `0.16.7` patch to retain the public `0.16.x` line.
|
|
1563
|
-
|
|
1564
|
-
### `0.18.3`: Shared Chunks And Prefetch Policy
|
|
1565
|
-
|
|
1566
|
-
- **Purpose:** avoid duplicate large feature graphs and define optional preload.
|
|
1567
|
-
- **Acceptance:** shared chunk ownership, no duplicate fetch, route/interaction
|
|
1568
|
-
prefetch policy, cache bound, cancellation limits, and output report.
|
|
1569
|
-
- **Stop condition:** all features are globally prefetched.
|
|
1570
|
-
- **Done condition:** policy minimizes unused transfer while meeting accepted
|
|
1571
|
-
interaction latency.
|
|
1572
|
-
|
|
1573
|
-
**Completion evidence:** two enhanced-navigation route owners now use one
|
|
1574
|
-
deferred CodeMirror graph. Existing multi-entry esbuild splitting emits one
|
|
1575
|
-
250,086 raw / 80,890 gzip byte chunk, and the existing artifact report records
|
|
1576
|
-
that exact lazy path as shared by `/` and `/second`. Their eager graphs remain
|
|
1577
|
-
21,599 raw / 9,466 gzip and 21,609 raw / 9,468 gzip bytes. Neither route HTML
|
|
1578
|
-
preloads the deferred chunk, navigation document prefetch does not request it,
|
|
1579
|
-
and the static sibling remains complete HTML with 0 B JavaScript.
|
|
1580
|
-
|
|
1581
|
-
Required Chrome proves zero requests before interaction, one request when the
|
|
1582
|
-
first owner activates, exact disposal, no route-triggered request, and no second
|
|
1583
|
-
request when the second owner activates. The selected policy is therefore no
|
|
1584
|
-
optional package preload: interaction calls native `import()` immediately, the
|
|
1585
|
-
browser module map deduplicates it for the document lifetime, and Kudzu owns no
|
|
1586
|
-
additional cache. Native ESM imports cannot be cancelled after request; owner
|
|
1587
|
-
cleanup invalidates the callback and prevents a late mount rather than claiming
|
|
1588
|
-
network cancellation.
|
|
1589
|
-
|
|
1590
|
-
The released lazy-import gate is also hardened before closing the packet.
|
|
1591
|
-
`ownedLazyPackageImport()` now resolves the callback callee through the existing
|
|
1592
|
-
lexical binding index and accepts only named `useEffect` imports from React or
|
|
1593
|
-
Kudzu. A local function with the same text can no longer bypass the ordinary
|
|
1594
|
-
dynamic-import diagnostic. The packet adds no semantic primitive, IR kind,
|
|
1595
|
-
compiler pass, public API, runtime concept/file, loader, prefetch registry, or
|
|
1596
|
-
cache. Four existing compiler files change by 17 added and eight removed lines.
|
|
1597
|
-
The artifact collector covers ten fixtures and 32 routes. `npm run check`, 288
|
|
1598
|
-
required-Chrome tests, package smoke, and the maintained benchmark pass. Worker
|
|
1599
|
-
and window graphs remain 907 raw / 477 gzip and 14,456 raw / 6,160 gzip bytes;
|
|
1600
|
-
the loaded Linux host records a 696.6 ms seven-build median without a timing
|
|
1601
|
-
comparison. This packet ships as the actual `0.16.8` patch to retain the public
|
|
1602
|
-
`0.16.x` line.
|
|
1603
|
-
|
|
1604
|
-
## `0.19.x`: React Ecosystem Migration
|
|
1605
|
-
|
|
1606
|
-
### `0.19.0`: Compatibility Boundary And Inventory
|
|
1607
|
-
|
|
1608
|
-
- **Purpose:** centralize package recognition and compatibility provenance without
|
|
1609
|
-
changing semantic IR or browser output.
|
|
1610
|
-
- **Expected files:** focused compatibility metadata/registry, current passes,
|
|
1611
|
-
project report; no public plugin API.
|
|
1612
|
-
- **Acceptance:** Native, Compiled, Normalized, Adapter, Owned External UI,
|
|
1613
|
-
Partial, and Unsupported sites are deterministic and source-located.
|
|
1614
|
-
- **Stop condition:** package origin enters ModuleIR, RouteIR, codegen, or runtime.
|
|
1615
|
-
- **Done condition:** existing React Router, Bootstrap, Zustand, and browser
|
|
1616
|
-
normalizations preserve output and diagnostics.
|
|
1617
|
-
|
|
1618
|
-
Implementation and release-candidate evidence complete. One internal registry
|
|
1619
|
-
now owns package identities and classifies original reachable import, re-export,
|
|
1620
|
-
and literal dynamic-import sites before normalization. The deterministic
|
|
1621
|
-
`.kudzu/kudzu-compatibility.json` report records package/API identity, stable
|
|
1622
|
-
rule, Native, Compiled, Normalized, Adapter, Owned External UI, Partial, or
|
|
1623
|
-
Unsupported treatment, and exact authored line/column range. Type-only,
|
|
1624
|
-
relative, Node, Kudzu-first-party, and unreachable source stays outside the
|
|
1625
|
-
inventory.
|
|
1626
|
-
|
|
1627
|
-
React Router, React Bootstrap, Zustand, React migration, browser-signal, `clsx`,
|
|
1628
|
-
and i18next recognition reuse the registry's package identities. Focused tests
|
|
1629
|
-
cover all seven classes, aliases, exact ranges, deterministic ordering, and a
|
|
1630
|
-
real build where an unreachable unsupported module is excluded. Existing
|
|
1631
|
-
project output baselines and package diagnostics remain green. Package origin
|
|
1632
|
-
does not enter SourceResult, ComponentAnalysis, ModuleIR, RouteIR, codegen,
|
|
1633
|
-
runtime files, `afterBuild()`, or deploy output.
|
|
1634
|
-
|
|
1635
|
-
The slice adds zero semantic primitives, IR kinds, compiler passes,
|
|
1636
|
-
normalization entries, runtime concepts/files, browser bytes, or public APIs.
|
|
1637
|
-
Production compiler/orchestration changes are 161 added and 13 removed lines,
|
|
1638
|
-
including the 141-line registry, for +148 net compatibility/build lines and zero
|
|
1639
|
-
core semantic LOC. `npm run check`, 290 required-Chrome tests, package smoke,
|
|
1640
|
-
and the maintained benchmark pass. Worker and window graphs remain 907 raw /
|
|
1641
|
-
477 gzip and 14,456 raw / 6,160 gzip bytes; seven clean Linux x64 builds record
|
|
1642
|
-
a 532.6 ms median without a timing comparison. This packet ships as the actual
|
|
1643
|
-
`0.16.9` patch, with `create-kudzu@0.1.134`, to retain the public
|
|
1644
|
-
`0.16.x` line.
|
|
1645
|
-
|
|
1646
|
-
### `0.19.1`: Apache Answer Authentication Journey
|
|
1647
|
-
|
|
1648
|
-
- **Purpose:** promote the existing build-only auth fixture to browser evidence.
|
|
1649
|
-
- **Acceptance:** anonymous, invalid login, valid login, token restore, shared
|
|
1650
|
-
header/settings, 401 clear, replacement navigation, public zero-JS sibling.
|
|
1651
|
-
- **Stop condition:** client UI is treated as authorization.
|
|
1652
|
-
- **Done condition:** the complete journey passes against a deterministic server.
|
|
1653
|
-
|
|
1654
|
-
Complete. The existing Apache Answer reduction now runs one required-Chrome
|
|
1655
|
-
journey against a deterministic native server. It proves anonymous startup,
|
|
1656
|
-
invalid and valid native form submission, token persistence and reload restore,
|
|
1657
|
-
layout-owned header/settings reads, a server 401 clearing storage and shared
|
|
1658
|
-
state, and replacement navigation back to the anonymous login document. The
|
|
1659
|
-
public sibling remains complete HTML with zero JavaScript.
|
|
1660
|
-
|
|
1661
|
-
No authored fixture, compiler, IR, runtime, or deploy artifact changed. The
|
|
1662
|
-
packet adds one browser harness only: zero semantic primitives, ModuleIR kinds,
|
|
1663
|
-
passes, normalization entries, runtime concepts, public APIs, and browser bytes.
|
|
1664
|
-
The authentication fixture remains 17 deploy files and 36,441 raw / 15,598 gzip
|
|
1665
|
-
bytes; `/` owns 25,684 raw / 11,372 gzip bytes, `/settings` owns 26,818 raw /
|
|
1666
|
-
11,319 gzip bytes, and `/public` owns 0 JavaScript bytes. Worker and window
|
|
1667
|
-
graphs remain 907 raw / 477 gzip and 14,456 raw / 6,160 gzip bytes; seven clean
|
|
1668
|
-
Linux x64 builds record a 674.7 ms median without a timing comparison. This
|
|
1669
|
-
packet ships as the actual `0.16.10` patch, with `create-kudzu@0.1.135`, to
|
|
1670
|
-
retain the public `0.16.x` line.
|
|
1671
|
-
|
|
1672
|
-
### `0.19.2`: Apache Answer Connected Authoring Journey
|
|
1673
|
-
|
|
1674
|
-
- **Purpose:** connect query, route, detail, create/edit, validation, mutation,
|
|
1675
|
-
refresh, admin, and logout.
|
|
1676
|
-
- **Acceptance:** behavior, accessibility, persistence, errors, navigation,
|
|
1677
|
-
source retention, and output all pass.
|
|
1678
|
-
- **Stop condition:** fixture-only compiler semantics or broad package runtime is
|
|
1679
|
-
introduced.
|
|
1680
|
-
- **Done condition:** this is a connected browser journey, not a whole-app claim.
|
|
1681
|
-
|
|
1682
|
-
Complete. One Apache Answer-derived fixture now connects invalid and valid login,
|
|
1683
|
-
layout-shared authentication, page/order query loading, explicit refresh, native
|
|
1684
|
-
creation with server validation and retained draft, runtime detail routing,
|
|
1685
|
-
editing, reload persistence, keyed administration, delete-and-refetch, and
|
|
1686
|
-
logout against one deterministic server. Native controls and status/alert
|
|
1687
|
-
regions preserve the accessibility boundary, every retained source file is
|
|
1688
|
-
checked, and the public sibling remains complete HTML with zero JavaScript.
|
|
1689
|
-
|
|
1690
|
-
The packet reuses existing Zustand normalization, search signals, dependency
|
|
1691
|
-
effects, runtime parameters, native handlers, bindings, keyed ownership, and
|
|
1692
|
-
enhanced navigation. It adds zero semantic primitives, ModuleIR kinds, compiler
|
|
1693
|
-
passes or core LOC, runtime concepts, package adapters, and public APIs. The new
|
|
1694
|
-
fixture emits 33 deploy files and 88,198 raw / 33,173 gzip bytes; `/` owns 27,196
|
|
1695
|
-
raw / 11,968 gzip bytes, `/questions` owns 51,577 raw / 19,801 gzip bytes,
|
|
1696
|
-
`/questions/add` owns 27,109 raw / 11,893 gzip bytes, runtime detail owns 32,783
|
|
1697
|
-
raw / 14,056 gzip bytes, admin owns 50,861 raw / 19,426 gzip bytes, and `/public`
|
|
1698
|
-
owns zero JavaScript. Worker and window graphs remain 907 raw / 477 gzip and
|
|
1699
|
-
14,456 raw / 6,160 gzip bytes; seven clean Linux x64 builds record a 640.5 ms
|
|
1700
|
-
median without a timing comparison. No production logic changed, so the public
|
|
1701
|
-
version remains `0.16.10` and no release is consumed.
|
|
1702
|
-
|
|
1703
|
-
### `0.19.3`: Memos Feed And CRUD Journey
|
|
1704
|
-
|
|
1705
|
-
- **Purpose:** establish the first durable Memos application slice.
|
|
1706
|
-
- **Acceptance:** login, loading/error, feed, pagination, create/edit/delete,
|
|
1707
|
-
retained memo identity, refresh, and logout.
|
|
1708
|
-
- **Stop condition:** outline-only or static feed output is presented as Memos
|
|
1709
|
-
migration.
|
|
1710
|
-
- **Done condition:** pinned upstream provenance and exact retained source are
|
|
1711
|
-
recorded.
|
|
1712
|
-
|
|
1713
|
-
Complete. A fixture pinned to Memos revision
|
|
1714
|
-
`e5ed6e7ec60e141d6e354f3ab59906c2c47dccac` now runs invalid and valid login,
|
|
1715
|
-
initial loading, a server pagination failure, explicit recovery, overlapping-key
|
|
1716
|
-
pagination, create, edit, delete, reload persistence, and logout against one
|
|
1717
|
-
deterministic server. The retained memo row keeps DOM identity through the
|
|
1718
|
-
failed request, successful pagination, and every CRUD refetch. Native labels,
|
|
1719
|
-
status and alert regions preserve the accessibility boundary, every authored
|
|
1720
|
-
source file is retained, and the public sibling emits zero JavaScript.
|
|
1721
|
-
|
|
1722
|
-
The packet reuses existing Zustand normalization, dependency effects, keyed
|
|
1723
|
-
ownership, native forms and handlers, and enhanced navigation. It adds zero
|
|
1724
|
-
semantic primitives, ModuleIR kinds, compiler passes or core LOC, runtime
|
|
1725
|
-
concepts, package adapters, and public APIs. The fixture emits 19 deploy files
|
|
1726
|
-
and 56,167 raw / 21,634 gzip bytes; `/` owns 25,856 raw / 11,396 gzip bytes,
|
|
1727
|
-
`/feed` owns 45,690 raw / 17,836 gzip bytes, and `/public` owns zero JavaScript.
|
|
1728
|
-
Worker and window graphs remain 907 raw / 477 gzip and 14,456 raw / 6,160 gzip
|
|
1729
|
-
bytes; seven clean Linux x64 builds record a 761.8 ms median without a timing
|
|
1730
|
-
comparison. No production logic changed, so the public version remains
|
|
1731
|
-
`0.16.10` and no release is consumed.
|
|
1732
|
-
|
|
1733
|
-
### `0.19.4`: Memos Realtime Journey
|
|
1734
|
-
|
|
1735
|
-
- **Purpose:** add reaction and realtime refresh using the accepted long-lived
|
|
1736
|
-
transport model.
|
|
1737
|
-
- **Acceptance:** mutation, server event, deduplication, reconnect, stale event
|
|
1738
|
-
rejection, route cleanup, and memory gate.
|
|
1739
|
-
- **Stop condition:** a query or SSE package runtime is copied wholesale.
|
|
1740
|
-
- **Done condition:** browser and endurance acceptance pass.
|
|
1741
|
-
|
|
1742
|
-
Complete. The connected Memos fixture now adds a native reaction mutation and
|
|
1743
|
-
an effect-owned WebSocket that refreshes the keyed feed from versioned server
|
|
1744
|
-
events. Required Chrome proves duplicate and stale version rejection, old-socket
|
|
1745
|
-
callback rejection after reconnect, retained memo DOM identity, exact route
|
|
1746
|
-
cleanup, and fresh ownership after re-entry and reload. Active sockets,
|
|
1747
|
-
listeners, and reconnect timers remain bounded and return to zero after each
|
|
1748
|
-
owner release. The public sibling remains complete HTML with zero JavaScript.
|
|
1749
|
-
|
|
1750
|
-
The packet reuses existing native handlers, keyed ownership, effect-private
|
|
1751
|
-
lifecycle, invalidation, timers, and route release. It adds zero semantic
|
|
1752
|
-
primitives, ModuleIR kinds, compiler passes or core LOC, runtime concepts,
|
|
1753
|
-
normalization or adapter rules, and public APIs. The fixture emits 19 deploy
|
|
1754
|
-
files and 57,811 raw / 22,069 gzip bytes; `/` owns 25,856 raw / 11,396 gzip
|
|
1755
|
-
bytes, `/feed` owns 46,740 raw / 18,184 gzip bytes, and `/public` owns zero
|
|
1756
|
-
JavaScript. Worker and window graphs remain 907 raw / 477 gzip and 14,456 raw /
|
|
1757
|
-
6,160 gzip bytes; seven clean Linux x64 builds record a 620.7 ms median without
|
|
1758
|
-
a timing comparison. Browser-disabled tests pass 292/292, required-Chrome
|
|
1759
|
-
focused acceptance, package smoke, and artifact accounting pass. No production
|
|
1760
|
-
logic changed, so the public version remains `0.16.10` and no release is
|
|
1761
|
-
consumed.
|
|
1762
|
-
|
|
1763
|
-
### `0.19.5`: Actual Budget Intake Decision
|
|
1764
|
-
|
|
1765
|
-
- **Purpose:** determine whether a complete, legally and technically usable
|
|
1766
|
-
workspace can become the third application proof.
|
|
1767
|
-
- **Acceptance:** pinned source, install/build path, dependency inventory, first
|
|
1768
|
-
executable user journey, and honest source-retention denominator.
|
|
1769
|
-
- **Stop condition:** workspace dependencies or core packages remain absent.
|
|
1770
|
-
- **Done condition:** a later packet is authorized, or deferral is recorded with
|
|
1771
|
-
no compatibility claim.
|
|
1772
|
-
|
|
1773
|
-
Deferred by the stop condition. The pinned MIT revision
|
|
1774
|
-
`87e33e49eb4d666c33e0c0f172faf340d1b7aa0a` remains only a sparse desktop-client
|
|
1775
|
-
acquisition: 810 TS/TSX modules, 163,344 LOC, and 80 route declarations without
|
|
1776
|
-
the workspace tooling, component library, core backend, Yarn release, database,
|
|
1777
|
-
worker coordinator, or spreadsheet implementation needed to install and run an
|
|
1778
|
-
honest user journey. The prior static report probe is an exported report, not
|
|
1779
|
-
Actual Budget, and its 22/906 retained-line result is not a whole-workspace
|
|
1780
|
-
denominator. No later application packet, compatibility claim, compiler work,
|
|
1781
|
-
runtime, package adapter, public API, version, or release is authorized. Intake
|
|
1782
|
-
may resume only from a complete pinned workspace and executable dependency
|
|
1783
|
-
graph.
|
|
1784
|
-
|
|
1785
|
-
## `0.20.x`: AI Tooling And Delivery Cost
|
|
1786
|
-
|
|
1787
|
-
### `0.20.0`: Structured Diagnostics
|
|
1788
|
-
|
|
1789
|
-
- **Purpose:** expose stable machine-readable errors from the existing compiler.
|
|
1790
|
-
- **Acceptance:** version, code, stage, severity, source range, message,
|
|
1791
|
-
compatibility class, and safe suggestion; human diagnostics remain useful.
|
|
1792
|
-
- **Stop condition:** diagnostic codes expose pass filenames or unstable IR.
|
|
1793
|
-
- **Done condition:** agents no longer parse message substrings for maintained
|
|
1794
|
-
fixtures.
|
|
1795
|
-
|
|
1796
|
-
Complete. Authored
|
|
1797
|
-
source failures now propagate as one versioned diagnostic envelope with stable
|
|
1798
|
-
semantic code, stage, severity, project-relative source range, human message,
|
|
1799
|
-
nullable compatibility class, and nullable safe suggestion. `kudzu build
|
|
1800
|
-
--json` emits only that deterministic envelope for structured failures, while
|
|
1801
|
-
ordinary builds and the development overlay retain readable source-located
|
|
1802
|
-
messages. Unresolved imports and re-exports, unsupported dynamic imports,
|
|
1803
|
-
TypeScript syntax errors, runtime-locale `react-i18next`, and keyed-row ref
|
|
1804
|
-
initializers prove the maintained boundary without parsing message text.
|
|
1805
|
-
|
|
1806
|
-
The implementation centralizes 72 lines in `diagnostics.mjs`, reuses the
|
|
1807
|
-
existing compatibility classification function, and normalizes paths only at
|
|
1808
|
-
the project build boundary. It adds zero semantic primitives, ModuleIR kinds,
|
|
1809
|
-
compiler passes, normalization entries, runtime concepts, browser modules, or
|
|
1810
|
-
public application APIs. Production source is +111 net lines, including +8 in
|
|
1811
|
-
the measured core semantic file set; the increase is compiler/tooling error
|
|
1812
|
-
transport rather than semantic analysis. All representative deploy manifests
|
|
1813
|
-
and hashes remain unchanged. Worker and window graphs remain 907 raw / 477 gzip
|
|
1814
|
-
and 14,456 raw / 6,160 gzip bytes; seven clean Linux x64 release-candidate builds
|
|
1815
|
-
record a 1,034.4 ms median without a timing comparison. `npm run check`, 293/293
|
|
1816
|
-
browser-disabled and required-Chrome tests, focused CLI JSON tests, development error recovery, package smoke,
|
|
1817
|
-
artifact accounting, and `git diff --check` pass. The packet ships as
|
|
1818
|
-
`@kudzujs/core@0.16.11` with `create-kudzu@0.1.136`.
|
|
1819
|
-
|
|
1820
|
-
### `0.20.1`: `kudzu inspect --json`
|
|
1821
|
-
|
|
1822
|
-
- **Purpose:** expose reachable application and compatibility inventory.
|
|
1823
|
-
- **Acceptance:** filtered module/route/package/capability/owner/blocker facts,
|
|
1824
|
-
deterministic order, schema version, and large-project context bound.
|
|
1825
|
-
- **Stop condition:** the command builds a second analyzer or dumps full raw IR.
|
|
1826
|
-
- **Done condition:** the first blocker can be selected without reading hundreds
|
|
1827
|
-
of source or dependency files.
|
|
1828
|
-
|
|
1829
|
-
Complete. `kudzu inspect --json` now runs the authoritative build and projects
|
|
1830
|
-
the existing reachable source, compatibility, ComponentAnalysis, ModuleIR,
|
|
1831
|
-
CapabilityIR, and route-artifact records into one versioned report. Modules,
|
|
1832
|
-
routes, packages, compatibility sites, capability families, semantic owners,
|
|
1833
|
-
and blockers sort before fixed section limits; totals and omitted counts keep
|
|
1834
|
-
large-project context explicit. Unreachable source, generated code, HTML, raw
|
|
1835
|
-
IR, captures, state values, and full artifact closures remain excluded.
|
|
1836
|
-
|
|
1837
|
-
One real CLI fixture proves reachable filtering, static and interactive route
|
|
1838
|
-
facts, native package classification, state ownership, project-relative paths,
|
|
1839
|
-
deterministic output, and structured blocked inventory. A synthetic 101-module
|
|
1840
|
-
and 51-blocker check proves sort-before-truncation and first-blocker retention.
|
|
1841
|
-
The implementation is one 154-line projection over existing records plus the
|
|
1842
|
-
existing build/CLI seam; it adds no analyzer, semantic primitive, compiler pass,
|
|
1843
|
-
normalization entry, runtime concept, or browser module. Representative deploy
|
|
1844
|
-
manifests and hashes remain unchanged. Worker and window graphs remain 907 raw /
|
|
1845
|
-
477 gzip and 14,456 raw / 6,160 gzip bytes; seven clean builds record a 648.7 ms
|
|
1846
|
-
median without a timing comparison. Browser-disabled and required-Chrome suites
|
|
1847
|
-
pass 295/295 tests, package smoke and artifact accounting pass, and the packet
|
|
1848
|
-
ships as `@kudzujs/core@0.16.12` with `create-kudzu@0.1.137`.
|
|
1849
|
-
|
|
1850
|
-
### `0.20.2`: `kudzu explain --route`
|
|
1851
|
-
|
|
1852
|
-
- **Purpose:** trace one authored route to its selected browser artifacts.
|
|
1853
|
-
- **Acceptance:** source site, normalization provenance, semantic owner,
|
|
1854
|
-
capability, entry/chunk/style/Worker, byte reason, and zero-JS explanation.
|
|
1855
|
-
- **Stop condition:** a second artifact graph is introduced.
|
|
1856
|
-
- **Done condition:** existing route records and artifact reports answer the
|
|
1857
|
-
query with bounded output.
|
|
1858
|
-
|
|
1859
|
-
Completed by `@kudzujs/core@0.16.13` and `create-kudzu@0.1.138`. The
|
|
1860
|
-
`worker-effects` fixture proves exact configured-base lookup for an effect-owned
|
|
1861
|
-
Worker route, authored source closure, `Dashboard` ownership, capability family,
|
|
1862
|
-
runtime/handler/Worker byte reasons, raw/gzip totals, hashes, deterministic
|
|
1863
|
-
output, structured missing-route diagnostics, and a static sibling with an empty
|
|
1864
|
-
JavaScript closure. The implementation is one 137-line bounded projection over
|
|
1865
|
-
existing source results, compatibility sites, route records, and the sole route
|
|
1866
|
-
artifact report plus the existing build/CLI seam. It adds no analyzer, semantic
|
|
1867
|
-
primitive, compiler pass, normalization entry, runtime concept, or browser
|
|
1868
|
-
module. Representative deploy manifests and hashes remain unchanged. Worker and
|
|
1869
|
-
window graphs remain 907 raw / 477 gzip and 14,456 raw / 6,160 gzip bytes; seven
|
|
1870
|
-
clean builds record a 605 ms median without a timing comparison. Browser-disabled
|
|
1871
|
-
and required-Chrome suites pass 296/296 tests, and package smoke and artifact
|
|
1872
|
-
accounting pass. Fixed 100-record section limits expose totals and omitted counts;
|
|
1873
|
-
the command requires one exact emitted route and intentionally excludes raw IR,
|
|
1874
|
-
HTML, generated code, captures, and state values.
|
|
1875
|
-
|
|
1876
|
-
### `0.20.3`: Deterministic Normalize And Fix
|
|
1877
|
-
|
|
1878
|
-
- **Purpose:** automate only edits proven safe and useful by recorded AI trials.
|
|
1879
|
-
- **Acceptance:** check/preview/write modes, exact ranges, idempotence, comments
|
|
1880
|
-
retained, no unrelated formatting, and byte-equivalent output.
|
|
1881
|
-
- **Stop condition:** canonical compiler source replaces ordinary authored TSX.
|
|
1882
|
-
- **Done condition:** each fix has one diagnostic code and explicit preconditions.
|
|
1883
|
-
|
|
1884
|
-
Deferred by the evidence gate without production changes or a release. A complete
|
|
1885
|
-
repository inventory found no recorded model prompt, model/tool version, raw
|
|
1886
|
-
attempt, correction cycle, token/cost trace, or repeated source edit proving any
|
|
1887
|
-
automatic fix useful. Existing diagnostics offer migration guidance but do not
|
|
1888
|
-
identify a uniquely safe edit; replacing a non-null ref initializer would change
|
|
1889
|
-
authored behavior. The existing lazy-state-literal normalization could support a
|
|
1890
|
-
narrow exact-range rewrite while preserving comments and output bytes, but no AI
|
|
1891
|
-
trial records it as a correction or cost reduction. Adding check/preview/write
|
|
1892
|
-
infrastructure now would therefore be speculative and violate the packet purpose.
|
|
1893
|
-
Resume this packet only after `0.20.4` records a repeated correction with one
|
|
1894
|
-
stable diagnostic code, a unique semantics-preserving replacement, and
|
|
1895
|
-
compiler-proven preconditions. No fixture, analyzer, fix command, formatter,
|
|
1896
|
-
compiler pass, runtime concept, browser module, package version, or release was
|
|
1897
|
-
added.
|
|
1898
|
-
|
|
1899
|
-
### `0.20.4`: AI Delivery Protocol And Runner
|
|
1900
|
-
|
|
1901
|
-
- **Purpose:** track fair Kudzu and React+Vite delivery attempts.
|
|
1902
|
-
- **Acceptance:** pinned model/tools/prompts/budgets, framework-neutral behavior
|
|
1903
|
-
suite, raw failures, token/cost/tool/file/build metrics, source retention, and
|
|
1904
|
-
browser artifacts.
|
|
1905
|
-
- **Stop condition:** Kudzu receives private compiler guidance unavailable to the
|
|
1906
|
-
comparator.
|
|
1907
|
-
- **Done condition:** every attempt is reproducible or fully attributable.
|
|
1908
|
-
|
|
1909
|
-
Completed by `@kudzujs/core@0.16.14` and `create-kudzu@0.1.139`. The
|
|
1910
|
-
repository-owned Node standard-library runner pins the model revision, pricing,
|
|
1911
|
-
tools, prompt, budgets, adapter, acceptance command, starter digests, optional
|
|
1912
|
-
public context, and paired schedule before creating isolated workspaces. It
|
|
1913
|
-
retains raw adapter/build/acceptance streams, final source, browser artifacts,
|
|
1914
|
-
hashes, attribution, token/cost/tool/file/build metrics, source retention, and
|
|
1915
|
-
both successful and failed attempts. The deterministic two-attempt-per-variant
|
|
1916
|
-
fixture proves equal ordering, one retained failure per variant, independent
|
|
1917
|
-
final builds, framework-neutral acceptance, and failure-inclusive cost per
|
|
1918
|
-
success. It is protocol evidence only and makes no Kudzu versus React+Vite
|
|
1919
|
-
delivery claim. No dependency, compiler pass, semantic primitive, runtime
|
|
1920
|
-
concept, application API, or browser byte was added. Browser-disabled and
|
|
1921
|
-
required-Chrome suites pass 297/297 tests, and package smoke passes.
|
|
1922
|
-
|
|
1923
|
-
### `0.20.5`: Tooling Cost Validation
|
|
1924
|
-
|
|
1925
|
-
- **Purpose:** prove that diagnostics/inspect/explain/fix lower total cost per
|
|
1926
|
-
successful task.
|
|
1927
|
-
- **Acceptance:** before/after attempts on the same tasks; failures remain in the
|
|
1928
|
-
numerator; success behavior remains identical.
|
|
1929
|
-
- **Stop condition:** token reduction comes from omitted behavior or hidden
|
|
1930
|
-
context.
|
|
1931
|
-
- **Done condition:** useful tools are retained and non-improving tools are
|
|
1932
|
-
removed or deferred.
|
|
1933
|
-
|
|
1934
|
-
Measured on 2026-09-01 with five interleaved attempts per condition against one
|
|
1935
|
-
Apache Answer-derived static Bootstrap correction. Both conditions passed 5/5
|
|
1936
|
-
with identical accepted behavior, source retention, and browser artifacts, but
|
|
1937
|
-
plain-build baseline cost 67,860 tokens per success while structured
|
|
1938
|
-
build/inspect/explain cost 84,793. The structured bundle is therefore deferred
|
|
1939
|
-
as an AI default rather than credited with a cost reduction. Existing JSON,
|
|
1940
|
-
inspection, and explanation commands remain for their independently accepted
|
|
1941
|
-
machine-readable contracts; no speculative `fix` command, compiler pass,
|
|
1942
|
-
runtime concept, application API, dependency, or browser byte was added. Exact
|
|
1943
|
-
samples, medians, and ranges are recorded in `PERFORMANCE.md`, while the pinned
|
|
1944
|
-
protocol reproduces and retains raw attempt evidence under the ignored
|
|
1945
|
-
`test-results/ai-delivery/` path.
|
|
1946
|
-
|
|
1947
|
-
## `0.21.x`: Production-Scale Proof
|
|
1948
|
-
|
|
1949
|
-
### `0.21.0`: Functional Parity Matrix
|
|
1950
|
-
|
|
1951
|
-
- **Purpose:** freeze complete greenfield, Answer, and Memos acceptance.
|
|
1952
|
-
- **Acceptance:** content, auth, forms, CRUD, shared data, large list, overlay,
|
|
1953
|
-
editor, lazy load, realtime, errors, accessibility, and navigation pass.
|
|
1954
|
-
- **Stop condition:** any build-only result is counted as application success.
|
|
1955
|
-
- **Done condition:** every claimed capability has a browser journey and static
|
|
1956
|
-
exclusion control.
|
|
1957
|
-
|
|
1958
|
-
**Result:** closed through existing application semantics without a release.
|
|
1959
|
-
The required-Chrome 300-test matrix passes content, authentication, forms, CRUD,
|
|
1960
|
-
shared data, large lists, overlays, editor ownership, lazy loading, realtime,
|
|
1961
|
-
errors, accessibility, and navigation across the maintained greenfield, Apache
|
|
1962
|
-
Answer, Memos, and focused package fixtures. The one material matrix gap was the
|
|
1963
|
-
10,000-item pagination decision: its release/remount behavior existed only in an
|
|
1964
|
-
optional benchmark. One ordinary browser acceptance now proves Enter-key page
|
|
1965
|
-
advance, focus retention, the 101-200 and restored 1-100 ranges, bounded 100-row
|
|
1966
|
-
DOM, fresh off-range input state, and no browser exceptions. Greenfield `/help`,
|
|
1967
|
-
Answer and Memos `/public`, package `/static` routes, and the complete direct
|
|
1968
|
-
10,000-row route provide zero-JavaScript controls.
|
|
1969
|
-
|
|
1970
|
-
The artifact inventory now includes the large-list fixture: 19 files,
|
|
1971
|
-
1,900,048 raw / 242,968 aggregate gzip bytes, deploy SHA-256
|
|
1972
|
-
`1bbaf3479ac90f923deb469c73eb93c0dd7364e7fe906919b167f2f854deda70`.
|
|
1973
|
-
Pagination owns 30,143 raw / 11,193 gzip bytes of existing JavaScript while the
|
|
1974
|
-
direct static route owns zero. Semantic primitives, IR kinds, compiler passes,
|
|
1975
|
-
production compiler/runtime LOC, normalization rules, adapters, runtime
|
|
1976
|
-
concepts, public APIs, and browser artifacts change by zero. `npm run check`,
|
|
1977
|
-
required-Chrome 300/300, package smoke, focused acceptance, and artifact
|
|
1978
|
-
inventory pass. No production feature changed, so no release is consumed.
|
|
1979
|
-
|
|
1980
|
-
### `0.21.1`: Compiler And Route Scale
|
|
1981
|
-
|
|
1982
|
-
- **Purpose:** measure clean/incremental compilation and artifact emission.
|
|
1983
|
-
- **Acceptance:** 100, 1,000, and separately provisioned 10,000 routes; module
|
|
1984
|
-
graph time, parse/normalize/compile/render/write time, peak RSS, output digest,
|
|
1985
|
-
and failure recovery.
|
|
1986
|
-
- **Stop condition:** projected or incomplete 10,000-route data is called a pass.
|
|
1987
|
-
- **Done condition:** repeated measurements and all material regressions are
|
|
1988
|
-
explained or fixed.
|
|
1989
|
-
|
|
1990
|
-
**Result:** opt-in internal telemetry records source reads, reachable
|
|
1991
|
-
graph discovery, TypeScript parse, normalize, compile/transform, render, and
|
|
1992
|
-
write boundaries without changing deploy output. Compile/transform excludes
|
|
1993
|
-
the measured TypeScript parse and Kudzu normalization but includes indivisible
|
|
1994
|
-
esbuild parse/transform for proven import-free modules. Render includes
|
|
1995
|
-
provisional page materialization, write includes finalization and staged-output
|
|
1996
|
-
promotion, and the end-to-end clean build is not their sum. The runner also proves that an
|
|
1997
|
-
incremental source edit matches a clean build of the changed source, compares
|
|
1998
|
-
paired incremental outputs when a baseline is supplied, names retained-session
|
|
1999
|
-
rather than incremental-only peak RSS, and fails the process when either clean
|
|
2000
|
-
or retained-session invalid-source recovery changes output. This adds no
|
|
2001
|
-
semantic primitive, compiler pass, runtime concept, public API, deploy artifact,
|
|
2002
|
-
or browser byte; production compiler/build instrumentation is 35 added and four
|
|
2003
|
-
removed lines.
|
|
2004
|
-
|
|
2005
|
-
One warm-up and three fresh-process samples pass at 100 routes / 1,000 modules /
|
|
2006
|
-
101,100 lines and 1,000 routes / 10,000 modules / 1,011,000 lines. Clean-build
|
|
2007
|
-
medians are 7,444.3 and 77,515.9 ms with 672.3 and 3,182.3 MiB peak RSS;
|
|
2008
|
-
incremental medians are 1,838.0 and 18,132.1 ms, recompiling exactly 10 modules
|
|
2009
|
-
and rendering one page in every sample. Clean and changed digests differ,
|
|
2010
|
-
incremental output equals a clean changed-source build, and clean and retained
|
|
2011
|
-
failure probes preserve then recover the expected digest. Exact phase samples,
|
|
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.
|
|
2027
|
-
|
|
2028
|
-
### `0.21.2`: Browser Performance And Memory
|
|
2029
|
-
|
|
2030
|
-
- **Purpose:** protect interaction latency and long-running stability.
|
|
2031
|
-
- **Acceptance:** initial/session bytes, list/range latency, navigation, lazy
|
|
2032
|
-
feature load, resource cleanup, repeated heap, detached DOM, cache, listeners,
|
|
2033
|
-
and handles.
|
|
2034
|
-
- **Stop condition:** smaller JavaScript is preferred over behavior parity.
|
|
2035
|
-
- **Done condition:** complete features meet declared thresholds with bounded
|
|
2036
|
-
long-session growth.
|
|
2037
|
-
|
|
2038
|
-
**Result:** closed through existing route artifacts, keyed ownership, enhanced
|
|
2039
|
-
navigation, native ESM loading, and the released endurance harness. Seven fresh
|
|
2040
|
-
Chrome profiles keep 2,000-row append, filter, restore, and reverse medians at
|
|
2041
|
-
9.6, 17.6, 84.5, and 19.4 ms against a 100 ms median alarm. Project table save
|
|
2042
|
-
and list-to-detail navigation medians are 0.9 and 4.9 ms against the same alarm;
|
|
2043
|
-
the exact session graph owns 17 JavaScript files totaling 81,200 raw / 27,885
|
|
2044
|
-
aggregate gzip bytes. The static 10,000-row document loads in a 999.8 ms median
|
|
2045
|
-
against a 2,000 ms alarm. Pagination and windowing keep the DOM at 100 rows,
|
|
2046
|
-
load in 163.1 and 251.7 ms against a 1,000 ms alarm, and change range in 18.1
|
|
2047
|
-
and 23.7 ms against a 100 ms alarm.
|
|
2048
|
-
|
|
2049
|
-
The lazy editor retains 12,982 raw / 6,153 gzip eager bytes and one 250,086 raw
|
|
2050
|
-
/ 80,890 gzip deferred CodeMirror chunk; two route owners share one native ESM
|
|
2051
|
-
module request and the static sibling remains zero JavaScript. Focused Chrome
|
|
2052
|
-
acceptance passes 3/3. The endurance gate passes five warm-ups, ten stale-
|
|
2053
|
-
prefetch races, 30 ownership cycles, and 101 navigations: editor mounts and
|
|
2054
|
-
disposals balance 71/71, browser state stays zero, documents and listeners stay
|
|
2055
|
-
at six and seven, DOM nodes move by one, and forced-GC heap grows 79,988 B under
|
|
2056
|
-
the existing 2 MiB or 15% alarm. No exception or failed request occurs. Three
|
|
2057
|
-
existing benchmark entry points now fail when their declared median budgets are
|
|
2058
|
-
exceeded; the artifact collector may name the current packet. Production source,
|
|
2059
|
-
semantic primitives, compiler passes, runtime concepts, APIs, deploy artifacts,
|
|
2060
|
-
and browser bytes change by zero. Exact samples and limitations are recorded in
|
|
2061
|
-
`PERFORMANCE.md`; no package release is consumed.
|
|
2062
|
-
|
|
2063
|
-
### `0.21.3`: Package And Release Candidate
|
|
2064
|
-
|
|
2065
|
-
- **Purpose:** verify the exact candidate as an installed product.
|
|
2066
|
-
- **Acceptance:** `npm run check`, `npm test`, required Chrome, focused
|
|
2067
|
-
benchmarks, package smoke, tarball inspection, generated application, registry
|
|
2068
|
-
dry run, docs, and release rollback procedure.
|
|
2069
|
-
- **Stop condition:** version metadata changes before the exact candidate passes.
|
|
2070
|
-
- **Done condition:** the reviewed commit is independently publishable.
|
|
2071
|
-
|
|
2072
|
-
**Result:** released as `@kudzujs/core@0.16.17` and
|
|
2073
|
-
`create-kudzu@0.1.142`. The exact versioned tree passes `npm run check`, all 301
|
|
2074
|
-
remaining tests after the application contract, package smoke, generator
|
|
2075
|
-
creation, and both registry dry runs. Tarball inspection records the expected 85
|
|
2076
|
-
core files and four generator files with no bundled dependencies. The Node 22
|
|
2077
|
-
no-browser lane initially attempted the list acceptance despite
|
|
2078
|
-
`KUDZU_SKIP_BROWSER`; that test now follows the existing skip contract while the
|
|
2079
|
-
Node 24 required-Chrome lane retains the browser acceptance.
|
|
2080
|
-
|
|
2081
|
-
Seven fresh exact-candidate Chrome profiles pass every maintained alarm. The
|
|
2082
|
-
project table-save/navigation medians are 0.7/3.6 ms; direct, pagination, and
|
|
2083
|
-
window load medians are 849.2, 166.6, and 184.5 ms; bounded range medians are
|
|
2084
|
-
13.0 and 19.7 ms. The keyed benchmark also passes all four 100 ms alarms. A
|
|
2085
|
-
fresh endurance run balances editor mounts/disposals at 71/71 across 101
|
|
2086
|
-
navigations, with zero document/listener growth, one additional DOM node, and
|
|
2087
|
-
144,172 B forced-GC heap growth under the 2 MiB alarm. Package contents preserve
|
|
2088
|
-
the existing production compiler/runtime and introduce no semantic primitive,
|
|
2089
|
-
pass, runtime concept, API, deploy artifact, or browser byte. The immutable
|
|
2090
|
-
rollback contract remains forward-only: a failed push, tag, publication, or
|
|
2091
|
-
registry verification keeps this packet active; a published npm version or tag
|
|
2092
|
-
is never moved and requires a forward-fix patch.
|
|
2093
|
-
|
|
2094
|
-
Commit `e9b33c04a7a2a382b858069910e4473800e7b70a`, tag `v0.16.17`, the
|
|
2095
|
-
[GitHub release](https://github.com/kudzujs/kudzu/releases/tag/v0.16.17), and
|
|
2096
|
-
[publish workflow](https://github.com/kudzujs/kudzu/actions/runs/33704726784)
|
|
2097
|
-
are complete. npm exposes core `0.16.17` and generator `0.1.142`; a fresh
|
|
2098
|
-
registry-generated application resolves core `0.16.17` and passes its complete
|
|
2099
|
-
TypeScript and Kudzu build check.
|
|
2100
|
-
|
|
2101
|
-
### `0.21.4`: AI Delivery Proof
|
|
2102
|
-
|
|
2103
|
-
- **Purpose:** run the final equal-condition comparison on production-shaped
|
|
2104
|
-
tasks.
|
|
2105
|
-
- **Acceptance:** highest or statistically tied success rate, lowest median cost
|
|
2106
|
-
per successful task, complete raw attempts, maintainable source, and retained
|
|
2107
|
-
browser/build advantage.
|
|
2108
|
-
- **Stop condition:** cherry-picked attempts, toy-only tasks, or unequal tooling.
|
|
2109
|
-
- **Done condition:** the evidence either authorizes `1.0.0` or names the next
|
|
2110
|
-
measured blocker without changing the release criteria.
|
|
2111
|
-
|
|
2112
|
-
The first independently reviewable evidence-integrity prerequisite is released
|
|
2113
|
-
as `@kudzujs/core@0.16.18`. A successful adapter result without its raw
|
|
2114
|
-
attribution trace previously remained eligible for the success-rate and median
|
|
2115
|
-
successful-cost denominators with synthetic zero metrics. The runner now
|
|
2116
|
-
requires the trace in the success predicate, retains that attempt as an
|
|
2117
|
-
incomplete failure, and withholds unsupported per-success claims. The focused
|
|
2118
|
-
three-test harness passes and the change adds one condition with no semantic
|
|
2119
|
-
primitive, compiler pass, runtime concept, application API, dependency, or
|
|
2120
|
-
application browser byte.
|
|
2121
|
-
|
|
2122
|
-
This prerequisite makes no framework ranking. Existing complete fixtures cover
|
|
2123
|
-
the content, forms, CRUD/shared-state, and resource/realtime task classes. The
|
|
2124
|
-
pinned public `kudzu-based-bench` storefront at commit
|
|
2125
|
-
`f2d5be1a516c539e30f7125f6870d42b1dd02ecd` remains the smallest complete paired
|
|
2126
|
-
commerce source. The next exact action is to freeze equivalent pre-task starters
|
|
2127
|
-
and complete acceptance journeys for those five classes, then run at least five
|
|
2128
|
-
interleaved attempts per framework and task under one model, tool, context, and
|
|
2129
|
-
time contract.
|
|
2130
|
-
|
|
2131
|
-
The corrected production comparison was recorded in GitHub release `v0.16.19`.
|
|
2132
|
-
Its npm workflow stopped before publication on an unrelated flaky project browser
|
|
2133
|
-
journey. The `v0.16.20` forward release passed every repository gate, but npm
|
|
2134
|
-
rejected its trusted-publishing signing certificate with HTTP 403. The immutable
|
|
2135
|
-
recovery release `@kudzujs/core@0.16.21` carries the unchanged evidence and
|
|
2136
|
-
`create-kudzu@0.1.146` targets it.
|
|
2137
|
-
The first batch is retained but excluded from ranking after hidden content/form
|
|
2138
|
-
selector assumptions and inconsistent React versions were found. Revision 2
|
|
2139
|
-
hashes the written contracts and executable acceptance, uses React 19.2.8 in all
|
|
2140
|
-
five task classes, and records Kudzu 11/25 attributable successes (44%) against
|
|
2141
|
-
React + Vite 24/25 (96%). One React realtime adapter exceeded 300 seconds without
|
|
2142
|
-
a trace and correctly remains incomplete; it was not selectively replaced.
|
|
2143
|
-
|
|
2144
|
-
The gate fails: Kudzu has no successful task result for content or commerce, so
|
|
2145
|
-
its aggregate task-token median is unavailable. React's incomplete realtime
|
|
2146
|
-
attempt also leaves its aggregate failure-inclusive cost unavailable. Kudzu keeps lower accepted browser artifacts and zero-JavaScript static
|
|
2147
|
-
siblings, but does not meet the required success-rate or cost criteria. The raw
|
|
2148
|
-
invalid and corrected attempts are published as
|
|
2149
|
-
`kudzu-ai-delivery-0.21.4-gpt-5.6-sol.tar.gz`, SHA-256
|
|
2150
|
-
`4e37d15b4c4b0cf88720a3a7743996794b2e0172dbc43d40514f944fb01bd0f8`.
|
|
2151
|
-
The next evidence-selected work must address reactive collection normalization
|
|
2152
|
-
and count reuse, then reactive text inside selected conditional branches.
|
|
2153
|
-
`1.0.0` remains unauthorized. This packet adds no semantic primitive, compiler
|
|
2154
|
-
pass, runtime concept, public API, dependency, generated behavior, or browser
|
|
2155
|
-
byte.
|
|
2156
|
-
|
|
2157
|
-
The first evidence-selected follow-up now normalizes one supported collection
|
|
2158
|
-
alias across a keyed map, a top-level `.length` count, reactive text, and a
|
|
2159
|
-
count-selected JSX branch. It reuses collection analysis plus existing binding,
|
|
2160
|
-
conditional, and keyed ownership: no semantic primitive, compiler pass, runtime
|
|
2161
|
-
concept, API, dependency, or shared-runtime byte was added. The implementation
|
|
2162
|
-
changes two existing compiler files by net 37 lines and extends one positive and
|
|
2163
|
-
one negative fixture. Required Chrome verifies count updates, empty-branch
|
|
2164
|
-
unmount, keyed remount, and retained source diagnostics; all 302 tests, package
|
|
2165
|
-
smoke, and `npm run check` pass. The exercised route ships the unchanged 36,219
|
|
2166
|
-
B shared runtime closure and 37,870 B total JavaScript including its existing
|
|
2167
|
-
route handlers. No benchmark contract or budget changes; the production AI
|
|
2168
|
-
comparison must be rerun only after the remaining selected-branch reactive-text
|
|
2169
|
-
blocker is addressed. This follow-up is released as `@kudzujs/core@0.16.22`
|
|
2170
|
-
with `create-kudzu@0.1.147`. `1.0.0` remains unauthorized.
|
|
2171
|
-
|
|
2172
|
-
The second evidence-selected follow-up now lowers reactive scalar text inside a
|
|
2173
|
-
selected conditional branch through the existing binding descriptor and
|
|
2174
|
-
conditional ownership paths. It adds no semantic primitive, compiler pass,
|
|
2175
|
-
runtime concept, API, dependency, or shared-runtime source byte; one production
|
|
2176
|
-
compiler file grows by net 11 lines. A focused fixture proves same-branch text
|
|
2177
|
-
updates and branch replacement, and required Chrome, all 302 tests, package
|
|
2178
|
-
smoke, and `npm run check` pass. The five retained commerce sources now pass
|
|
2179
|
-
their complete acceptance with `empty`, `below`, and `reached` all true and a
|
|
2180
|
-
zero-JavaScript static sibling. Their route-specific checkout handlers add
|
|
2181
|
-
147-154 transferred bytes; no runtime module or benchmark contract changes.
|
|
2182
|
-
This does not revise the published equal-condition score without a complete
|
|
2183
|
-
rerun, so `1.0.0` remains unauthorized. This follow-up is released as
|
|
2184
|
-
`@kudzujs/core@0.16.23` with `create-kudzu@0.1.148`.
|
|
2185
|
-
|
|
2186
|
-
The user-approved 2026-09-07 `0.16.24` continuation addresses the initial r3
|
|
2187
|
-
content patch's imported collection alias and direct filter-count failures.
|
|
2188
|
-
[`imported-article-search`](../../test/fixtures/imported-article-search/README.md)
|
|
2189
|
-
reproduced both failures before changes. The reduction extends existing import
|
|
2190
|
-
discovery, pure selector normalization, and count build-value lowering, with
|
|
2191
|
-
existing BindingIR/DerivedIR/KeyedBlockIR consumers and route/keyed/conditional
|
|
2192
|
-
ownership. It adds no primitive, IR kind, pass, runtime concept, API, or adapter;
|
|
2193
|
-
the two core files grow by net 39 lines. Three source variants produce identical
|
|
2194
|
-
JavaScript (32,190 raw / 12,324 gzip B) and six unsafe neighboring forms remain
|
|
2195
|
-
source-located errors. Required Chrome verifies search/count/empty transitions,
|
|
2196
|
-
retained keys, fresh remounts, and static zero-JavaScript exclusion. Check, the
|
|
2197
|
-
project ownership gate plus 308 tests, package smoke, and both package dry-runs pass.
|
|
2198
|
-
|
|
2199
|
-
The full initial-source replay passes the unchanged content acceptance and emits
|
|
2200
|
-
the same 13 JavaScript files/bytes as the earlier retained inlined workaround
|
|
2201
|
-
(55,447 raw / 20,976 gzip B). This is a source replay, not a fresh model trial or
|
|
2202
|
-
replacement benchmark score; no timing or AI-cost improvement is claimed.
|
|
2203
|
-
[`PERFORMANCE.md`](../../PERFORMANCE.md#imported-search-source-replay-2026-09-07)
|
|
2204
|
-
records commands, provenance, accounting, and limits. Preserve the original r3
|
|
2205
|
-
evidence. The release also includes the reviewed r4 protocol/adapter lifecycle
|
|
2206
|
-
work: atomic partial traces, bounded incremental output, setup-inclusive deadlines,
|
|
2207
|
-
owned process-tree termination, and incomplete timeout attribution. Two Linux
|
|
2208
|
-
lifecycle regressions protect future-run integrity; Windows termination remains
|
|
2209
|
-
untested. The frozen r4 starters stay on published `0.16.23`; old raw records are
|
|
2210
|
-
not reinterpreted. This packet ships as `@kudzujs/core@0.16.24` with
|
|
2211
|
-
`create-kudzu@0.1.149`, without authorizing `1.0.0` or a new AI performance claim.
|
|
2212
|
-
|
|
2213
|
-
## `1.0.0`: Stable Application Model
|
|
2214
|
-
|
|
2215
|
-
`1.0.0` is authorized only after every required `0.21.x` gate passes. It means:
|
|
2216
|
-
|
|
2217
|
-
- the small package-neutral application semantic model is stable;
|
|
2218
|
-
- complete production-shaped application journeys pass;
|
|
2219
|
-
- static routes retain zero JavaScript;
|
|
2220
|
-
- interactive routes retain only used capabilities;
|
|
2221
|
-
- React migration uses compatibility, normalization, adapters, and owned
|
|
2222
|
-
external UI rather than a React runtime;
|
|
2223
|
-
- browser/build/performance and long-running memory gates pass;
|
|
2224
|
-
- the equal-condition AI benchmark meets the published success and cost gates.
|
|
2225
|
-
|
|
2226
|
-
## Patch Session Procedure
|
|
2227
|
-
|
|
2228
|
-
Before implementation:
|
|
2229
|
-
|
|
2230
|
-
1. Read this plan, `MIGRATION_ROADMAP.md`, the current architecture map, and the
|
|
2231
|
-
applicable capability packet.
|
|
2232
|
-
2. Confirm the package version and inspect uncommitted work without modifying
|
|
2233
|
-
unrelated changes.
|
|
2234
|
-
3. Confirm every earlier patch is complete or explicitly replanned.
|
|
2235
|
-
4. Name the exact application journey, failing fixture, owner, producer, and
|
|
2236
|
-
consumer boundary.
|
|
2237
|
-
5. Record the baseline output, browser bytes, runtime concepts, compiler/pass
|
|
2238
|
-
LOC, and applicable benchmark.
|
|
2239
|
-
|
|
2240
|
-
During implementation:
|
|
2241
|
-
|
|
2242
|
-
1. Add the failing fixture first.
|
|
2243
|
-
2. Try native behavior and existing semantics before changing the framework.
|
|
2244
|
-
3. Keep the smallest correct patch and preserve ordinary React-shaped TSX.
|
|
2245
|
-
4. Add nearby negative diagnostics and static zero-cost exclusion.
|
|
2246
|
-
5. Do not broaden public APIs, IR, runtime, or package support beyond the packet.
|
|
2247
|
-
|
|
2248
|
-
Before release:
|
|
2249
|
-
|
|
2250
|
-
1. Run focused tests, `npm run check`, `npm test`, required Chrome, and package
|
|
2251
|
-
smoke.
|
|
2252
|
-
2. Run affected output and performance gates with at least seven interleaved
|
|
2253
|
-
measured samples where a comparison is claimed.
|
|
2254
|
-
3. Record fixtures, semantic primitives, core/pass LOC, runtime concepts,
|
|
2255
|
-
browser bytes, output digest, benchmark deltas, AI-cost effect, risks, and
|
|
2256
|
-
known limits.
|
|
2257
|
-
4. Update package version, lockfile, release notes, support documentation, and
|
|
2258
|
-
registry-facing records only on the exact accepted release commit.
|
|
2259
|
-
5. Complete the release transaction below, then advance the active status to
|
|
2260
|
-
the next patch.
|
|
2261
|
-
|
|
2262
|
-
## Release Transaction
|
|
2263
|
-
|
|
2264
|
-
Every completed patch and every new minor is a real release. A work session that
|
|
2265
|
-
does not complete its packet does not consume a version; the next session
|
|
2266
|
-
continues the same target version.
|
|
2267
|
-
|
|
2268
|
-
1. Confirm the target version is the active packet and is not already present in
|
|
2269
|
-
npm or Git tags.
|
|
2270
|
-
2. Update `package.json`, root lockfile metadata, `RELEASES.md`, README/support
|
|
2271
|
-
records, and generator metadata when the release changes generated projects.
|
|
2272
|
-
3. Run the complete release gate on the exact versioned tree: focused tests,
|
|
2273
|
-
`npm run check`, `npm test`, required Chrome, `npm run test:package`, affected
|
|
2274
|
-
benchmarks, package inspection, and `git diff --check`.
|
|
2275
|
-
4. Inspect `git status`, the complete diff, and recent release history. Stage
|
|
2276
|
-
only the intended packet and release files.
|
|
2277
|
-
5. Create one release commit using the established `Release Kudzu X.Y.Z`
|
|
2278
|
-
convention. Do not amend a rejected release commit; fix forward and create a
|
|
2279
|
-
new commit.
|
|
2280
|
-
6. Push the release commit and require its CI checks to pass.
|
|
2281
|
-
7. Create tag `vX.Y.Z` on that exact commit and push the tag. Never move or
|
|
2282
|
-
repoint a published tag.
|
|
2283
|
-
8. Publish the matching GitHub release. The existing `Publish npm` workflow
|
|
2284
|
-
checks out the tag, reruns check/test/package gates, verifies version/tag
|
|
2285
|
-
equality, publishes `@kudzujs/core` and any changed `create-kudzu`, and checks
|
|
2286
|
-
npm registry visibility.
|
|
2287
|
-
9. Require the publish workflow to pass, verify npm metadata and a fresh install
|
|
2288
|
-
manually, and record the release URL and registry versions.
|
|
2289
|
-
10. Only after commit, push, tag, GitHub release, npm publication, registry
|
|
2290
|
-
verification, and fresh-install verification succeed may the next patch
|
|
2291
|
-
become active.
|
|
2292
|
-
|
|
2293
|
-
If Git push, tag push, GitHub release, npm publication, or registry verification
|
|
2294
|
-
fails, the current packet remains active. Do not start or version the next
|
|
2295
|
-
packet. npm versions and published tags are immutable; recover with the same
|
|
2296
|
-
release transaction where possible or document and publish a forward-fix patch.
|
|
2297
|
-
|
|
2298
|
-
## Active Status
|
|
2299
|
-
|
|
2300
|
-
| Patch | Status | Next exact action | Blocker |
|
|
2301
|
-
|---|---|---|---|
|
|
2302
|
-
| `0.10.0` | Released | Preserve the published application baseline and release evidence. | None |
|
|
2303
|
-
| `0.10.1` | Released | Preserve the published state-scale evidence and explicit object-field limit. | None |
|
|
2304
|
-
| `0.10.2` | Released | Preserve the published shared-layout navigation and exact route-release evidence. | None |
|
|
2305
|
-
| `0.10.3` | Released | Preserve the published guarded persistence recipe and zero-runtime exclusion. | None |
|
|
2306
|
-
| `0.11.0` | Released | Preserve the published owned-fetch lifecycle and zero-query-runtime exclusion. | None |
|
|
2307
|
-
| `0.11.1` | Released | Preserve the published single-owner consistency and exact request-count evidence. | None |
|
|
2308
|
-
| `0.11.2` | Released | Preserve the published no-new-primitive architecture decision and zero-byte result. | None |
|
|
2309
|
-
| `0.11.3` | Released | Preserve the published optimistic rollback, duplicate prevention, navigation, and retry evidence. | None |
|
|
2310
|
-
| `0.11.4` | Released | Preserve the published bounded pagination, history, refresh, polling cleanup, and exact request-count evidence. | None |
|
|
2311
|
-
| `0.12.0` | Released | Preserve direct runtime entry, reload, rewrite, and native fallback evidence. | None |
|
|
2312
|
-
| `0.12.1` | Released | Preserve the published layout/history/focus/scroll evidence. | None |
|
|
2313
|
-
| `0.12.2` | Released | Preserve the published authentication and permission evidence. | None |
|
|
2314
|
-
| `0.12.3` | Released | Preserve the published route failure, focused retry, native fallback, and precommit retention evidence. | None |
|
|
2315
|
-
| `0.12.4` | Released | Preserve the published single-layout decision and zero-owner-chain evidence. | None |
|
|
2316
|
-
| `0.13.0` | Released | Preserve native constraints, server feedback, focused field errors, retained input, and retry evidence. | None |
|
|
2317
|
-
| `0.13.1` | Released | Preserve application-owned nested metadata, keyed row identity, release, and reset evidence. | None |
|
|
2318
|
-
| `0.13.2` | Released | Preserve multistep validation, versioned persistence, stale-save rejection, conflict retention, and reset evidence. | None |
|
|
2319
|
-
| `0.13.3` | Released | Preserve the published upload validation, cancellation, retry, route cleanup, and attachment mutation evidence. | None |
|
|
2320
|
-
| `0.14.0` | Released | Preserve native table CRUD, retained identity, keyboard access, and measured update evidence. | None |
|
|
2321
|
-
| `0.14.1` | Released | Preserve immutable object-state replacement, nested keyed identity, latest handlers, and exact row release. | None |
|
|
2322
|
-
| `0.14.2` | Released | Preserve bounded cursor loading, duplicate suppression, retry/end behavior, retained identity, and route cleanup. | None |
|
|
2323
|
-
| `0.14.3` | Released | Preserve the published 10,000-item pagination decision and measurement evidence. | None |
|
|
2324
|
-
| `0.14.4` | Closed by stop condition | Preserve pagination as the selected strategy until three independent fixtures authorize virtual ownership review. | Evidence favors pagination; zero qualifying fixtures |
|
|
2325
|
-
| `0.15.0` | Closed by native composition | Preserve the native dialog, focus, cancellation, keyed deletion, and route cleanup evidence. | No production change; no release consumed |
|
|
2326
|
-
| `0.15.1` | Released | Preserve key-scoped IDs, native Popover behavior, retained keyed identity, and route cleanup evidence. | None |
|
|
2327
|
-
| `0.15.2` | Closed by layout composition | Preserve owner-bounded queue, deduplication, dismissal, route persistence, live-region, and timer cleanup evidence. | No production change; no release consumed |
|
|
2328
|
-
| `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 |
|
|
2329
|
-
| `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 |
|
|
2330
|
-
| `0.16.1` | Released | Preserve the retained CodeMirror instance boundary, bidirectional updates, error recovery, accessibility, and exact cleanup. | None |
|
|
2331
|
-
| `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 |
|
|
2332
|
-
| `0.16.3` | Released | Preserve state-owned order, keyed identity, keyboard parity, invalid-input recovery, package disposal, and static exclusion. | None |
|
|
2333
|
-
| `0.16.4` | Released | Preserve scoped GSAP presentation, reduced-motion fallback, dependency/owner cleanup, fresh remount, and static exclusion. | None |
|
|
2334
|
-
| `0.16.5` | Released | Preserve the reproducible endurance evidence, project notification ownership, and bounded stale-prefetch cache disposal. | None |
|
|
2335
|
-
| `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 |
|
|
2336
|
-
| `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 |
|
|
2337
|
-
| `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 |
|
|
2338
|
-
| `0.18.0` | Closed by existing artifact reporting | Preserve exact route/source ownership, bytes, hashes, preload equality, zero-JavaScript controls, and bounded prefetch policy. | No production change; no release consumed |
|
|
2339
|
-
| `0.18.1` | Released as `0.16.6` | Preserve one guarded literal package edge, native module-map deduplication, exact owner cleanup, deferred artifact ownership, and static exclusion. | Patch release retained the `0.16.x` public version line |
|
|
2340
|
-
| `0.18.2` | Released as `0.16.7` | Preserve on-demand retained editor mount, bidirectional updates, failure recovery, identity, exact cleanup, cached fresh remount, and static exclusion. | Patch release retained the `0.16.x` public version line |
|
|
2341
|
-
| `0.18.3` | Released as `0.16.8` | Preserve shared deferred ownership, interaction-only loading, native document module-map deduplication, exact owner cleanup, binding-aware import validation, and static exclusion. | Patch release retained the `0.16.x` public version line |
|
|
2342
|
-
| `0.19.0` | Released as `0.16.9` | Preserve the compatibility registry, reachable source inventory, exact ranges, and package-neutral output boundary. | Patch release retained the `0.16.x` public version line |
|
|
2343
|
-
| `0.19.1` | Released as `0.16.10` | Preserve anonymous, invalid/valid login, token restore, layout-shared session reads, 401 clear, replacement navigation, and public zero-JavaScript output. | Patch release retained the `0.16.x` public version line |
|
|
2344
|
-
| `0.19.2` | Closed by existing semantics | Preserve connected auth, query, route, create/edit validation, refresh, persistence, admin deletion, logout, source retention, accessibility, and public zero-JavaScript output. | No production change; no release consumed |
|
|
2345
|
-
| `0.19.3` | Closed by existing semantics | Preserve connected Memos login, loading/error, feed, overlapping-key pagination, refresh, CRUD, reload persistence, logout, source retention, accessibility, and public zero-JavaScript output. | No production change; no release consumed |
|
|
2346
|
-
| `0.19.4` | Closed by existing effect ownership | Preserve reaction mutation, version deduplication, stale-socket rejection, reconnect, keyed identity, exact route cleanup, fresh ownership, bounded handles/listeners/timers, and public zero-JavaScript output. | No production change; no release consumed |
|
|
2347
|
-
| `0.19.5` | Deferred by stop condition | Resume only from a complete pinned Actual Budget workspace with an executable dependency graph and honest retention denominator. | Sparse acquisition omits required workspace and core packages; no compatibility claim |
|
|
2348
|
-
| `0.20.0` | Released as `0.16.11` | Preserve stable diagnostic schema/codes, authored ranges, human errors, compatibility reuse, and zero browser/output delta. | Patch release retained the `0.16.x` public version line |
|
|
2349
|
-
| `0.20.1` | Released as `0.16.12` | Preserve bounded deterministic reachable inventory, first-blocker retention, existing-record reuse, and zero browser/output delta. | Patch release retained the `0.16.x` public version line |
|
|
2350
|
-
| `0.20.2` | Released as `0.16.13` | Preserve exact emitted-route lookup, authored provenance, semantic ownership, capability/artifact byte reasons and hashes, bounded deterministic output, structured missing-route diagnostics, and zero-JavaScript explanation. | Patch release retained the `0.16.x` public version line |
|
|
2351
|
-
| `0.20.3` | Deferred by evidence gate | Resume only after recorded AI trials prove one repeated correction safe and useful with a stable diagnostic code and compiler-proven preconditions. | No recorded AI trials; no production change or release consumed |
|
|
2352
|
-
| `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 |
|
|
2353
|
-
| `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 |
|
|
2354
|
-
| `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 |
|
|
2355
|
-
| `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 |
|
|
2356
|
-
| `0.21.2` | Closed by existing semantics | Preserve initial/session/lazy bytes, keyed/range/navigation median alarms, and bounded endurance ownership evidence. | Same-revision absolute gates; structural artifact bytes are not compressed network transfer |
|
|
2357
|
-
| `0.21.3` | Released as `0.16.17` | Preserve exact package, browser, benchmark, registry, and fresh-install evidence. | One initial navigation benchmark invocation stalled at the outer timeout; its clean seven-profile rerun passed all alarms |
|
|
2358
|
-
| `0.21.4` | Measured gate failed; selected blockers released through `0.16.24` | Preserve historical raw batches and failed success/cost decision; r4 lifecycle integrity applies only to future runs. Keep `1.0.0` blocked pending a complete rerun. | Published result remains Kudzu 11/25 versus React + Vite 24/25; commerce replay passes 5/5 and original imported search replay passes with unchanged JavaScript |
|