@kudzujs/core 0.9.3 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/MIGRATION_ROADMAP.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
This document is the source of truth for Kudzu's product direction, architecture invariants, and future development order. Read it before extending React-shaped syntax or browser capabilities.
|
|
4
4
|
|
|
5
|
-
The completed `0.9.0` execution sequence is maintained in [`docs/next-architecture/0.9-semantic-compression.md`](./docs/next-architecture/0.9-semantic-compression.md), with session-level implementation records in [`docs/next-architecture/0.9-implementation-plan.md`](./docs/next-architecture/0.9-implementation-plan.md). The next authorized
|
|
5
|
+
The completed `0.9.0` execution sequence is maintained in [`docs/next-architecture/0.9-semantic-compression.md`](./docs/next-architecture/0.9-semantic-compression.md), with session-level implementation records in [`docs/next-architecture/0.9-implementation-plan.md`](./docs/next-architecture/0.9-implementation-plan.md). The next authorized execution train is [`docs/next-architecture/application-capability-release-plan.md`](./docs/next-architecture/application-capability-release-plan.md): each application-capability section owns one minor release, each independently accepted work packet owns one patch release, and the train closes with the separately gated 1.0 AI delivery proof. The completed compiler foundation and longer-term research remain in [`docs/next-architecture/large-application-ai-native-roadmap.md`](./docs/next-architecture/large-application-ai-native-roadmap.md); this document remains authoritative when selecting or accepting a migration capability.
|
|
6
6
|
|
|
7
7
|
[`GOAL_A.md`](./GOAL_A.md) and [`GOAL_B.md`](./GOAL_B.md) are completed capability-validation records. Their commerce and realtime dashboard fixtures prove general lifecycle, navigation, async-workflow, and Worker capabilities; they are not separate product verticals or future priority lists.
|
|
8
8
|
|
|
9
|
-
The post-0.9 local discovery audit of Memos, Apache Answer, and Actual Budget is recorded in [`docs/next-architecture/1.0-large-application-compatibility-audit.md`](./docs/next-architecture/1.0-large-application-compatibility-audit.md). Its passing reduced builds are not whole-application migrations. Each package-component, browser-data, router/layout, provider, and localization shape requires a separate executable evidence packet under the authorized
|
|
9
|
+
The post-0.9 local discovery audit of Memos, Apache Answer, and Actual Budget is recorded in [`docs/next-architecture/1.0-large-application-compatibility-audit.md`](./docs/next-architecture/1.0-large-application-compatibility-audit.md). Its passing reduced builds are not whole-application migrations. Each package-component, browser-data, router/layout, provider, and localization shape requires a separate executable evidence packet under the authorized application-capability release plan before implementation.
|
|
10
10
|
|
|
11
11
|
The first Apache Answer reduction is complete: one direct top-level `const match = useMatch("/exact-path")` over a named or aliased React Router import folds case-insensitively against the build-known application route. Reused relative components produce route-specific static HTML with zero browser bytes. Layout use, runtime-parameter pages, params, wildcards, query/hash patterns, trailing slashes, dynamic values, indirect calls, and pattern objects remain diagnosed.
|
|
12
12
|
|
|
@@ -53,6 +53,16 @@ Syntax compatibility does not mean reproducing React wholesale. Kudzu accepts th
|
|
|
53
53
|
|
|
54
54
|
The active 0.9 plan defines the exact comparison and release gate. Benchmark-only feature omission, unmatched accessibility, weighted scores that hide losses, and unrecorded environment differences do not count as proof.
|
|
55
55
|
|
|
56
|
+
### 0.10.0 Through 0.21.x: Application Capability Release Train
|
|
57
|
+
|
|
58
|
+
The post-0.9 train proves Kudzu as an application framework before freezing
|
|
59
|
+
1.0. Local/shared state, async/server data, routing/lifetime, forms, large
|
|
60
|
+
lists, overlays, external UI, long-lived resources, lazy loading, React
|
|
61
|
+
migration, AI tooling, and production-scale proof each own one minor release.
|
|
62
|
+
Each independently reviewable evidence packet owns one patch release. The exact
|
|
63
|
+
sequence, stop conditions, completion gates, and active status are maintained in
|
|
64
|
+
[`docs/next-architecture/application-capability-release-plan.md`](./docs/next-architecture/application-capability-release-plan.md).
|
|
65
|
+
|
|
56
66
|
### 1.0.0: Best Framework For AI-Assisted Delivery
|
|
57
67
|
|
|
58
68
|
`1.0.0` means Kudzu Semantic IR v1 is stable and Kudzu is demonstrably the best framework in the maintained AI delivery benchmark, not merely the framework with the smallest runtime.
|
package/README.md
CHANGED
|
@@ -12,9 +12,9 @@ Kudzu compiles ordinary React-shaped TypeScript and TSX into complete static HTM
|
|
|
12
12
|
|
|
13
13
|
*Watch: React-shaped TSX to static HTML and route-specific ESM in 22 seconds.*
|
|
14
14
|
|
|
15
|
-
> Experimental `0.
|
|
15
|
+
> Experimental `0.10.x`: the compiler API and supported TSX surface may change.
|
|
16
16
|
|
|
17
|
-
**Latest release: 0.
|
|
17
|
+
**Latest release: 0.10.0 - Application capability baseline.** A tracked greenfield project application now fixes the state, browser, output, and static zero-JavaScript contract used by the capability release train. Read the [release notes](./RELEASES.md#0100---application-capability-baseline), open the [release page](https://github.com/kudzujs/kudzu/releases/tag/v0.10.0), or follow the [architecture packet](./docs/next-architecture/README.md).
|
|
18
18
|
|
|
19
19
|
- [Documentation](https://kudzujs.cloud/docs)
|
|
20
20
|
- [Installation guide](https://kudzujs.cloud/docs#install)
|
package/RELEASES.md
CHANGED
|
@@ -1,5 +1,57 @@
|
|
|
1
1
|
# Kudzu Releases
|
|
2
2
|
|
|
3
|
+
## 0.10.0 - Application capability baseline
|
|
4
|
+
|
|
5
|
+
Kudzu 0.10.0 begins the application capability release train with a durable
|
|
6
|
+
greenfield project-management contract. Later state, data, routing, form, list,
|
|
7
|
+
overlay, external UI, lifecycle, lazy-loading, migration, and AI work must extend
|
|
8
|
+
this application or another explicit evidence packet rather than claim success
|
|
9
|
+
from isolated build output.
|
|
10
|
+
|
|
11
|
+
### Changed in 0.10.0
|
|
12
|
+
|
|
13
|
+
- Added tracked `/login`, `/app/projects`, and `/help` greenfield application
|
|
14
|
+
routes with a machine-readable capability contract.
|
|
15
|
+
- Reused the existing primitive state command and direct text output without a
|
|
16
|
+
compiler pass, Handler ESM, new semantic primitive, or new runtime concept.
|
|
17
|
+
- Added a dedicated browser journey for the project-state interaction and a
|
|
18
|
+
static help control that emits no JavaScript.
|
|
19
|
+
- Established the capability-by-minor and evidence-packet-by-patch release plan
|
|
20
|
+
through the `1.0.0` application and AI delivery gate.
|
|
21
|
+
- Updated `create-kudzu@0.1.104` to generate projects on
|
|
22
|
+
`@kudzujs/core@^0.10.0`.
|
|
23
|
+
|
|
24
|
+
### Output Evidence
|
|
25
|
+
|
|
26
|
+
- The greenfield fixture emits 4 deploy files, 1,970 raw bytes, 1,265 aggregate
|
|
27
|
+
gzip bytes, and deploy digest
|
|
28
|
+
`94ce7d01cac2e80823a36279294015d2f22328acaed571abb9996f8ca6171121`.
|
|
29
|
+
- `/app/projects` uses the existing 768 raw / 441 aggregate gzip byte command
|
|
30
|
+
runtime graph.
|
|
31
|
+
- `/help` emits complete HTML and 0 B JavaScript.
|
|
32
|
+
- Production semantic primitives, compiler passes, compiler LOC, and runtime
|
|
33
|
+
concepts are unchanged.
|
|
34
|
+
|
|
35
|
+
### Validation
|
|
36
|
+
|
|
37
|
+
- The focused greenfield browser contract passes in Chrome.
|
|
38
|
+
- `npm run check`, all 273 non-browser tests, all 273 required-Chrome tests, and
|
|
39
|
+
`npm run test:package` pass on the release worktree.
|
|
40
|
+
- No performance comparison is claimed because production compiler and runtime
|
|
41
|
+
sources are unchanged; the exact fixture output baseline is executable.
|
|
42
|
+
|
|
43
|
+
### Limits
|
|
44
|
+
|
|
45
|
+
This release does not claim project CRUD, authentication, server data, shared
|
|
46
|
+
layout state, or a complete large application. Those remain ordered capability
|
|
47
|
+
packets beginning with `0.10.1`.
|
|
48
|
+
|
|
49
|
+
### Upgrade
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
npm install @kudzujs/core@^0.10.0
|
|
53
|
+
```
|
|
54
|
+
|
|
3
55
|
## 0.9.3 - Large-app migration slices
|
|
4
56
|
|
|
5
57
|
Kudzu 0.9.3 adds evidence-backed compiler and source-migration paths derived
|
|
@@ -15,6 +15,8 @@ The completed `0.9.0` milestone is recorded in [`0.9-semantic-compression.md`](.
|
|
|
15
15
|
|
|
16
16
|
[`1.0-large-application-compatibility-audit.md`](./1.0-large-application-compatibility-audit.md) records the first post-0.9 probes against Memos, Apache Answer, and Actual Budget. The audit finds that reduced slices build but whole-application source retention and behavior parity do not yet pass.
|
|
17
17
|
|
|
18
|
+
[`application-capability-release-plan.md`](./application-capability-release-plan.md) is the authoritative post-0.9 execution queue. It assigns one application-capability section to each minor release and one independently accepted evidence packet to each patch release from `0.10.0` through the `1.0.0` gate. It supersedes the provisional 0.10/0.11/0.12 tool-first ordering in the completed 0.9 handoff without rewriting that historical record.
|
|
19
|
+
|
|
18
20
|
## Required Invariants
|
|
19
21
|
|
|
20
22
|
- Every route remains a complete static HTML document.
|
|
@@ -27,24 +29,25 @@ The completed `0.9.0` milestone is recorded in [`0.9-semantic-compression.md`](.
|
|
|
27
29
|
|
|
28
30
|
## Reading Order
|
|
29
31
|
|
|
30
|
-
1. [`
|
|
31
|
-
2. [`0.9-
|
|
32
|
-
3. [`0.9-
|
|
33
|
-
4. [`0.9-
|
|
34
|
-
5. [`
|
|
35
|
-
6. [`
|
|
36
|
-
7. [`
|
|
37
|
-
8. [`
|
|
38
|
-
9. [`
|
|
39
|
-
10. [`
|
|
40
|
-
11. [`
|
|
41
|
-
12. [`goal-
|
|
42
|
-
13. [`goal-
|
|
32
|
+
1. [`application-capability-release-plan.md`](./application-capability-release-plan.md): active minor/patch execution queue through `1.0.0`.
|
|
33
|
+
2. [`0.9-semantic-compression.md`](./0.9-semantic-compression.md): completed scope, evidence, and release gates.
|
|
34
|
+
3. [`0.9-implementation-plan.md`](./0.9-implementation-plan.md): detailed historical session packets, benchmark plan, reports, and release procedure.
|
|
35
|
+
4. [`0.9-baseline.md`](./0.9-baseline.md): dated architecture, pass, IR, runtime-concept, LOC, and test baseline.
|
|
36
|
+
5. [`0.9-benchmark-contracts.md`](./0.9-benchmark-contracts.md): frozen matched-content, stateful, commerce, scale, resource, and anti-gaming contracts.
|
|
37
|
+
6. [`1.0-large-application-compatibility-audit.md`](./1.0-large-application-compatibility-audit.md): local large-application migration probes, retention caveats, blockers, and authorized-protocol handoff.
|
|
38
|
+
7. [`compiler-current-architecture.md`](./compiler-current-architecture.md): exact current responsibilities and data flow.
|
|
39
|
+
8. [`performance-gates.md`](./performance-gates.md): output, build, and browser gates.
|
|
40
|
+
9. [`large-application-ai-native-roadmap.md`](./large-application-ai-native-roadmap.md): completed foundation, longer-term direction, and completion evidence.
|
|
41
|
+
10. [`goal-a-compiler-foundation.md`](./goal-a-compiler-foundation.md): completed extraction and generator foundation.
|
|
42
|
+
11. [`versioning.md`](./versioning.md): completed patch sequence and future sequencing rules.
|
|
43
|
+
12. [`goal-b-optimization-benchmarks.md`](./goal-b-optimization-benchmarks.md): active measurements, retained optimizations, and continuation rules.
|
|
44
|
+
13. [`goal-c-state-resource-research.md`](./goal-c-state-resource-research.md): research boundary only.
|
|
45
|
+
14. [`goal-d-routing-compatibility-decisions.md`](./goal-d-routing-compatibility-decisions.md): routing and islands decisions.
|
|
43
46
|
|
|
44
47
|
## Resume Checklist
|
|
45
48
|
|
|
46
49
|
- [ ] Read [`MIGRATION_ROADMAP.md`](../../MIGRATION_ROADMAP.md), [`0.9-semantic-compression.md`](./0.9-semantic-compression.md), and [`0.9-implementation-plan.md`](./0.9-implementation-plan.md) before planning migration work.
|
|
47
|
-
- [ ] Follow the
|
|
50
|
+
- [ ] Follow the active patch in [`application-capability-release-plan.md`](./application-capability-release-plan.md); treat compatibility audits as candidate-selection input, not replacement work queues.
|
|
48
51
|
- [ ] Confirm `package.json` still reports the actual current version; never infer release status from this plan.
|
|
49
52
|
- [ ] Inspect the worktree and preserve unrelated or uncommitted changes.
|
|
50
53
|
- [ ] Start later architecture work only by an explicit decision from the completed Goal A baseline.
|
|
@@ -0,0 +1,838 @@
|
|
|
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
|
+
### `0.10.2`: Shared Layout And Cross-Route State
|
|
167
|
+
|
|
168
|
+
- **Purpose:** keep workspace/session state across an explicit application
|
|
169
|
+
navigation group while resetting route-owned state.
|
|
170
|
+
- **Expected boundary:** existing SharedStateIR, layout state IDs, route release,
|
|
171
|
+
and native fallback.
|
|
172
|
+
- **Acceptance:** workspace selection survives project/list/detail transitions;
|
|
173
|
+
route drafts reset; reload behavior is explicit; a separate route group does
|
|
174
|
+
not receive the shared state.
|
|
175
|
+
- **Stop condition:** implementation requires a document-global store or SPA
|
|
176
|
+
router.
|
|
177
|
+
- **Done condition:** state lifetime and disposal are exact in browser tests and
|
|
178
|
+
static routes receive no shared-state runtime.
|
|
179
|
+
|
|
180
|
+
### `0.10.3`: Persistence Recipe And State Release
|
|
181
|
+
|
|
182
|
+
- **Purpose:** prove URL, storage, and server-backed persistence without adding a
|
|
183
|
+
persistence framework.
|
|
184
|
+
- **Expected boundary:** application-owned effects and Web Storage.
|
|
185
|
+
- **Acceptance:** guarded restore, schema/version failure fallback, write after
|
|
186
|
+
state changes, logout clear, conditional/keyed release, and fresh remount.
|
|
187
|
+
- **Stop condition:** a generic persistence API is proposed without another
|
|
188
|
+
independent application requirement.
|
|
189
|
+
- **Done condition:** deterministic static fallback and browser recovery pass
|
|
190
|
+
with no storage runtime in unused routes.
|
|
191
|
+
|
|
192
|
+
## `0.11.x`: Async And Server Data
|
|
193
|
+
|
|
194
|
+
### `0.11.0`: Owned Fetch Lifecycle
|
|
195
|
+
|
|
196
|
+
- **Purpose:** establish the greenfield loading/error/data/refetch baseline.
|
|
197
|
+
- **Expected boundary:** existing EffectIR, ordinary state, and native `fetch`.
|
|
198
|
+
- **Acceptance:** delayed stale response loses state authority, HTTP failure is
|
|
199
|
+
accessible, explicit refetch recovers, route removal blocks late writes, and
|
|
200
|
+
authored cancellation is tested where required.
|
|
201
|
+
- **Stop condition:** a query cache is added to implement one request.
|
|
202
|
+
- **Done condition:** the project list journey passes and `/help` stays zero-JS.
|
|
203
|
+
|
|
204
|
+
### `0.11.1`: List And Detail Data Consistency Evidence
|
|
205
|
+
|
|
206
|
+
- **Purpose:** expose the first real multi-consumer coordination limit.
|
|
207
|
+
- **Expected boundary:** layout shared state plus existing effects first.
|
|
208
|
+
- **Acceptance:** project list and detail observe one mutation, duplicate
|
|
209
|
+
requests are counted, route changes and refresh are deterministic, and all
|
|
210
|
+
current limitations are machine-recorded.
|
|
211
|
+
- **Stop condition:** the fixture invents package-shaped query semantics not
|
|
212
|
+
required by the user journey.
|
|
213
|
+
- **Done condition:** existing composition is accepted or the smallest repeated
|
|
214
|
+
missing coordination contract is isolated.
|
|
215
|
+
|
|
216
|
+
### `0.11.2`: Shared Request Coordination
|
|
217
|
+
|
|
218
|
+
- **Purpose:** implement only the deduplication, subscriber, and invalidation
|
|
219
|
+
semantics authorized by `0.11.1` and two additional independent fixtures.
|
|
220
|
+
- **Expected boundary:** package-neutral application semantics; no TanStack,
|
|
221
|
+
SWR, Provider, retry scheduler, or public query API by default.
|
|
222
|
+
- **Acceptance:** one in-flight request per key, exact subscriber ownership,
|
|
223
|
+
invalidation after mutation, route/layout disposal, bounded retention, and
|
|
224
|
+
static exclusion.
|
|
225
|
+
- **Stop condition:** three unrelated fixtures do not require the same semantic
|
|
226
|
+
primitive, or ordinary shared state remains sufficient.
|
|
227
|
+
- **Done condition:** architecture review records the reused or new primitive,
|
|
228
|
+
runtime bytes, cache bound, and cleanup behavior.
|
|
229
|
+
|
|
230
|
+
### `0.11.3`: Mutation, Optimistic Update, And Rollback
|
|
231
|
+
|
|
232
|
+
- **Purpose:** complete issue create/edit/delete behavior under failure.
|
|
233
|
+
- **Expected boundary:** immediate state setters and existing shared data
|
|
234
|
+
coordination; a transaction primitive is evidence-gated.
|
|
235
|
+
- **Acceptance:** optimistic list/detail update, server rejection, exact
|
|
236
|
+
rollback, duplicate-submit prevention, retained row identity, and accessible
|
|
237
|
+
error state.
|
|
238
|
+
- **Stop condition:** generic transactions are proposed for a single-owner
|
|
239
|
+
handler.
|
|
240
|
+
- **Done condition:** data integrity survives success, failure, navigation, and
|
|
241
|
+
retry.
|
|
242
|
+
|
|
243
|
+
### `0.11.4`: Pagination, Refresh, And Polling Policy
|
|
244
|
+
|
|
245
|
+
- **Purpose:** complete bounded server-data loading before infinite data work.
|
|
246
|
+
- **Expected boundary:** URL signals, effects, native timers, and visibility
|
|
247
|
+
events.
|
|
248
|
+
- **Acceptance:** page/filter synchronization, back/forward, refresh, optional
|
|
249
|
+
polling cleanup, no duplicate work, and bounded retained results.
|
|
250
|
+
- **Stop condition:** background policy becomes a universal scheduler without
|
|
251
|
+
repeated evidence.
|
|
252
|
+
- **Done condition:** the exact owner and network behavior are measured and
|
|
253
|
+
documented.
|
|
254
|
+
|
|
255
|
+
## `0.12.x`: Routing And Application Lifetime
|
|
256
|
+
|
|
257
|
+
### `0.12.0`: Project Route Shell And Runtime Parameters
|
|
258
|
+
|
|
259
|
+
- **Purpose:** prove directly addressable project and issue routes.
|
|
260
|
+
- **Expected boundary:** file routes, runtime parameters, complete HTML, and
|
|
261
|
+
native navigation.
|
|
262
|
+
- **Acceptance:** direct entry, reload, invalid parameter rejection, project to
|
|
263
|
+
issue navigation, and standalone fallback.
|
|
264
|
+
- **Stop condition:** an SPA route registry is introduced.
|
|
265
|
+
- **Done condition:** all target routes are addressable without a browser router.
|
|
266
|
+
|
|
267
|
+
### `0.12.1`: Shared Layout, History, Focus, And Scroll
|
|
268
|
+
|
|
269
|
+
- **Purpose:** complete the accepted same-document application group behavior.
|
|
270
|
+
- **Expected boundary:** existing navigation runtime and layout/route lifetime.
|
|
271
|
+
- **Acceptance:** back/forward, retained layout state, route cleanup, title/live
|
|
272
|
+
announcement, focus destination, hash behavior, and explicit scroll policy.
|
|
273
|
+
- **Stop condition:** browser-native navigation is weakened for routes outside
|
|
274
|
+
the approved group.
|
|
275
|
+
- **Done condition:** keyboard and browser-history journeys pass with native
|
|
276
|
+
recovery.
|
|
277
|
+
|
|
278
|
+
### `0.12.2`: Authentication And Permission Boundary
|
|
279
|
+
|
|
280
|
+
- **Purpose:** complete login, restore, 401, logout, and permission-aware UI.
|
|
281
|
+
- **Expected boundary:** shared layout state, owned fetch, storage, and server or
|
|
282
|
+
host authorization.
|
|
283
|
+
- **Acceptance:** invalid and valid login, reload restoration, direct protected
|
|
284
|
+
entry, role-aware controls, server rejection, token clear, and logout.
|
|
285
|
+
- **Stop condition:** client conditional rendering is presented as a security
|
|
286
|
+
boundary.
|
|
287
|
+
- **Done condition:** server authorization and client UX responsibilities are
|
|
288
|
+
executable and explicit.
|
|
289
|
+
|
|
290
|
+
### `0.12.3`: Route Failure And Restoration Policy
|
|
291
|
+
|
|
292
|
+
- **Purpose:** decide application-visible handling of navigation/data failures.
|
|
293
|
+
- **Expected boundary:** native fallback and application-owned error UI first.
|
|
294
|
+
- **Acceptance:** invalid document, asset failure, offline/error state, retry,
|
|
295
|
+
focus restoration, and no half-replaced route.
|
|
296
|
+
- **Stop condition:** a generic React-style error-boundary renderer is required.
|
|
297
|
+
- **Done condition:** every failure leaves a valid document and recoverable
|
|
298
|
+
navigation path.
|
|
299
|
+
|
|
300
|
+
### `0.12.4`: Nested Layout Evidence Decision
|
|
301
|
+
|
|
302
|
+
- **Purpose:** determine whether multiple independently retained layout owners
|
|
303
|
+
are required.
|
|
304
|
+
- **Acceptance:** at least three unrelated application routes demonstrate the
|
|
305
|
+
same lifetime that one shared layout plus static composition cannot express.
|
|
306
|
+
- **Stop condition:** route nesting is only a source-organization preference.
|
|
307
|
+
- **Done condition:** either existing layout composition is accepted or a
|
|
308
|
+
minimal layout-owner chain is approved with explicit disposal order.
|
|
309
|
+
|
|
310
|
+
## `0.13.x`: Forms
|
|
311
|
+
|
|
312
|
+
### `0.13.0`: Production Form And Server Validation
|
|
313
|
+
|
|
314
|
+
- **Purpose:** complete issue creation with native constraints and server errors.
|
|
315
|
+
- **Expected boundary:** native form, FormData, state, and async handler.
|
|
316
|
+
- **Acceptance:** keyboard submit, native constraints, pending state, field and
|
|
317
|
+
form errors, retry, focus/ARIA linkage, and retained valid input.
|
|
318
|
+
- **Stop condition:** React Hook Form is reproduced.
|
|
319
|
+
- **Done condition:** complete accessible create/edit behavior passes without a
|
|
320
|
+
form runtime.
|
|
321
|
+
|
|
322
|
+
### `0.13.1`: Nested Fields, Field Arrays, Dirty, And Touched
|
|
323
|
+
|
|
324
|
+
- **Purpose:** determine which form metadata needs framework support.
|
|
325
|
+
- **Expected boundary:** object/array state and keyed rows first.
|
|
326
|
+
- **Acceptance:** dynamic assignee/checklist rows, reorder/remove, conditional
|
|
327
|
+
fields, dirty/touched display, reset, and exact row identity.
|
|
328
|
+
- **Stop condition:** a registration/proxy runtime is added before three
|
|
329
|
+
independent forms require the same metadata graph.
|
|
330
|
+
- **Done condition:** application composition is accepted or the smallest
|
|
331
|
+
repeated metadata semantic is isolated.
|
|
332
|
+
|
|
333
|
+
### `0.13.2`: Multistep Draft And Autosave
|
|
334
|
+
|
|
335
|
+
- **Purpose:** prove draft persistence across steps and failures.
|
|
336
|
+
- **Expected boundary:** routes or conditionals, state, dependency effects,
|
|
337
|
+
debounce cleanup, and storage/server persistence.
|
|
338
|
+
- **Acceptance:** step navigation, validation gate, debounced save, stale-save
|
|
339
|
+
rejection, reload restore, reset, and conflict/error state.
|
|
340
|
+
- **Stop condition:** a wizard or autosave scheduler is added for one form.
|
|
341
|
+
- **Done condition:** no data loss occurs across navigation, reload, or failure.
|
|
342
|
+
|
|
343
|
+
### `0.13.3`: File Upload Boundary
|
|
344
|
+
|
|
345
|
+
- **Purpose:** move beyond local file reading to a real upload lifecycle.
|
|
346
|
+
- **Expected boundary:** native input, FormData/fetch or a proven browser API.
|
|
347
|
+
- **Acceptance:** type/size validation, progress when the selected transport can
|
|
348
|
+
expose it, cancellation, failure/retry, route departure, and successful
|
|
349
|
+
attachment mutation.
|
|
350
|
+
- **Stop condition:** chunking/resume/background upload is added without a real
|
|
351
|
+
application requirement.
|
|
352
|
+
- **Done condition:** the supported transport and unsupported progress/resume
|
|
353
|
+
boundary are explicit and tested.
|
|
354
|
+
|
|
355
|
+
## `0.14.x`: Lists, Tables, And Virtualization
|
|
356
|
+
|
|
357
|
+
### `0.14.0`: Project Table CRUD And Identity
|
|
358
|
+
|
|
359
|
+
- **Purpose:** establish the production table baseline.
|
|
360
|
+
- **Expected boundary:** existing keyed list runtime and valid table structure.
|
|
361
|
+
- **Acceptance:** insert, update, delete, reorder, sort, filter, selection,
|
|
362
|
+
row-local edit state, keyboard access, and retained DOM identity.
|
|
363
|
+
- **Stop condition:** a data-grid runtime is introduced for ordinary tables.
|
|
364
|
+
- **Done condition:** complete CRUD behavior passes with measured update latency.
|
|
365
|
+
|
|
366
|
+
### `0.14.1`: Nested And Object-State Collections
|
|
367
|
+
|
|
368
|
+
- **Purpose:** prove project/group/issue/checklist nesting from ordinary object
|
|
369
|
+
state without authored field state.
|
|
370
|
+
- **Expected boundary:** existing object-property links and nested KeyedBlockIR.
|
|
371
|
+
- **Acceptance:** replacement, nested insertion/removal/reorder, latest handlers,
|
|
372
|
+
row cleanup, invalid-shape rejection, and static sibling exclusion.
|
|
373
|
+
- **Stop condition:** dynamic property paths or mutation require generic runtime
|
|
374
|
+
object observation.
|
|
375
|
+
- **Done condition:** direct immutable paths cover the application journey and
|
|
376
|
+
nearby dynamic forms fail clearly.
|
|
377
|
+
|
|
378
|
+
### `0.14.2`: Infinite Loading Composition
|
|
379
|
+
|
|
380
|
+
- **Purpose:** prove sentinel-driven incremental loading before virtualization.
|
|
381
|
+
- **Expected boundary:** IntersectionObserver, owned fetch, append, keyed list.
|
|
382
|
+
- **Acceptance:** cursor progression, duplicate suppression, end/error/retry,
|
|
383
|
+
route cleanup, retained identity, and bounded result policy.
|
|
384
|
+
- **Stop condition:** infinite-query or observer runtime is added for one list.
|
|
385
|
+
- **Done condition:** the full journey passes with explicit network and memory
|
|
386
|
+
bounds.
|
|
387
|
+
|
|
388
|
+
### `0.14.3`: 10,000-Item Browser Decision
|
|
389
|
+
|
|
390
|
+
- **Purpose:** measure direct DOM, pagination, and windowing alternatives.
|
|
391
|
+
- **Acceptance:** equivalent behavior, keyboard access, edit identity, scroll
|
|
392
|
+
latency, DOM count, heap, and update latency across alternatives.
|
|
393
|
+
- **Stop condition:** a virtualization result is claimed without equivalent
|
|
394
|
+
behavior or repeated samples.
|
|
395
|
+
- **Done condition:** the selected strategy and thresholds are recorded without
|
|
396
|
+
assuming direct 10,000-row rendering is acceptable.
|
|
397
|
+
|
|
398
|
+
### `0.14.4`: Virtual Range Ownership
|
|
399
|
+
|
|
400
|
+
- **Purpose:** implement bounded DOM only if `0.14.3` and three independent
|
|
401
|
+
fixtures authorize it.
|
|
402
|
+
- **Expected boundary:** keyed ownership extended by a minimal visible-range
|
|
403
|
+
owner; no general component renderer.
|
|
404
|
+
- **Acceptance:** spacer/measurement behavior, retained key state, keyboard and
|
|
405
|
+
focus, dynamic row height policy, cleanup, and bounded heap.
|
|
406
|
+
- **Stop condition:** evidence favors pagination or native containment.
|
|
407
|
+
- **Done condition:** range semantics are package-neutral, optional, measured,
|
|
408
|
+
and absent from non-virtual routes.
|
|
409
|
+
|
|
410
|
+
## `0.15.x`: Overlay And Layer Ownership
|
|
411
|
+
|
|
412
|
+
### `0.15.0`: Native Dialog Baseline
|
|
413
|
+
|
|
414
|
+
- **Purpose:** use browser top-layer semantics for destructive issue actions.
|
|
415
|
+
- **Acceptance:** initial focus, Escape/cancel, confirm, trigger focus restore,
|
|
416
|
+
inert background, route cleanup, and static exclusion.
|
|
417
|
+
- **Stop condition:** a custom modal/focus-trap runtime replaces `<dialog>`.
|
|
418
|
+
- **Done condition:** project delete and edit confirmation pass accessibly.
|
|
419
|
+
|
|
420
|
+
### `0.15.1`: Popover, Dropdown, And Menu Behavior
|
|
421
|
+
|
|
422
|
+
- **Purpose:** establish the native-first non-modal overlay boundary.
|
|
423
|
+
- **Expected boundary:** native Popover where available, ordinary state/events,
|
|
424
|
+
and owned listeners.
|
|
425
|
+
- **Acceptance:** positioning policy, outside click, Escape, trigger restore,
|
|
426
|
+
roving keyboard behavior where menu semantics apply, and route cleanup.
|
|
427
|
+
- **Stop condition:** package Portal/Slot reconciliation enters the runtime.
|
|
428
|
+
- **Done condition:** supported native and custom boundaries are explicit.
|
|
429
|
+
|
|
430
|
+
### `0.15.2`: Toast And Notification Ownership
|
|
431
|
+
|
|
432
|
+
- **Purpose:** provide application feedback across route mutations.
|
|
433
|
+
- **Expected boundary:** layout state, keyed list, timer effects, and live region.
|
|
434
|
+
- **Acceptance:** queue, deduplication, timeout, pause/focus behavior if required,
|
|
435
|
+
dismissal, route persistence, announcement, and disposal.
|
|
436
|
+
- **Stop condition:** a global scheduler is added before ordinary composition is
|
|
437
|
+
shown insufficient.
|
|
438
|
+
- **Done condition:** notifications remain owner-bounded and absent from unused
|
|
439
|
+
route output.
|
|
440
|
+
|
|
441
|
+
### `0.15.3`: Layer Owner Decision
|
|
442
|
+
|
|
443
|
+
- **Purpose:** decide whether logical ownership of DOM rendered outside its
|
|
444
|
+
authored range is necessary.
|
|
445
|
+
- **Acceptance:** three independent overlay fixtures fail native top-layer and
|
|
446
|
+
in-place composition for the same reason.
|
|
447
|
+
- **Stop condition:** the request is React Portal source compatibility alone.
|
|
448
|
+
- **Done condition:** no new concept is added, or a minimal owner edge with exact
|
|
449
|
+
cleanup/focus order is approved.
|
|
450
|
+
|
|
451
|
+
## `0.16.x`: External Complex UI
|
|
452
|
+
|
|
453
|
+
### `0.16.0`: Bounded External UI Contract
|
|
454
|
+
|
|
455
|
+
- **Purpose:** define and prove `mount`, `update`, `dispose`, owner, lifetime, and
|
|
456
|
+
route-specific assets without a React island.
|
|
457
|
+
- **Expected boundary:** DOM ref plus owned effect first.
|
|
458
|
+
- **Acceptance:** a small imperative package creates and disposes one real DOM or
|
|
459
|
+
canvas instance; static siblings exclude it.
|
|
460
|
+
- **Stop condition:** the package requires React reconciliation.
|
|
461
|
+
- **Done condition:** package ownership remains inside effect/handler ESM and no
|
|
462
|
+
generic widget runtime is added.
|
|
463
|
+
|
|
464
|
+
### `0.16.1`: Real Editor Lifecycle
|
|
465
|
+
|
|
466
|
+
- **Purpose:** integrate one real CodeMirror-class editor.
|
|
467
|
+
- **Acceptance:** mount, initial value, application-state update, editor-to-state
|
|
468
|
+
update, dependency changes, route disposal, remount, errors, and accessibility.
|
|
469
|
+
- **Stop condition:** preserving the React wrapper requires a React island.
|
|
470
|
+
- **Done condition:** the native package owns its DOM and Kudzu owns only its
|
|
471
|
+
bounded lifecycle.
|
|
472
|
+
|
|
473
|
+
### `0.16.2`: Chart And Map Lifecycle
|
|
474
|
+
|
|
475
|
+
- **Purpose:** validate the same contract against unrelated canvas/SVG/map DOM.
|
|
476
|
+
- **Acceptance:** resize/data update, listener/source cleanup, route transition,
|
|
477
|
+
retained instance where required, and asset exclusion.
|
|
478
|
+
- **Stop condition:** package-specific concepts enter generic IR/runtime.
|
|
479
|
+
- **Done condition:** one lifecycle model covers editor and chart/map evidence.
|
|
480
|
+
|
|
481
|
+
### `0.16.3`: Grid And Drag/Drop Decision
|
|
482
|
+
|
|
483
|
+
- **Purpose:** test external data-grid or drag engine ownership against keyed
|
|
484
|
+
Kudzu state.
|
|
485
|
+
- **Acceptance:** keyboard equivalent, reorder/mutation, state synchronization,
|
|
486
|
+
package disposal, and failure recovery.
|
|
487
|
+
- **Stop condition:** two independent renderers attempt to own the same DOM.
|
|
488
|
+
- **Done condition:** either bounded ownership is proven or the package is
|
|
489
|
+
explicitly unsupported with a migration path.
|
|
490
|
+
|
|
491
|
+
## `0.17.x`: Long-Lived Applications
|
|
492
|
+
|
|
493
|
+
### `0.17.0`: Endurance Harness
|
|
494
|
+
|
|
495
|
+
- **Purpose:** make long-session correctness locally reproducible.
|
|
496
|
+
- **Expected files:** a dedicated browser soak harness and machine-readable heap,
|
|
497
|
+
listener, resource, DOM, and navigation counters.
|
|
498
|
+
- **Acceptance:** repeated route, conditional, keyed, dialog, and editor cycles;
|
|
499
|
+
raw traces are retained.
|
|
500
|
+
- **Stop condition:** only a short synthetic timing loop is measured.
|
|
501
|
+
- **Done condition:** failures identify the owner that retained memory or work.
|
|
502
|
+
|
|
503
|
+
### `0.17.1`: WebSocket Application Journey
|
|
504
|
+
|
|
505
|
+
- **Purpose:** move from isolated fake socket ownership to project notifications.
|
|
506
|
+
- **Acceptance:** connect, message, keyed update, reconnect, stale socket
|
|
507
|
+
rejection, route/layout lifetime, offline/error state, and exact cleanup.
|
|
508
|
+
- **Stop condition:** a shared transport runtime is added for one consumer.
|
|
509
|
+
- **Done condition:** repeated navigation balances every listener, timer, and
|
|
510
|
+
socket handle.
|
|
511
|
+
|
|
512
|
+
### `0.17.2`: Shared SSE/Transport Decision
|
|
513
|
+
|
|
514
|
+
- **Purpose:** test multiple independently mounted consumers, replay, and
|
|
515
|
+
reconnect against existing layout effects/shared state.
|
|
516
|
+
- **Acceptance:** subscription add/remove, one transport, replay ordering,
|
|
517
|
+
reconnect, consumer removal, final close, and bounded history.
|
|
518
|
+
- **Stop condition:** fewer than three independent applications require the same
|
|
519
|
+
shared transport semantics.
|
|
520
|
+
- **Done condition:** existing composition passes or a minimal transport owner is
|
|
521
|
+
architecture-approved.
|
|
522
|
+
|
|
523
|
+
### `0.17.3`: Memory And Disposal Gate
|
|
524
|
+
|
|
525
|
+
- **Purpose:** close document/layout/route/range/external-instance memory risks.
|
|
526
|
+
- **Acceptance:** long repeated journeys show bounded heap, DOM, prefetch cache,
|
|
527
|
+
resource handles, listener counts, and state maps.
|
|
528
|
+
- **Stop condition:** undocumented browser GC timing is presented as exact proof.
|
|
529
|
+
- **Done condition:** retained growth has a declared bound and repeated samples
|
|
530
|
+
pass the agreed threshold.
|
|
531
|
+
|
|
532
|
+
## `0.18.x`: Lazy Loading And Code Splitting
|
|
533
|
+
|
|
534
|
+
### `0.18.0`: Route And Feature Artifact Baseline
|
|
535
|
+
|
|
536
|
+
- **Purpose:** record current route-specific ESM, shared chunks, preload, Worker,
|
|
537
|
+
CSS, and navigation prefetch behavior.
|
|
538
|
+
- **Expected boundary:** existing RouteBuildRecord and artifact report.
|
|
539
|
+
- **Acceptance:** exact source-to-artifact ownership and bytes for the greenfield
|
|
540
|
+
app, editor, Answer, and Memos routes.
|
|
541
|
+
- **Stop condition:** a new loader is designed before the current graph is
|
|
542
|
+
measured.
|
|
543
|
+
- **Done condition:** every eager dependency has a structural reason.
|
|
544
|
+
|
|
545
|
+
### `0.18.1`: Bounded Lazy Capability Import
|
|
546
|
+
|
|
547
|
+
- **Purpose:** permit one statically analyzable feature dependency to load only
|
|
548
|
+
when its owner requests it.
|
|
549
|
+
- **Expected boundary:** validated static dynamic-import edge, route artifact
|
|
550
|
+
closure, owner token, and native ESM import.
|
|
551
|
+
- **Acceptance:** exact specifier, no arbitrary graph escape, deduplicated load,
|
|
552
|
+
error/retry, owner release, and static exclusion.
|
|
553
|
+
- **Stop condition:** arbitrary dynamic imports or lazy component rendering are
|
|
554
|
+
required.
|
|
555
|
+
- **Done condition:** the feature loader is capability-specific, not a component
|
|
556
|
+
runtime.
|
|
557
|
+
|
|
558
|
+
### `0.18.2`: Lazy Editor Journey
|
|
559
|
+
|
|
560
|
+
- **Purpose:** apply `0.18.1` to the real editor.
|
|
561
|
+
- **Acceptance:** editor package absent before activation, loaded once on demand,
|
|
562
|
+
mount/update/dispose behavior unchanged, failure recoverable, and revisit
|
|
563
|
+
semantics explicit.
|
|
564
|
+
- **Stop condition:** package evaluation must occur during build rendering.
|
|
565
|
+
- **Done condition:** initial route bytes fall by the exact deferred package
|
|
566
|
+
graph without losing behavior.
|
|
567
|
+
|
|
568
|
+
### `0.18.3`: Shared Chunks And Prefetch Policy
|
|
569
|
+
|
|
570
|
+
- **Purpose:** avoid duplicate large feature graphs and define optional preload.
|
|
571
|
+
- **Acceptance:** shared chunk ownership, no duplicate fetch, route/interaction
|
|
572
|
+
prefetch policy, cache bound, cancellation limits, and output report.
|
|
573
|
+
- **Stop condition:** all features are globally prefetched.
|
|
574
|
+
- **Done condition:** policy minimizes unused transfer while meeting accepted
|
|
575
|
+
interaction latency.
|
|
576
|
+
|
|
577
|
+
## `0.19.x`: React Ecosystem Migration
|
|
578
|
+
|
|
579
|
+
### `0.19.0`: Compatibility Boundary And Inventory
|
|
580
|
+
|
|
581
|
+
- **Purpose:** centralize package recognition and compatibility provenance without
|
|
582
|
+
changing semantic IR or browser output.
|
|
583
|
+
- **Expected files:** focused compatibility metadata/registry, current passes,
|
|
584
|
+
project report; no public plugin API.
|
|
585
|
+
- **Acceptance:** Native, Compiled, Normalized, Adapter, Owned External UI,
|
|
586
|
+
Partial, and Unsupported sites are deterministic and source-located.
|
|
587
|
+
- **Stop condition:** package origin enters ModuleIR, RouteIR, codegen, or runtime.
|
|
588
|
+
- **Done condition:** existing React Router, Bootstrap, Zustand, and browser
|
|
589
|
+
normalizations preserve output and diagnostics.
|
|
590
|
+
|
|
591
|
+
### `0.19.1`: Apache Answer Authentication Journey
|
|
592
|
+
|
|
593
|
+
- **Purpose:** promote the existing build-only auth fixture to browser evidence.
|
|
594
|
+
- **Acceptance:** anonymous, invalid login, valid login, token restore, shared
|
|
595
|
+
header/settings, 401 clear, replacement navigation, public zero-JS sibling.
|
|
596
|
+
- **Stop condition:** client UI is treated as authorization.
|
|
597
|
+
- **Done condition:** the complete journey passes against a deterministic server.
|
|
598
|
+
|
|
599
|
+
### `0.19.2`: Apache Answer Connected Authoring Journey
|
|
600
|
+
|
|
601
|
+
- **Purpose:** connect query, route, detail, create/edit, validation, mutation,
|
|
602
|
+
refresh, admin, and logout.
|
|
603
|
+
- **Acceptance:** behavior, accessibility, persistence, errors, navigation,
|
|
604
|
+
source retention, and output all pass.
|
|
605
|
+
- **Stop condition:** fixture-only compiler semantics or broad package runtime is
|
|
606
|
+
introduced.
|
|
607
|
+
- **Done condition:** this is a connected browser journey, not a whole-app claim.
|
|
608
|
+
|
|
609
|
+
### `0.19.3`: Memos Feed And CRUD Journey
|
|
610
|
+
|
|
611
|
+
- **Purpose:** establish the first durable Memos application slice.
|
|
612
|
+
- **Acceptance:** login, loading/error, feed, pagination, create/edit/delete,
|
|
613
|
+
retained memo identity, refresh, and logout.
|
|
614
|
+
- **Stop condition:** outline-only or static feed output is presented as Memos
|
|
615
|
+
migration.
|
|
616
|
+
- **Done condition:** pinned upstream provenance and exact retained source are
|
|
617
|
+
recorded.
|
|
618
|
+
|
|
619
|
+
### `0.19.4`: Memos Realtime Journey
|
|
620
|
+
|
|
621
|
+
- **Purpose:** add reaction and realtime refresh using the accepted long-lived
|
|
622
|
+
transport model.
|
|
623
|
+
- **Acceptance:** mutation, server event, deduplication, reconnect, stale event
|
|
624
|
+
rejection, route cleanup, and memory gate.
|
|
625
|
+
- **Stop condition:** a query or SSE package runtime is copied wholesale.
|
|
626
|
+
- **Done condition:** browser and endurance acceptance pass.
|
|
627
|
+
|
|
628
|
+
### `0.19.5`: Actual Budget Intake Decision
|
|
629
|
+
|
|
630
|
+
- **Purpose:** determine whether a complete, legally and technically usable
|
|
631
|
+
workspace can become the third application proof.
|
|
632
|
+
- **Acceptance:** pinned source, install/build path, dependency inventory, first
|
|
633
|
+
executable user journey, and honest source-retention denominator.
|
|
634
|
+
- **Stop condition:** workspace dependencies or core packages remain absent.
|
|
635
|
+
- **Done condition:** a later packet is authorized, or deferral is recorded with
|
|
636
|
+
no compatibility claim.
|
|
637
|
+
|
|
638
|
+
## `0.20.x`: AI Tooling And Delivery Cost
|
|
639
|
+
|
|
640
|
+
### `0.20.0`: Structured Diagnostics
|
|
641
|
+
|
|
642
|
+
- **Purpose:** expose stable machine-readable errors from the existing compiler.
|
|
643
|
+
- **Acceptance:** version, code, stage, severity, source range, message,
|
|
644
|
+
compatibility class, and safe suggestion; human diagnostics remain useful.
|
|
645
|
+
- **Stop condition:** diagnostic codes expose pass filenames or unstable IR.
|
|
646
|
+
- **Done condition:** agents no longer parse message substrings for maintained
|
|
647
|
+
fixtures.
|
|
648
|
+
|
|
649
|
+
### `0.20.1`: `kudzu inspect --json`
|
|
650
|
+
|
|
651
|
+
- **Purpose:** expose reachable application and compatibility inventory.
|
|
652
|
+
- **Acceptance:** filtered module/route/package/capability/owner/blocker facts,
|
|
653
|
+
deterministic order, schema version, and large-project context bound.
|
|
654
|
+
- **Stop condition:** the command builds a second analyzer or dumps full raw IR.
|
|
655
|
+
- **Done condition:** the first blocker can be selected without reading hundreds
|
|
656
|
+
of source or dependency files.
|
|
657
|
+
|
|
658
|
+
### `0.20.2`: `kudzu explain --route`
|
|
659
|
+
|
|
660
|
+
- **Purpose:** trace one authored route to its selected browser artifacts.
|
|
661
|
+
- **Acceptance:** source site, normalization provenance, semantic owner,
|
|
662
|
+
capability, entry/chunk/style/Worker, byte reason, and zero-JS explanation.
|
|
663
|
+
- **Stop condition:** a second artifact graph is introduced.
|
|
664
|
+
- **Done condition:** existing route records and artifact reports answer the
|
|
665
|
+
query with bounded output.
|
|
666
|
+
|
|
667
|
+
### `0.20.3`: Deterministic Normalize And Fix
|
|
668
|
+
|
|
669
|
+
- **Purpose:** automate only edits proven safe and useful by recorded AI trials.
|
|
670
|
+
- **Acceptance:** check/preview/write modes, exact ranges, idempotence, comments
|
|
671
|
+
retained, no unrelated formatting, and byte-equivalent output.
|
|
672
|
+
- **Stop condition:** canonical compiler source replaces ordinary authored TSX.
|
|
673
|
+
- **Done condition:** each fix has one diagnostic code and explicit preconditions.
|
|
674
|
+
|
|
675
|
+
### `0.20.4`: AI Delivery Protocol And Runner
|
|
676
|
+
|
|
677
|
+
- **Purpose:** track fair Kudzu and React+Vite delivery attempts.
|
|
678
|
+
- **Acceptance:** pinned model/tools/prompts/budgets, framework-neutral behavior
|
|
679
|
+
suite, raw failures, token/cost/tool/file/build metrics, source retention, and
|
|
680
|
+
browser artifacts.
|
|
681
|
+
- **Stop condition:** Kudzu receives private compiler guidance unavailable to the
|
|
682
|
+
comparator.
|
|
683
|
+
- **Done condition:** every attempt is reproducible or fully attributable.
|
|
684
|
+
|
|
685
|
+
### `0.20.5`: Tooling Cost Validation
|
|
686
|
+
|
|
687
|
+
- **Purpose:** prove that diagnostics/inspect/explain/fix lower total cost per
|
|
688
|
+
successful task.
|
|
689
|
+
- **Acceptance:** before/after attempts on the same tasks; failures remain in the
|
|
690
|
+
numerator; success behavior remains identical.
|
|
691
|
+
- **Stop condition:** token reduction comes from omitted behavior or hidden
|
|
692
|
+
context.
|
|
693
|
+
- **Done condition:** useful tools are retained and non-improving tools are
|
|
694
|
+
removed or deferred.
|
|
695
|
+
|
|
696
|
+
## `0.21.x`: Production-Scale Proof
|
|
697
|
+
|
|
698
|
+
### `0.21.0`: Functional Parity Matrix
|
|
699
|
+
|
|
700
|
+
- **Purpose:** freeze complete greenfield, Answer, and Memos acceptance.
|
|
701
|
+
- **Acceptance:** content, auth, forms, CRUD, shared data, large list, overlay,
|
|
702
|
+
editor, lazy load, realtime, errors, accessibility, and navigation pass.
|
|
703
|
+
- **Stop condition:** any build-only result is counted as application success.
|
|
704
|
+
- **Done condition:** every claimed capability has a browser journey and static
|
|
705
|
+
exclusion control.
|
|
706
|
+
|
|
707
|
+
### `0.21.1`: Compiler And Route Scale
|
|
708
|
+
|
|
709
|
+
- **Purpose:** measure clean/incremental compilation and artifact emission.
|
|
710
|
+
- **Acceptance:** 100, 1,000, and separately provisioned 10,000 routes; module
|
|
711
|
+
graph time, parse/normalize/compile/render/write time, peak RSS, output digest,
|
|
712
|
+
and failure recovery.
|
|
713
|
+
- **Stop condition:** projected or incomplete 10,000-route data is called a pass.
|
|
714
|
+
- **Done condition:** repeated measurements and all material regressions are
|
|
715
|
+
explained or fixed.
|
|
716
|
+
|
|
717
|
+
### `0.21.2`: Browser Performance And Memory
|
|
718
|
+
|
|
719
|
+
- **Purpose:** protect interaction latency and long-running stability.
|
|
720
|
+
- **Acceptance:** initial/session bytes, list/range latency, navigation, lazy
|
|
721
|
+
feature load, resource cleanup, repeated heap, detached DOM, cache, listeners,
|
|
722
|
+
and handles.
|
|
723
|
+
- **Stop condition:** smaller JavaScript is preferred over behavior parity.
|
|
724
|
+
- **Done condition:** complete features meet declared thresholds with bounded
|
|
725
|
+
long-session growth.
|
|
726
|
+
|
|
727
|
+
### `0.21.3`: Package And Release Candidate
|
|
728
|
+
|
|
729
|
+
- **Purpose:** verify the exact candidate as an installed product.
|
|
730
|
+
- **Acceptance:** `npm run check`, `npm test`, required Chrome, focused
|
|
731
|
+
benchmarks, package smoke, tarball inspection, generated application, registry
|
|
732
|
+
dry run, docs, and release rollback procedure.
|
|
733
|
+
- **Stop condition:** version metadata changes before the exact candidate passes.
|
|
734
|
+
- **Done condition:** the reviewed commit is independently publishable.
|
|
735
|
+
|
|
736
|
+
### `0.21.4`: AI Delivery Proof
|
|
737
|
+
|
|
738
|
+
- **Purpose:** run the final equal-condition comparison on production-shaped
|
|
739
|
+
tasks.
|
|
740
|
+
- **Acceptance:** highest or statistically tied success rate, lowest median cost
|
|
741
|
+
per successful task, complete raw attempts, maintainable source, and retained
|
|
742
|
+
browser/build advantage.
|
|
743
|
+
- **Stop condition:** cherry-picked attempts, toy-only tasks, or unequal tooling.
|
|
744
|
+
- **Done condition:** the evidence either authorizes `1.0.0` or names the next
|
|
745
|
+
measured blocker without changing the release criteria.
|
|
746
|
+
|
|
747
|
+
## `1.0.0`: Stable Application Model
|
|
748
|
+
|
|
749
|
+
`1.0.0` is authorized only after every required `0.21.x` gate passes. It means:
|
|
750
|
+
|
|
751
|
+
- the small package-neutral application semantic model is stable;
|
|
752
|
+
- complete production-shaped application journeys pass;
|
|
753
|
+
- static routes retain zero JavaScript;
|
|
754
|
+
- interactive routes retain only used capabilities;
|
|
755
|
+
- React migration uses compatibility, normalization, adapters, and owned
|
|
756
|
+
external UI rather than a React runtime;
|
|
757
|
+
- browser/build/performance and long-running memory gates pass;
|
|
758
|
+
- the equal-condition AI benchmark meets the published success and cost gates.
|
|
759
|
+
|
|
760
|
+
## Patch Session Procedure
|
|
761
|
+
|
|
762
|
+
Before implementation:
|
|
763
|
+
|
|
764
|
+
1. Read this plan, `MIGRATION_ROADMAP.md`, the current architecture map, and the
|
|
765
|
+
applicable capability packet.
|
|
766
|
+
2. Confirm the package version and inspect uncommitted work without modifying
|
|
767
|
+
unrelated changes.
|
|
768
|
+
3. Confirm every earlier patch is complete or explicitly replanned.
|
|
769
|
+
4. Name the exact application journey, failing fixture, owner, producer, and
|
|
770
|
+
consumer boundary.
|
|
771
|
+
5. Record the baseline output, browser bytes, runtime concepts, compiler/pass
|
|
772
|
+
LOC, and applicable benchmark.
|
|
773
|
+
|
|
774
|
+
During implementation:
|
|
775
|
+
|
|
776
|
+
1. Add the failing fixture first.
|
|
777
|
+
2. Try native behavior and existing semantics before changing the framework.
|
|
778
|
+
3. Keep the smallest correct patch and preserve ordinary React-shaped TSX.
|
|
779
|
+
4. Add nearby negative diagnostics and static zero-cost exclusion.
|
|
780
|
+
5. Do not broaden public APIs, IR, runtime, or package support beyond the packet.
|
|
781
|
+
|
|
782
|
+
Before release:
|
|
783
|
+
|
|
784
|
+
1. Run focused tests, `npm run check`, `npm test`, required Chrome, and package
|
|
785
|
+
smoke.
|
|
786
|
+
2. Run affected output and performance gates with at least seven interleaved
|
|
787
|
+
measured samples where a comparison is claimed.
|
|
788
|
+
3. Record fixtures, semantic primitives, core/pass LOC, runtime concepts,
|
|
789
|
+
browser bytes, output digest, benchmark deltas, AI-cost effect, risks, and
|
|
790
|
+
known limits.
|
|
791
|
+
4. Update package version, lockfile, release notes, support documentation, and
|
|
792
|
+
registry-facing records only on the exact accepted release commit.
|
|
793
|
+
5. Complete the release transaction below, then advance the active status to
|
|
794
|
+
the next patch.
|
|
795
|
+
|
|
796
|
+
## Release Transaction
|
|
797
|
+
|
|
798
|
+
Every completed patch and every new minor is a real release. A work session that
|
|
799
|
+
does not complete its packet does not consume a version; the next session
|
|
800
|
+
continues the same target version.
|
|
801
|
+
|
|
802
|
+
1. Confirm the target version is the active packet and is not already present in
|
|
803
|
+
npm or Git tags.
|
|
804
|
+
2. Update `package.json`, root lockfile metadata, `RELEASES.md`, README/support
|
|
805
|
+
records, and generator metadata when the release changes generated projects.
|
|
806
|
+
3. Run the complete release gate on the exact versioned tree: focused tests,
|
|
807
|
+
`npm run check`, `npm test`, required Chrome, `npm run test:package`, affected
|
|
808
|
+
benchmarks, package inspection, and `git diff --check`.
|
|
809
|
+
4. Inspect `git status`, the complete diff, and recent release history. Stage
|
|
810
|
+
only the intended packet and release files.
|
|
811
|
+
5. Create one release commit using the established `Release Kudzu X.Y.Z`
|
|
812
|
+
convention. Do not amend a rejected release commit; fix forward and create a
|
|
813
|
+
new commit.
|
|
814
|
+
6. Push the release commit and require its CI checks to pass.
|
|
815
|
+
7. Create tag `vX.Y.Z` on that exact commit and push the tag. Never move or
|
|
816
|
+
repoint a published tag.
|
|
817
|
+
8. Publish the matching GitHub release. The existing `Publish npm` workflow
|
|
818
|
+
checks out the tag, reruns check/test/package gates, verifies version/tag
|
|
819
|
+
equality, publishes `@kudzujs/core` and any changed `create-kudzu`, and checks
|
|
820
|
+
npm registry visibility.
|
|
821
|
+
9. Require the publish workflow to pass, verify npm metadata and a fresh install
|
|
822
|
+
manually, and record the release URL and registry versions.
|
|
823
|
+
10. Only after commit, push, tag, GitHub release, npm publication, registry
|
|
824
|
+
verification, and fresh-install verification succeed may the next patch
|
|
825
|
+
become active.
|
|
826
|
+
|
|
827
|
+
If Git push, tag push, GitHub release, npm publication, or registry verification
|
|
828
|
+
fails, the current packet remains active. Do not start or version the next
|
|
829
|
+
packet. npm versions and published tags are immutable; recover with the same
|
|
830
|
+
release transaction where possible or document and publish a forward-fix patch.
|
|
831
|
+
|
|
832
|
+
## Active Status
|
|
833
|
+
|
|
834
|
+
| Patch | Status | Next exact action | Blocker |
|
|
835
|
+
|---|---|---|---|
|
|
836
|
+
| `0.10.0` | Release candidate | Complete commit, push, tag, GitHub release, npm publication, registry, and fresh-install verification. | Release transaction |
|
|
837
|
+
| `0.10.1` | Blocked | Extend the greenfield fixture with local, object, array, and derived state scale evidence after 0.10.0 publication. | 0.10.0 release |
|
|
838
|
+
| `0.10.2` onward | Blocked | Wait for the preceding patch acceptance and release record. | Ordered dependency |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Planned Version Sequence
|
|
2
2
|
|
|
3
|
-
This is an execution sequence, not release history. `0.8.16` through `0.8.62` are completed scopes represented by package/release records.
|
|
3
|
+
This is an execution sequence, not release history. `0.8.16` through `0.8.62` are completed scopes represented by package/release records. The active `0.10.0` through `1.0.0` minor/patch sequence is maintained in [`application-capability-release-plan.md`](./application-capability-release-plan.md); that plan supersedes the provisional tool-first 0.10/0.11/0.12 ordering in the completed 0.9 handoff.
|
|
4
4
|
|
|
5
5
|
Keep each patch behavior-preserving and independently reviewable. If a boundary proves inseparable, revise this plan before combining releases; do not silently broaden a patch.
|
|
6
6
|
|
|
@@ -62,15 +62,24 @@ Keep each patch behavior-preserving and independently reviewable. If a boundary
|
|
|
62
62
|
- A planned patch may ship under a different actual version only if this table and release-facing documentation are updated before release.
|
|
63
63
|
- Release notes describe completed facts; this file continues to describe future work.
|
|
64
64
|
- Internal decomposition alone does not require `0.9.0`; use a minor only for a public compiler/tooling or compatibility boundary.
|
|
65
|
+
- From `0.10.0` onward, each application-capability section owns one minor and each independently accepted evidence packet owns one patch as defined by the active application-capability release plan.
|
|
65
66
|
|
|
66
67
|
## Generator Versions
|
|
67
68
|
|
|
68
|
-
`create-kudzu@0.1.
|
|
69
|
+
`create-kudzu@0.1.104` retains the explicit install instructions and generates projects with `@kudzujs/core@^0.10.0`.
|
|
69
70
|
|
|
70
71
|
## Release Boundary
|
|
71
72
|
|
|
72
73
|
Every patch is independently revertible before publication. After npm publication, never repoint its tag; forward-fix with the next patch. Require the exact commit to pass CI, package smoke installation, registry verification, and the performance gates before starting the next ownership seam.
|
|
73
74
|
|
|
75
|
+
From `0.10.0` onward every completed patch packet is a full release transaction:
|
|
76
|
+
version and lockfile updates, release records, an accepted `Release Kudzu X.Y.Z`
|
|
77
|
+
commit, commit push and CI, an immutable `vX.Y.Z` tag push, a published GitHub
|
|
78
|
+
release, npm publication through `.github/workflows/publish.yml`, registry
|
|
79
|
+
verification, and fresh-install verification. Incomplete work sessions retain
|
|
80
|
+
the same target version and do not create commits, tags, or npm releases merely
|
|
81
|
+
because the session ended.
|
|
82
|
+
|
|
74
83
|
## Per-Patch Continuation Checklist
|
|
75
84
|
|
|
76
85
|
- [ ] Confirm all earlier planned patches are complete or explicitly replanned.
|