@kudzujs/core 0.9.2 → 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.
@@ -2,10 +2,28 @@
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 active `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 packets in [`docs/next-architecture/0.9-implementation-plan.md`](./docs/next-architecture/0.9-implementation-plan.md). Follow its ordered work queue and evidence gates for implementation work. The completed compiler foundation and longer-term sequence 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.
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 application-capability release plan before implementation.
10
+
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
+
13
+ The next Apache Answer reductions preserve its direct numeric page fallback and string order fallback over `useSearchParams()`. Both reuse nullable query signals and existing primitive binding ESM; the string form accepts only a static element of a named relative JSON-safe immutable array. Dynamic indexes, arbitrary wrappers, and general query expressions remain diagnosed.
14
+
15
+ Apache Answer layouts may retain named React Bootstrap `Row` and `Col` components when they use children, static `className`, and numeric literal `Col` spans from 1 through 12 for `xs` through `xxl`. Compiler normalization emits native Bootstrap grid classes with no browser JavaScript and covers all 63 observed static-breakpoint Col sites; Bootstrap stylesheet ownership remains with the application. Dynamic/object/boolean grid props and broader React Bootstrap components remain separate evidence packets.
16
+
17
+ Apache Answer's `useTranslation()` cannot be folded safely because its language resources come from 46 YAML files, browser storage, and server responses. Kudzu emits a source-located diagnostic directing build-known locales to `getStaticPaths()` and props or browser-only selection to an owned effect; it does not substitute English or ship i18next.
18
+
19
+ Apache Answer's SWR/axios/qs question reads now have an executable migration path through one native fetch effect with application-owned loading/error/data state. Derived `page` and `order` query dependencies restart the effect, stale responses lose setter authority, recommendation endpoints and HTTP recovery remain explicit, nested keyed tags retain list ownership, and a static sibling remains JavaScript-free. No cache, Provider, retry scheduler, SWR, axios, or query runtime is added.
20
+
21
+ Apache Answer authentication now has a reduced layout-owned session path: native login form submission persists a token, a mount effect restores and validates it, shared header/settings consumers read one package-neutral state record, and a 401 clears storage/state before native replacement navigation. The public sibling remains JavaScript-free. Full browser acceptance and the broader server-fed settings stores remain subsequent gates.
22
+
23
+ Apache Answer's first route-shell gate replaces `RouterProvider` and nested `Outlet` ownership with seven directly addressable Kudzu file routes, one ordinary shared shell, native anchors, and runtime question/tag parameters. Questions, tags, admin dashboard, and unwrapped legal output build without a browser router; the two bracket routes emit only pathname capability and rewrite metadata.
24
+
25
+ Apache Answer authoring/admin intake now builds native question creation and keyed administration without form, editor, query, or state package runtimes. Constraint-backed title/markdown fields, controlled preview, markdown file import, local draft mutation, keyed admin rows, and deletion compile through existing handlers/lists while a legal sibling remains JavaScript-free. Rich CodeMirror ownership, server validation, upload progress, and destructive confirmation remain later acceptance gates.
26
+
9
27
  ## North Star
10
28
 
11
29
  An AI should be able to migrate ordinary React-shaped TypeScript and TSX to CDN-deployable static HTML, CSS, and only the route-specific ESM capabilities actually used, with minimal source restructuring.
@@ -35,6 +53,16 @@ Syntax compatibility does not mean reproducing React wholesale. Kudzu accepts th
35
53
 
36
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.
37
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
+
38
66
  ### 1.0.0: Best Framework For AI-Assisted Delivery
39
67
 
40
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.9.x`: the compiler API and supported TSX surface may change.
15
+ > Experimental `0.10.x`: the compiler API and supported TSX surface may change.
16
16
 
17
- **Latest release: 0.9.2 - Legacy CSS safety.** Projects with source CSS but no explicit style ownership retain their pre-0.8.53 global styles with an actionable migration warning; explicit apps keep route-aware CSS unchanged. Read the [release notes](./RELEASES.md#092---legacy-css-safety), open the [release page](https://github.com/kudzujs/kudzu/releases/tag/v0.9.2), or follow the [architecture packet](./docs/next-architecture/README.md).
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)
@@ -103,7 +103,10 @@ ordinary React-shaped TSX
103
103
  - Native document navigation is the default; static routes do not load a client runtime.
104
104
  - A named or aliased React Router `Link` with a static root-relative `to` erases to a base-aware native anchor; no router package or runtime is emitted.
105
105
  - A direct named or aliased React Router `useParams()` call on a `runtimeParams` bracket route reuses Kudzu's route-specific pathname reader.
106
- - React Router `useSearchParams()` supports direct static `get("name")` locals and inline setter updaters, lowering reads and history writes to one route-specific query capability.
106
+ - A direct top-level React Router `useMatch("/exact-path")` route binding folds case-insensitively from the build-known application route without browser JavaScript.
107
+ - React Router `useSearchParams()` supports direct static `get("name")` locals, the exact numeric pagination fallback `Number(params.get("page")) || 1`, a static imported-array string fallback, and inline setter updaters, lowering reads and history writes to one route-specific query capability.
108
+ - React Bootstrap `Row` and `Col` with children, static classes, and numeric literal `Col` breakpoints erase to native Bootstrap grid markup; applications retain ownership of Bootstrap CSS.
109
+ - Browser-only query data uses owned effects with application loading/error/data state; URL-derived dependencies, stale-response isolation, keyed results, and recovery require no query package runtime.
107
110
  - Only TypeScript modules reachable from pages are compiled. Imported immutable direct maps can fold to static HTML, while direct fields from relative structured calculations reevaluate through route binding ESM.
108
111
  - Package imports used directly inside JSX event callbacks are removed from build modules and retained only in bundled route handler ESM.
109
112
  - A named or aliased React Router `useNavigate()` top-level binding lowers direct nested-callback calls with safe static root-relative destinations to native `location.assign()` or `location.replace()` navigation.
package/RELEASES.md CHANGED
@@ -1,5 +1,98 @@
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
+
55
+ ## 0.9.3 - Large-app migration slices
56
+
57
+ Kudzu 0.9.3 adds evidence-backed compiler and source-migration paths derived
58
+ from Apache Answer while preserving static-first output and fail-closed package
59
+ boundaries.
60
+
61
+ ### Changed in 0.9.3
62
+
63
+ - Exact static React Router `useMatch()` folds from the build-known route with
64
+ zero browser JavaScript.
65
+ - React Router query reads support numeric pagination and static imported-string
66
+ fallbacks, including reactive effect dependencies and read-only `popstate`.
67
+ - React Bootstrap `Row` and `Col` lower to native grid markup, including numeric
68
+ literal breakpoint spans from 1 through 12.
69
+ - Owned native fetch effects compose URL dependencies, stale-response isolation,
70
+ loading/error/data state, and nested keyed results without SWR or axios.
71
+ - Reduced shared-authentication build intake and route-shell, authoring, and
72
+ admin fixtures prove package-neutral paths with static sibling exclusion.
73
+ - Runtime-resource `react-i18next` receives an actionable locale-ownership
74
+ diagnostic rather than silently folding English or shipping i18next.
75
+
76
+ ### Validation
77
+
78
+ - Apache Answer-derived positive and negative fixtures cover router, query,
79
+ layout, data, authentication, route-shell, authoring, and admin boundaries.
80
+ - Static layout/legal/public siblings remain JavaScript-free.
81
+ - `npm run check`, `npm test`, and `npm run test:package` pass on the release
82
+ worktree.
83
+
84
+ ### Limits
85
+
86
+ This release does not claim a complete Apache Answer migration. Runtime i18n,
87
+ rich CodeMirror ownership, upload progress, broader React Bootstrap compounds,
88
+ plugins, AI screens, and all-route acceptance remain separate evidence gates.
89
+
90
+ ### Upgrade
91
+
92
+ ```sh
93
+ npm install @kudzujs/core@^0.9.3
94
+ ```
95
+
3
96
  ## 0.9.2 - Legacy CSS safety
4
97
 
5
98
  Kudzu 0.9.2 prevents pre-0.8.53 applications from silently producing an
@@ -0,0 +1,370 @@
1
+ # Kudzu 1.0 Large-Application Compatibility Audit
2
+
3
+ ## Status
4
+
5
+ This 2026-08-21 local discovery audit measures source compatibility after
6
+ `0.9.0`; it does not authorize a new runtime, replace the 1.0 AI delivery
7
+ protocol, or claim whole-application migration success. The probes used Kudzu
8
+ `0.9.2` at `f69722032a3790dfb13151e17e1ab0f60c8280d3` on Node 24.14.0.
9
+ Original repositories and Kudzu remained unchanged.
10
+
11
+ The result is a compatibility gap: Kudzu builds reduced public slices from all
12
+ three applications, but meaningful source retention is too low for a React-like
13
+ large-application migration claim.
14
+
15
+ ## Pinned Applications
16
+
17
+ | Application | Revision | License | Frontend scope | Original build |
18
+ |---|---|---|---:|---|
19
+ | [Memos](https://github.com/usememos/memos) | `e5ed6e7ec60e141d6e354f3ab59906c2c47dccac` | MIT | 393 TS/TSX modules, 43,099 LOC, 19 leaf routes | Pass: 5,089 modules, 292 files |
20
+ | [Apache Answer](https://github.com/apache/answer) | `3b9f1370612e690a0b7f230f05e688930db4c6d3` | Apache-2.0 | 377 TS/TSX modules, 48,091 LOC, 88 explicit paths | Pass: 681 files |
21
+ | [Actual Budget](https://github.com/actualbudget/actual) | `87e33e49eb4d666c33e0c0f172faf340d1b7aa0a` | MIT | sparse desktop client: 810 TS/TSX modules, 163,344 LOC, 80 route declarations | Not established: acquisition lacks workspace tooling and core packages |
22
+
23
+ The Actual Budget result is diagnostic only. Its sparse checkout contains the
24
+ selected desktop components but not the component library, core backend, Yarn
25
+ release, database, worker coordinator, or spreadsheet implementation.
26
+
27
+ The migrated adapters, copied source, detailed diagnostic logs, and line-diff
28
+ inputs remain local under `/tmp/opencode/kudzu-large-apps`; they are not durable
29
+ tracked evidence. The pinned upstream commits and original build commands are
30
+ reproducible, but retention and migrated-output values remain discovery results
31
+ until an external fixture repository pins the adapters and acceptance harness.
32
+
33
+ ## Migration Results
34
+
35
+ ### Memos
36
+
37
+ The probe selected `/about`, `/explore`, and `/auth` from the real route and
38
+ component closures. The reduced Kudzu app builds three pages and one interactive
39
+ page. `/about` and `/explore` emit zero JavaScript; `/auth` emits 12,374 raw /
40
+ 5,956 gzip bytes of route JavaScript.
41
+
42
+ | Measure | Result |
43
+ |---|---:|
44
+ | Direct corresponding source retained | 163 / 640 lines (25.5%) |
45
+ | Retention including omitted feed/auth closure | 163 / 996 lines (16.4%) |
46
+ | Final migrated TS/TSX | 12 files, 408 LOC |
47
+ | Deploy | 14 files |
48
+
49
+ The passing output is not behavior-equivalent. Live instance data, Connect RPC,
50
+ TanStack Query, pagination, privacy filtering, markdown, reactions, SSE refresh,
51
+ authentication, token storage, SSO discovery, and post-auth navigation are
52
+ absent. The public feed is a build-known snapshot.
53
+
54
+ ### Apache Answer
55
+
56
+ The probe selected questions list/detail and tags list/detail. It preserves all
57
+ six selected component roles, but replaces the browser router, React Bootstrap,
58
+ i18next, SWR/axios, Zustand-backed globals, guards, and live API data. Four Kudzu
59
+ pages build; the questions list is zero JavaScript and the tags list uses the
60
+ existing keyed-filter capabilities.
61
+
62
+ | Measure | Result |
63
+ |---|---:|
64
+ | Exact selected source retained | 22 / 1,103 lines (2.0%) |
65
+ | Final migrated TS/TSX | 8 files, 257 LOC |
66
+ | Deploy | 17 files, 48,389 raw bytes |
67
+ | JavaScript | 33,384 raw / 13,641 gzip bytes |
68
+
69
+ The result has no Answer API, auth, mutations, loading/error state, pagination,
70
+ editor, cache invalidation, or route guards. Runtime detail paths render one
71
+ representative snapshot rather than the requested entity.
72
+
73
+ ### Actual Budget
74
+
75
+ The probe selected the grouped report-table workflow and retained five imported
76
+ component boundaries. It produces one complete static report page with 0 bytes
77
+ of JavaScript.
78
+
79
+ | Measure | Result |
80
+ |---|---:|
81
+ | Exact selected source retained | 22 / 906 lines (2.4%) |
82
+ | Final authored probe | 268 LOC |
83
+ | Output | 2,810 B HTML, 1,990 B CSS, 0 B JavaScript |
84
+
85
+ This is an exported report, not Actual Budget. Database opening, query execution,
86
+ spreadsheet bindings, Redux and query state, synchronization, undo, preferences,
87
+ privacy formatting, Worker/SharedWorker ownership, synchronized scrolling, and
88
+ transaction drill-down are absent.
89
+
90
+ ## Repeated Blockers
91
+
92
+ | Blocker | Memos | Answer | Actual | Decision |
93
+ |---|---|---|---|---|
94
+ | Package components used during render | Lucide, Base UI | React Bootstrap | Actual component library, React Aria | Record separate package shapes; this broad grouping does not prove one shared semantic concept. |
95
+ | Browser data/query ownership | TanStack Query, Connect RPC, SSE | SWR, axios | TanStack Query, worker-backed database | Define build-time snapshot and owned-effect migration contracts before considering an adapter. Do not add a query cache runtime. |
96
+ | Router/layout semantics | RouterProvider, guards, lazy routes | nested guarded routes, outlets, `useMatch` | React Router screens and drill-down state | Keep native/file routing as the default; inventory nested layout and guard source shapes separately. |
97
+ | Provider/global state | auth, instance, view/filter contexts | Zustand site/session/UI stores | Redux, preferences, non-serializable state | Continue package-neutral action/state reductions only from executable behavior fixtures. |
98
+ | Localization and formatting | i18next | i18next | i18next, locale/currency/privacy preferences | Prefer build-known locale routes; browser-switchable locale ownership needs independent evidence. |
99
+ | Dynamic presentation | markdown/editor/media/map | editor, Markdown, package widgets | grids, charts, spreadsheets | Treat imperative leaves and package adapters independently; no generic component runtime. |
100
+
101
+ These broad blocker families recur, but they do not establish one shared missing
102
+ semantic concept. Each package, query/data, router/layout, provider, localization,
103
+ or imperative-leaf shape still needs an independent executable reduction before
104
+ architecture review. Fixture count does not authorize a semantic primitive. The
105
+ first implementation must stop at native behavior, existing semantics,
106
+ normalization, or a bounded internal adapter before considering kernel growth.
107
+
108
+ ## Compatibility Conclusion
109
+
110
+ Kudzu `0.9.2` supports large output and selected ordinary TSX, but not low-change
111
+ migration of these large React applications. The reported retention denominators
112
+ are not directly comparable: Memos includes an omitted feed/auth closure, Answer
113
+ counts six selected modules, and Actual counts five retained component files from
114
+ an incomplete sparse checkout. Every method still reports substantial rewriting.
115
+
116
+ Current viable use is narrower:
117
+
118
+ - static public pages and build-known read-only exports;
119
+ - bounded forms and keyed interactions that already match Kudzu ownership;
120
+ - separately accepted imperative leaves owned by effects;
121
+ - native navigation to an existing application for unsupported workflows.
122
+
123
+ Do not describe Memos, Answer, or Actual Budget as migrated applications. The
124
+ passing probes are reductions that identify compatibility work.
125
+
126
+ ## Authorized Handoff
127
+
128
+ The authoritative next milestone remains the equal-condition 1.0 AI delivery
129
+ protocol in `0.9-implementation-plan.md`; this audit is candidate-selection input
130
+ only. If that protocol selects an Apache Answer task, its first unsupported source
131
+ shape is `useMatch` in the questions route. The implementation process must:
132
+
133
+ 1. preserve that exact failing source and reduce only the first unsupported shape;
134
+ 2. identify existing IR producers, consumers, ownership, nearby rejected forms,
135
+ and expected browser-byte impact before editing the compiler;
136
+ 3. run behavior and accessibility acceptance rather than build checks alone;
137
+ 4. report source retention as a diagnostic with an explicit denominator, not an
138
+ unapproved pass threshold;
139
+ 5. keep package-component, query/data, router/layout, localization, and provider
140
+ work as separate evidence packets.
141
+
142
+ Combining these blockers into one compatibility runtime is not approved.
143
+
144
+ ## First Reduction Completion
145
+
146
+ The user selected the Apache Answer routing probe under the authorized protocol.
147
+ The first unsupported source shape, direct `const isIndexPage = useMatch("/")`,
148
+ now lowers through the existing router normalization pass to one compiler-internal
149
+ build-time route comparison. The same relative `Questions` component renders the
150
+ Answer title at `/` and the Questions title at `/questions`.
151
+
152
+ | Measure | Result |
153
+ |---|---:|
154
+ | Upstream-derived positive fixtures | 1 |
155
+ | Nearby negative fixtures | 2 |
156
+ | Semantic primitives | 0 |
157
+ | ModuleIR/RouteIR records | 0 |
158
+ | Compiler passes | 0 new |
159
+ | Browser runtime concepts | 0 |
160
+ | Browser JavaScript | 0 B on both routes |
161
+
162
+ The producer is `compiler/router-pass.mjs`; the only consumer is a build-time
163
+ helper in `core.mjs` reading the invocation's application route. No SPA router,
164
+ path matcher, route signal, state, effect, handler, or browser module is added.
165
+ Layout and runtime-parameter use fail before output; dynamic patterns and
166
+ parameterized/wildcard/query/hash/trailing-slash forms fail with source
167
+ diagnostics. Matching follows React Router's default case-insensitive behavior.
168
+ Broader nested layouts, guards, outlets, and dynamic matching remain separate
169
+ evidence packets.
170
+
171
+ ## Second Reduction Completion
172
+
173
+ The next repeated Apache Answer blocker, direct
174
+ `const curPage = Number(urlSearchParams.get("page")) || 1`, now separates the
175
+ nullable query signal into a compiler-owned local and reuses the existing pure
176
+ primitive binding evaluator. Query removal through `popstate` restores the
177
+ finite authored fallback.
178
+
179
+ | Measure | Result |
180
+ |---|---:|
181
+ | Upstream-derived positive fixtures | 1 |
182
+ | Nearby negative fixtures | 1 |
183
+ | Semantic primitives | 0 |
184
+ | ModuleIR/RouteIR records | 0 |
185
+ | Existing core files changed | 3 |
186
+ | Core LOC delta | +39 |
187
+ | Compiler passes | 0 new |
188
+ | Browser runtime concepts | 0 |
189
+ | Raw browser ESM | 11,211 B |
190
+ | Build benchmark delta | Not measured; route-local compatibility slice |
191
+
192
+ The producer remains `compiler/router-pass.mjs`; generic reactive-local
193
+ substitution and binding consumers handle the result. `param-codegen.mjs` now
194
+ applies its existing `popstate` synchronization to read-only query routes as
195
+ well as writable routes. `Math.max`, `parseInt`, dynamic names, aliases, and
196
+ other composed query expressions remain unsupported pending independent source
197
+ evidence.
198
+
199
+ ## Third Reduction Completion
200
+
201
+ Apache Answer's adjacent
202
+ `(urlSearchParams.get("order") || QUESTION_ORDER_KEYS[0]) as QuestionOrderBy`
203
+ now follows the same compiler-owned query signal path. The fallback is accepted
204
+ only when it is a static numeric element of a named relative JSON-safe immutable
205
+ array. The selected string is folded before binding/effect analysis, so the
206
+ browser handler retains neither the array nor its source module.
207
+
208
+ | Measure | Result |
209
+ |---|---:|
210
+ | Upstream-derived positive fixtures | 1 |
211
+ | Nearby negative fixtures | 1 |
212
+ | Semantic primitives | 0 |
213
+ | ModuleIR/RouteIR records | 0 |
214
+ | Existing core files changed | 2 |
215
+ | Core LOC delta | +7 |
216
+ | Compiler passes | 0 new |
217
+ | Browser runtime concepts | 0 |
218
+ | Raw browser ESM | 11,210 B |
219
+ | Build benchmark delta | Not measured; route-local compatibility slice |
220
+
221
+ Static output uses `newest`, `?order=active` updates both the attribute and text,
222
+ and query removal through `popstate` restores `newest`. Dynamic indexes, local
223
+ fallback arrays, package imports, calls, and arbitrary expressions remain
224
+ unsupported.
225
+
226
+ ## Fourth Reduction Completion
227
+
228
+ Apache Answer's Questions page uses React Bootstrap `Row` and `Col` only as
229
+ declarative layout wrappers with static classes and children. The existing React
230
+ migration normalization pass now erases those named package imports and emits
231
+ native `div.row` and `div.col` markup. Bootstrap CSS remains an ordinary
232
+ application stylesheet dependency rather than a Kudzu runtime.
233
+
234
+ | Measure | Result |
235
+ |---|---:|
236
+ | Upstream-derived positive fixtures | 1 |
237
+ | Nearby negative fixtures | 1 |
238
+ | Semantic primitives | 0 |
239
+ | ModuleIR/RouteIR records | 0 |
240
+ | Existing core files changed | 1 |
241
+ | Core LOC delta | +48 |
242
+ | Compiler passes | 0 new |
243
+ | Browser runtime concepts | 0 |
244
+ | Browser JavaScript | 0 B |
245
+ | Build benchmark delta | Not measured; static normalization slice |
246
+
247
+ The generated document preserves the Questions heading, complementary sidebar,
248
+ children order, and Bootstrap class contract without scripts or behavior
249
+ markers. Breakpoint/grid props such as `md={6}`, dynamic classes, spreads,
250
+ subpath/default/namespace imports, and other React Bootstrap components remain
251
+ unsupported.
252
+
253
+ ## Runtime Translation Boundary
254
+
255
+ Apache Answer's next Questions-page failure is `react-i18next`
256
+ `useTranslation()`. Its values are not build-known: initialization uses the
257
+ repository's English YAML fallback, while storage and server responses can add
258
+ or replace the active resource bundle. Folding English would lose behavior and
259
+ shipping i18next would add a forbidden package runtime.
260
+
261
+ Kudzu now reports that boundary at the hook reference and directs migration to
262
+ the existing static-locale treatment: `getStaticPaths()` plus locale props when
263
+ resources are build-known, or an owned browser effect when selection only exists
264
+ in the browser. This diagnostic adds no semantic primitive, pass, runtime
265
+ concept, browser byte, or successful migration claim.
266
+
267
+ The following Questions-page store reads are not the same reduced Zustand shape:
268
+ `loggedUserInfoStore`, `siteInfoStore`, and `loginSettingStore` own multiple data
269
+ fields, server-fed replacement actions, and storage side effects. Their values
270
+ are not build-known and cannot be preserved by folding initial literals. They
271
+ remain an application data-ownership migration packet; this audit does not
272
+ authorize a Zustand runtime or broaden `SharedStateIR` around one application's
273
+ store graph.
274
+
275
+ ## Fifth Reduction Completion
276
+
277
+ Apache Answer's `useQuestionList()` and `useQuestionRecommendList()` wrappers
278
+ compose SWR, axios, and `qs` around browser-only data. The executable reduction
279
+ keeps the Questions page's URL-derived page/order semantics but moves ownership
280
+ to one native fetch effect with application-owned loading, error, and keyed data
281
+ state. The existing dependency replacement contract prevents a delayed old
282
+ response from overwriting a newer query.
283
+
284
+ | Measure | Result |
285
+ |---|---:|
286
+ | Upstream-derived positive fixtures | 1 |
287
+ | Static exclusion fixtures | 1 |
288
+ | Semantic primitives | 0 |
289
+ | ModuleIR/RouteIR records | 0 new |
290
+ | Existing core files changed | 2 |
291
+ | Core LOC delta | +6 |
292
+ | Compiler passes | 0 new |
293
+ | Browser runtime concepts | 0 new |
294
+ | Raw interactive browser ESM | 32,005 B |
295
+ | Static sibling JavaScript | 0 B |
296
+ | Build benchmark delta | Not measured; browser-data compatibility slice |
297
+
298
+ Chrome acceptance starts from `?page=2&order=active`, replaces it with the
299
+ recommendation endpoint, rejects the delayed stale response, renders nested
300
+ keyed tags, reports HTTP 500 through `role="alert"`, and recovers on the next
301
+ query. SWR, axios, `qs`, caches, Providers, retries, deduplication, and background
302
+ refetch remain absent. The only compiler adjustment folds the already validated
303
+ imported immutable string fallback before generic effect dependency analysis.
304
+
305
+ ## Sixth Reduction Completion
306
+
307
+ The full Answer source contains 94 direct `Col` elements; 63 use only static
308
+ numeric spans across `xs`, `sm`, `md`, `lg`, `xl`, and `xxl`. The existing React
309
+ Bootstrap normalization now maps integer literals 1 through 12 to native
310
+ Bootstrap classes, omits bare `col` when spans exist, and preserves static
311
+ authored classes. All 98 observed breakpoint props fit this shape.
312
+
313
+ | Measure | Result |
314
+ |---|---:|
315
+ | Upstream-derived positive fixtures | 1 |
316
+ | Nearby negative fixtures | 1 |
317
+ | Observed Col sites covered | 63 / 94 |
318
+ | Semantic primitives | 0 |
319
+ | ModuleIR/RouteIR records | 0 |
320
+ | Existing core files changed | 1 |
321
+ | Core LOC delta | +14 |
322
+ | Compiler passes | 0 new |
323
+ | Browser runtime concepts | 0 |
324
+ | Browser JavaScript | 0 B |
325
+ | Build benchmark delta | Not measured; static normalization slice |
326
+
327
+ Chrome is unnecessary for this static mapping: emitted HTML exactly carries
328
+ `col-md-6`, multi-breakpoint login classes, and the five-span tag grid without
329
+ scripts or behavior markers. Dynamic, boolean, object, offset/order, style,
330
+ spread, and polymorphic forms remain separate evidence packets.
331
+
332
+ ## Seventh Reduction Intake
333
+
334
+ The first authentication fixture now builds one layout-owned session record from
335
+ the Answer login/current-user/401 shapes. Native `FormData`, token storage,
336
+ current-user fetch, shared header/settings reads, clear, and replacement
337
+ navigation compile without Zustand, axios, React Router, or React in output; a
338
+ public sibling remains static. One compiler correction prevents shared-state
339
+ identifiers such as `session.token` from being misclassified as imported
340
+ calculation results during effect dependency analysis. This adds no IR kind,
341
+ pass, or runtime concept. Browser login/reload/401 acceptance remains required
342
+ before this intake can be marked a completed authentication reduction.
343
+
344
+ ## Route Shell Intake
345
+
346
+ The first route-shell fixture builds seven representative Answer paths: home,
347
+ questions, runtime question detail, tags, runtime tag detail, admin dashboard,
348
+ and legal. `Layout`/`SideNavLayout` become one ordinary composed shell, links are
349
+ native anchors, and bracket pages reuse the existing pathname reader and rewrite
350
+ metadata. No RouterProvider, Outlet, SPA router, semantic primitive, pass, or new
351
+ runtime concept is added; the legal sibling remains zero-JavaScript. Expanding
352
+ the same manifest/composition treatment across all 88 upstream paths remains the
353
+ next route migration gate.
354
+
355
+ Chrome acceptance directly enters `/questions/42/example-question`, verifies
356
+ both runtime pathname fields and the composed primary/section navigation, then
357
+ performs native document navigation to `/tags/kudzu` and verifies the tag field
358
+ in the destination document. No hydration or browser router participates.
359
+
360
+ ## Authoring And Admin Intake
361
+
362
+ A backend-independent Answer authoring/admin fixture now builds three routes.
363
+ Question creation uses native constraints, `FormData`, a controlled markdown
364
+ textarea, file text import, preview, and browser-owned persistence. The admin
365
+ route restores that data into a keyed table and deletes rows through existing
366
+ list and handler semantics. React Hook Form, CodeMirror, axios, Zustand, and
367
+ React are absent from deploy handlers, and the legal sibling remains static.
368
+ This intake adds no compiler or runtime concept; rich editor lifecycle, server
369
+ validation, upload progress, dialogs, and complete admin browser journeys remain
370
+ separate gates.
@@ -13,6 +13,10 @@ The top-level [`GOAL_A.md`](../../GOAL_A.md) and [`GOAL_B.md`](../../GOAL_B.md)
13
13
 
14
14
  The completed `0.9.0` milestone is recorded in [`0.9-semantic-compression.md`](./0.9-semantic-compression.md) and [`0.9-implementation-plan.md`](./0.9-implementation-plan.md). It freezes the `0.8.62` baseline, then closes evidence-backed work on Derived, shared state/actions, resource ownership, component ownership, pass reduction, and final cross-framework proof. [`large-application-ai-native-roadmap.md`](./large-application-ai-native-roadmap.md) remains the completed foundation and longer-term plan. Model-driven delivery is separately gated for 1.0. ResourceIR remains unapproved; range ownership, virtualization, optimistic transactions, public adapters, and generic runtimes still require independent evidence and architecture review.
15
15
 
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
+
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
+
16
20
  ## Required Invariants
17
21
 
18
22
  - Every route remains a complete static HTML document.
@@ -25,23 +29,25 @@ The completed `0.9.0` milestone is recorded in [`0.9-semantic-compression.md`](.
25
29
 
26
30
  ## Reading Order
27
31
 
28
- 1. [`0.9-semantic-compression.md`](./0.9-semantic-compression.md): completed scope, evidence, and release gates.
29
- 2. [`0.9-implementation-plan.md`](./0.9-implementation-plan.md): detailed session packets, benchmark plan, reports, and release procedure.
30
- 3. [`0.9-baseline.md`](./0.9-baseline.md): dated architecture, pass, IR, runtime-concept, LOC, and test baseline.
31
- 4. [`0.9-benchmark-contracts.md`](./0.9-benchmark-contracts.md): frozen matched-content, stateful, commerce, scale, resource, and anti-gaming contracts.
32
- 5. [`compiler-current-architecture.md`](./compiler-current-architecture.md): exact current responsibilities and data flow.
33
- 6. [`performance-gates.md`](./performance-gates.md): output, build, and browser gates.
34
- 7. [`large-application-ai-native-roadmap.md`](./large-application-ai-native-roadmap.md): completed foundation, longer-term direction, and completion evidence.
35
- 8. [`goal-a-compiler-foundation.md`](./goal-a-compiler-foundation.md): completed extraction and generator foundation.
36
- 9. [`versioning.md`](./versioning.md): completed patch sequence and future sequencing rules.
37
- 10. [`goal-b-optimization-benchmarks.md`](./goal-b-optimization-benchmarks.md): active measurements, retained optimizations, and continuation rules.
38
- 11. [`goal-c-state-resource-research.md`](./goal-c-state-resource-research.md): research boundary only.
39
- 12. [`goal-d-routing-compatibility-decisions.md`](./goal-d-routing-compatibility-decisions.md): routing and islands decisions.
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.
40
46
 
41
47
  ## Resume Checklist
42
48
 
43
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.
44
- - [ ] Follow the first evidence-ready incomplete item in the 0.9 ordered queue; update it before broadening or reordering a patch.
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.
45
51
  - [ ] Confirm `package.json` still reports the actual current version; never infer release status from this plan.
46
52
  - [ ] Inspect the worktree and preserve unrelated or uncommitted changes.
47
53
  - [ ] Start later architecture work only by an explicit decision from the completed Goal A baseline.