Skip to content

Commit 8e4132a

Browse files
author
DevBot
committed
docs(roadmap): adopt Beta.2 product convergence and public Alpha (ADR-0152)
1 parent 7902834 commit 8e4132a

22 files changed

Lines changed: 430 additions & 1173 deletions

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ and interactive regions activate selectively.
1010
The published stable line remains the 0.43 series on npm `latest`.
1111
`v0.44.0-beta.2` is the current public v0.44 prerelease — Beta.2,
1212
Productization + Governance Offload (ADR-0151) — published under dist-tag
13-
`beta`. The next stage is Beta.3 (`v0.44.0-beta.3`).
13+
`beta`. The accepted next work is Beta.2.1–Beta.2.3 convergence, followed by public
14+
`v1.0.0-alpha.1` after admission ([roadmap](docs/roadmap/ROADMAP.md)).
1415
The `1.0.0` target remains unscheduled and requires separate evidence and approval.
1516

1617
```text
@@ -21,6 +22,11 @@ current proven scope = static-first applications with fullstack output paths
2122
Source package line: `0.44.0-beta.2` (`v0.44.0-beta.2`).
2223
npm registry line: `v0.44.0-beta.2` (prerelease, dist-tag `beta`); npm `latest` remains the stable `0.43.3` line.
2324

25+
The accepted product direction is **Element / UI / Router**, with Route Mode
26+
and Framework Mode sharing one core. [Product boundaries](docs/architecture/product-model.md)
27+
and [the active plan](docs/current/VERSION_PLAN.md) distinguish planned convergence
28+
from the currently shipped package surface.
29+
2430
## Why
2531

2632
OpenElement lets one Custom Element contract work in a standalone library and

README.zh.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ DOM 是默认服务端表示;交互区域按需升级。
1212
npm registry 行为 `v0.44.0-beta.2`——预发布版本(dist-tag `beta`);npm `latest` 仍为
1313
已发布的稳定 0.43 线。
1414

15+
已确认的产品方向是 **Element / UI / Router**。Route Mode 接受显式路由记录,
16+
Framework Mode 默认由文件路由生成记录,两者共用内核。自维护 URLPatternList
17+
是核心技术资产;每次替换同步清理旧实现。下一步为 Beta.2.1–Beta.2.3,验收后
18+
进入公开 `1.0.0-alpha.1`。详见[产品边界](docs/architecture/product-model.md)
19+
[路线图](docs/roadmap/ROADMAP.md);以下包图描述当前已发布能力。
20+
1521
## 当前产品
1622

1723
```text

deno.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@
4242
"www:apply-seo": "deno run --allow-read --allow-write tools/apply-www-seo.ts",
4343
"www:pagefind": "cd www && deno run --config ../deno.json --allow-read --allow-write --allow-run --allow-env --allow-net --allow-ffi --allow-sys build-pagefind.ts",
4444
"preview": "cd www && deno run --allow-read --allow-write --allow-net --allow-env --allow-ffi npm:vite preview --config vite.config.ts",
45-
"workflow:check": "deno run --allow-read --allow-run=git tools/check-project-workflow.ts && deno task v044:orchestration:check",
46-
"v044:orchestration:check": "deno run --allow-read tools/check-v044-orchestration.ts",
45+
"workflow:check": "deno run --allow-read --allow-run=git tools/check-project-workflow.ts",
4746
"v044:executor:check": "deno run --allow-read --allow-run=kimi tools/check-v044-executor.ts",
4847
"v044:role": "deno run --allow-read --allow-run tools/run-v044-role.ts",
4948
"docs:check-role-neutral": "deno run --allow-read tools/check-role-neutral-docs.ts",

docs/adr/ADR-0151-v044-release-train-retopology.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# ADR-0151: v0.44 release train retopology
22

3+
> Future release scheduling is superseded by [ADR-0152](../adr/ADR-0152-product-router-and-alpha-convergence.md). Historical execution and release evidence below are retained; they do not schedule public 1.0 Alpha.
4+
35
- Status: ACCEPTED (2026-09-02, maintainer directive)
46
- Date: 2026-09-02
57
- Supersedes: the Beta-topology portion of ADR-0149 — the five-Beta mapping is
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
# ADR-0152: Three products, owned routing core and public 1.0 Alpha
2+
3+
- Status: ACCEPTED (2026-09-07, explicit maintainer direction)
4+
- Supersedes: ADR-0151's future release topology; upstream-only URLPatternList
5+
policy in #1324; cleanup-only-at-Beta.2.3 sequencing; previous file-only Router
6+
proposal. Historical release evidence remains unchanged.
7+
- Preserves: ADR-0148 compiler/Vite boundary, exact-SHA release evidence,
8+
protected promotion and release GO requirements, human RC/Stable authority.
9+
- Tracking: [#1341](https://github.com/open-element/openelement/issues/1341).
10+
11+
## Context
12+
13+
Current package/tool boundaries obscure product responsibilities. Repeated route,
14+
request, document and governance owners increase maintenance work. The maintainer
15+
approved a three-working-day convergence target using existing implementations,
16+
with continuous deletion and a real application slice before public Alpha admission.
17+
This is a timebox target, not proof that implementation or publication is complete.
18+
19+
## Decision
20+
21+
### Products and dependencies
22+
23+
The products are Element, UI and Router. Element owns compiled Web Components
24+
execution, serialization and DOM claim/update. UI is a selected component library
25+
built on Element, independent of Router. Router has two modes:
26+
27+
- Route Mode consumes explicit records; its matching core is independent of
28+
Element, Hono, Vite and filesystem access.
29+
- Framework Mode defaults to file routing and adds page data, forms, Document,
30+
Element rendering, navigation, SSR/SSG and official Vite integration. UI is optional.
31+
32+
Explicit and generated records converge on one RouteTable/RouteResolution.
33+
File paths own generated route paths; no duplicate `route.path` declaration.
34+
Composition declares mount boundaries, deterministic order and collision behavior.
35+
Explicit order is preserved; file generation owns its documented ordering policy.
36+
A selected URL record owns its method map: unsupported methods return 405 rather
37+
than falling through to a different URL pattern. Query parameters and path captures
38+
stay separate. Public browser projections exclude server handlers and host bindings.
39+
40+
Products are not package counts. Existing `app`, `adapter-vite` and `create` remain
41+
implementation/distribution/tooling surfaces until a justified migration changes
42+
exports. No mandatory package renaming or new broad UI design system is implied.
43+
44+
### URLPatternList is an owned core asset
45+
46+
Start from Justin Fagnani's `url-pattern-list` v0.5.0, source commit
47+
`4911e649cc11860c7da90c9d0d9b05626c5cbb83`, with verified MIT attribution and a
48+
compact provenance/divergence record. Own list indexing, ordered traversal,
49+
differential tests and measured performance. Luca Casonato's proposals inform
50+
structured matching and conservative fallback; they are not merged production
51+
Deno implementations to transplant.
52+
53+
URLPattern remains the platform/polyfill single-pattern grammar and capture
54+
owner. Candidate pruning must not discard a valid earlier match; final `exec`
55+
cannot recover a candidate already discarded by an incorrect index. Unproven
56+
optimizations use a conservative candidate path merged in the same sequence order.
57+
The linear reference oracle belongs in tests. No global API injection, claimed
58+
standard polyfill, public tree/parser contract, or full replacement URLPattern
59+
engine. Initial route tables may be rebuilt and atomically replaced; complex
60+
incremental mutation and speculative native/WASM optimization are deferred.
61+
62+
References: [Justin's source](https://github.com/justinfagnani/url-pattern-list),
63+
[Luca's proposal](https://github.com/whatwg/urlpattern/pull/166),
64+
[Deno experiment](https://github.com/denoland/deno/pull/14502).
65+
66+
### Framework responsibility
67+
68+
Hono owns HTTP Context/middleware/Response integration without a second page
69+
winner. Useful page-data/form abstractions share one request lifecycle; preserve
70+
validation errors, status, redirects and serialization boundaries. Document owns
71+
resolved page meaning; Element serializes it. Layouts compose presentation without
72+
a second data scheduler. Vite owns the official build/development integration.
73+
74+
SSG may read external build-time data; personalized results must not become public
75+
static output. Sitemap/search use eligible public route identity/catalog data,
76+
not an enumeration of private request-specific Documents. Navigation coordinates
77+
abort, stale results, history and required browser fallbacks.
78+
79+
### Continuous reduction
80+
81+
Every replacement retires its displaced implementation, callers, compatibility
82+
layers, duplicated facts and obsolete checks/docs in the same verified change.
83+
Cleanup begins in Beta.2.1, continues in Beta.2.2 and closes in Beta.2.3. Measure
84+
owners, execution hops, custom scripts/tasks/checkers and retained obligations;
85+
line deletion is not a quota. Preserve required behavior with regression evidence,
86+
not permanent duplicate paths. Git is the default operational-history archive.
87+
88+
The obsolete `check-v044-orchestration` script/test/task is retired with this
89+
planning change: it pins current documents to completed Alpha workspace IDs and
90+
withdrawn Beta scheduling. Current workflow, version/release truth and exact-SHA
91+
release gates remain; no replacement historical-topology checker is introduced.
92+
93+
### Release topology and timebox
94+
95+
```text
96+
published v0.44.0-beta.2
97+
-> beta.2.1 Router/core + continuous cleanup
98+
-> beta.2.2 Framework/Document + continuous cleanup
99+
-> beta.2.3 cleanup closure + application admission
100+
-> public v1.0.0-alpha.1 and subsequent Alpha iterations
101+
-> evidence-gated v1.0.0-rc.1
102+
-> separately admitted Stable
103+
```
104+
105+
The former Beta.3 lane becomes 1.0 Alpha; its unfinished work remains tracked.
106+
Historic v0.44 alpha workspace IDs remain internal/unpublished. Public 1.0 Alpha
107+
uses npm `alpha`; npm `latest` stays on the last admitted stable release.
108+
109+
Target three working days from implementation start: Day 1 core plus a minimal
110+
Cloudflare/Vite spike, Day 2 representative Framework flow, Day 3 remaining cleanup
111+
and admission evidence. Intermediate public Beta checkpoints retain release gates;
112+
development may proceed on an accepted contract without waiting for publication.
113+
No automatic deadline waiver or Beta.2.4. A preview may enter real application work
114+
while release blockers remain explicitly open; it is not a completed Beta release.
115+
116+
## Acceptance and consequences
117+
118+
[#1340](https://github.com/open-element/openelement/issues/1340) owns Alpha admission:
119+
matching/HTTP correctness, a packed real-app flow, SSR/SSG/claim/navigation/forms,
120+
server/client separation, required runtime/browser coverage, cleanup and exact
121+
candidate release evidence. Cloudflare is the first integration target; Node and
122+
Deno retain full qualification in their agreed contract, Bun/Nitro their smoke
123+
scope, Chromium/Firefox/WebKit their required browser coverage. Missing evidence
124+
is never a pass. Broader benchmarks, prolonged application qualification and UI
125+
expansion do not block entry unless they expose a core correctness failure.
126+
127+
Release automation must implement the new successor/channel distinction (#1323,
128+
#1334) before publication. This ADR and its documentation PR do not change package
129+
versions, publish artifacts, grant Stable readiness, or claim runtime migration
130+
has already happened. Planning may change now while code still implements the
131+
published baseline; outstanding implementation is visible in the issue graph.

docs/architecture/product-model.md

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,33 @@
11
# Product model
22

3-
OpenElement is a Web Components-native application framework. A standard Custom
4-
Element is the durable component boundary. JSX is compiled authoring input, not a
5-
public runtime virtual-DOM contract. The supported package graph contains `element`,
6-
`app`, `adapter-vite`, `create`, and optional `ui`.
3+
OpenElement has three products: **Element**, **UI** and **Router**. This is the
4+
accepted target under [ADR-0152](../adr/ADR-0152-product-router-and-alpha-convergence.md);
5+
Beta.2.x issues track implementation. It does not claim all target APIs already ship.
6+
7+
| Product | Responsibility | Dependency boundary |
8+
| ---------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
9+
| Element | Compiled Web Components, reactivity, lifecycle, server serialization, fresh DOM and existing-DOM claim/update, styles | Independent component execution foundation |
10+
| UI | Selected reusable components, interaction, accessibility, themes and composition | Element; Router optional |
11+
| Router: Route Mode | Explicit records, matching/resolution, HTTP and browser integration entry points | Matching core independent of Element, Hono, Vite and filesystem |
12+
| Router: Framework Mode | File routing by default, page data/forms/errors, layouts, Document, SSR/SSG, navigation and Vite integration | Same Router core plus Element; UI optional |
13+
14+
A standard Custom Element is the durable component boundary. JSX is compiled
15+
input, not a public runtime virtual-DOM contract. Element's compiler semantics
16+
remain separate from Vite integration under ADR-0148.
17+
18+
Explicit routes and file-generated routes share one RouteTable/RouteResolution.
19+
File routes never require a second handwritten path declaration. The Router owns
20+
composition/order/collision and HTTP policy; its self-maintained URLPatternList
21+
owns candidate indexing and ordered matching. URLPattern owns single-pattern
22+
syntax and captures. Public browser records exclude server-only code and bindings.
23+
24+
Element execution and URLPatternList are strategic technical assets. Vite adapter,
25+
CLI/create, deployment integration and compiler tooling are supporting surfaces,
26+
not extra product lines. Current packages remain `element`, `app`, `adapter-vite`,
27+
`create` and optional `ui` until an explicit export migration is implemented.
28+
Product count is not npm package count.
29+
30+
The initial application target is HTML-first content and dynamic business pages,
31+
forms and local interactive components. UI stays selected; a full design system,
32+
generic RPC/ORM/cache/queue framework and comprehensive offline application data
33+
layer are outside this convergence sprint.

docs/current/DENO_DESKTOP_TARGET.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ plain modules is mechanical, but the `render()` bodies then fail OEC9007
6767
re-authoring of nine large renders against the compiled grammar with no
6868
browser E2E safety net — not a bounded fix. The ruling: the desktop examples
6969
are **excluded from qualifying consumer evidence** and the re-authoring is
70-
carried to Beta.3 (B3.8).
70+
carried to public 1.0 Alpha (#1311); examples remain frozen during Beta.2.x.
7171

7272
`deno task check` and `deno task smoke` stay green and CI-gated
7373
(`examples:check`), so the examples still qualify the SPA runtime, loaders,

0 commit comments

Comments
 (0)