The project follows Keep a Changelog and SemVer. Historical entries preserve older names where they describe older releases; current docs use the openElement contract.
※ Withdrawn partial artifacts (beta.1–beta.3) stay withdrawn from the active release story. History is kept, not rewritten.
Changelog
The maintained release record lives in docs/release/.
Current truth lives in:
Historical changelog details remain available through git history and release
evidence.
0.41.2
- Patch release: release-tooling self-repair (TP-0 of the 0.42.0 plan) — no
public API, topology or runtime-default changes.
- A resumed patch release no longer skips a version: the target is
re-derived from recorded evidence when a previous attempt already bumped
the package line (the 0.41.1 → 0.41.2 incident, reverted in
10038c4d).
- New release line-prose gate: the version-anchor bump records the www
roadmap current-line entry's superseded theme in
tools/project-constants.ts, and the www truth gate fails a release
until the new release theme is written (the 0.41.1 bump had shipped
alpha.19's theme under the v0.41.1 timeline entry).
0.41.1
- Patch release: tooling hardening and hygiene from the third-party audit's
fixable set — no public API, topology or runtime-default changes.
- adapter-vite
dist/.openElement magic strings converge on shared
internal/paths.ts constants; tools/lib/fs.ts gains shared
readText/readJson used across ten tooling files.
- The repo-hygiene gate now scans credential files and credential-shaped
content and rejects tracked binaries over 1 MiB outside intentional
design/e2e/fixture locations.
- vite 8.0.10 → 8.0.16 across root, examples and adapter-vite (the latter's
pin was the hidden cause of a tsc crash on dual-config typechecks).
- Version guards learn the stable line: www-truth retires the same-base
alpha line instead of disabling itself on stable versions, publish dry-run
skips already-published versions, and stale-claim fixtures no longer
assume an alpha current line.
CONTRIBUTING.md records the no-sloppy-imports rationale; stale merged
branches were pruned.
0.41.0
- Stable five-package release (ADR-0119): the interface freeze covers
defineElement, definePage, buildApp, the package graph, the supported
subpaths and the static/SPA semantics of defineApp; request-time data,
forms, sessions and cache stay explicitly unfrozen until 0.42/0.44.
- Adapter-vite internal subpaths pruned at the freeze (
app-vite,
build-context, head-injection, i18n-plugin, plugin,
generated-data-resolver, plugin-mdx, route-manifest,
cli/build-client, cli/build-ssg) — use the root, nitro-mount,
cli/build and sitemap instead (breaking; see the migration guide).
- The #390 external adopter pilot is retired by maintainer decision after
zero recruitment (recorded exception, not replaced with internal evidence);
the seven-day P0 watch on the 0.41.x patch line starts at this release.
- Aggregate migration guide from 0.40.x and every alpha line release:
docs/release/v0.41.0-migration.md and the site's /guide/migration page.
- ui control geometry is squared (
--btn-radius, --badge-radius,
--ui-control-radius: --radius-round → --radius-1, 6px) — visual
breaking change; update screenshots and custom control CSS.
- The release verifier now supports stable
x.y.z versions
(prerelease-only before), and the version guards stay honest on a stable
current line.
0.41.0-alpha.19
- Third audit round cleanup sweep (ADR-0118, issues #481-#506); no new
product surface.
- Fixes the reflect removal suppression (Boolean
default: true desync),
the popstate redirect-then-block URL fork, and For drift-token separator
collisions; the reflect browser spec joins the Firefox/WebKit smoke gates.
- Closes the export-star seams: the element root switches to explicit type
export lists,
SafeHtml/UnsafeHtml/StyleSheetRule leave the root for
real, and the internal open-element-render/open-element-hydration
subpaths are pruned from element exports (breaking type-surface changes;
see the GitHub prerelease notes for migration).
- Single-sources
HYDRATION_STRATEGIES and the routeInfo contract, sinks
the release executor into release.ts with orchestration tests, and
preserves curated release-note sections so migration records stay in the
durable record.
- Mechanizes the audit's edge findings: www truth catches bare version
mentions, anchor gates catch body drift, the assertion-style gate covers
every package test, graph direction rules are explicit, and the deno-api
check catches
globalThis.Deno/destructuring/npm: patterns.
- Deletes the third-round dead-code inventory (renderDsdStream,
bindHydrateEvents, generateHonoEntryCode, tools/test-fixtures, orphan
tasks, dead config entries) and rewrites the always-true test assertions.
0.41.0-alpha.18
- Fixes the
reflect: true static-prop write loop and SSR attribute
overwrite; resolves the root-level <Show>/<For> CSR edge; unifies
prop attribute casing; makes For branch tokens content-sensitive;
fixes client-runtime double hydration; runs router guards on history
traversal; honors prefers-color-scheme in theme-init.
- Shares one CEM admission plan across dev/SSR/SSG; dynamic-route render
failures now fail the build (opt-out
'warn'); failed pages never ship
nor enter the ISR manifest; static non-200 outcomes are summarized.
- Local releases land evidence and closure on main; anchor gates reject
stale version claims; the bump maintains every currency line; the
release executor resumes from failures.
- Adds WebKit smoke to CI, gates examples checks, single-sources the
guide with real Chinese rendering, and covers the SPA action chain in a
real browser.
- Removes dead exports, fields and scripts (breaking; see the GitHub
prerelease notes for migration), removes
renderIntent.streaming,
converges fmt/lint exclusions, and retires stale files and config entries.
0.41.0-alpha.17
- Covers hydration and binding behavior in a real browser: signal text
patching, event hydration, SSR/hydration mismatch fallback and form
submission through shadow boundaries.
- Wires SSR error collection: a failing route render produces a defined 500
result with
RenderError diagnostics; the unread hydrationHints
contract is removed.
- Converges island declaration construction, single-instantiates the entry
descriptor, deduplicates the SPA/SSG phase-2 blocks and shares route
rendering helpers; deletes the unwired external-resolver, the
clientOnlyTags chain and dead build-context fields.
- Counts every source file in the coverage denominator and re-baselines
thresholds on measured values; the critical-path gate runs its e2e suites
for real and can no longer skip them on failure output.
- Adds a Firefox smoke project to CI for the core DSD/hydration/theme
specs.
- Adds a mechanical version-anchor gate across governance documents, and
the release bump now maintains
ACTIVE_EXECUTION_VERSION.
- Fixes
publish-existing evidence: records the true previous package
line, rewrites GitHub release notes from completed evidence, and
generates the release closure record automatically.
- Moves adapter build-time utilities from the
@openelement/element root
to @openelement/element/build-utils, stops exporting internal router
types from the @openelement/app root, and aligns PACKAGE_SURFACE.md
with a machine-checked exports inventory. Breaking surface removals:
element root build utilities (migrate to ./build-utils), app root
RouteConfig/RouterInstance/RouterMode types, adapter-vite
ExternalManifest type and SsgPageOutput.hydrationHints.
- Publishes the #390 external adopter pilot kit and launches recruitment.
0.41.0-alpha.16
- Aligns SSR and hydration event markers for custom-element hosts and
Show/For branches; hydration validates marker counts and branch tokens
and falls back to client re-render on mismatch.
- Merges static-props
observedAttributes at class-definition time so
attribute-to-signal synchronization works in real browsers.
- Matches island chunks via the client build manifest, fixes base64url hash
handling, names
.tsx/.jsx island chunks, and normalizes Windows
drive-letter island paths (#460).
- Enforces the npm
latest dist-tag invariant for prereleases in the publish
tooling and release verifier.
- Clears current-truth drift across governance documents and removes dead
gate triggers (ADR-0116 packages A and E).
0.41.0-alpha.15
- Modernizes the CI runtime (GitHub Actions Node 24 with reviewed immutable
SHAs) and makes external review advisory.
- Enforces current-truth wording mechanically across governance documents and
the website.
- Ships the #390 external-adopter pilot kit, cross-platform published-consumer
runs and a five-package public-interface snapshot for the freeze rehearsal.
- Records the stable-readiness dossier; #390 and #37 remain open by design.
0.41.0-alpha.14
- Recovers the release line with an exact-version starter, verified published
consumers and honest two-stage release evidence.
- Publishes all five packages under the
alpha dist-tag with post-publish
Deno, Node ESM, Nitro and third-party Web Component smoke evidence.
0.41.0-alpha.13 (publication failed; changes shipped in alpha.14)
- Removes the alpha-only
defineLayout alias; use defineElement with the same
arguments for layout elements.
- Restores declared static-prop defaults when reflected attributes are removed.
- Hardens SSR prop injection, custom-element hydration, params parsing, nested
SSR depth, and adopted stylesheet composition.
- Stabilizes SPA action errors, caches same-route GET requests, bounds render
data contexts, and compiles client routes into a declaration-ordered trie.
- Removes Preact bridge top-level await and public data-context mutation hooks.
- Hardens Adapter Vite i18n, head sanitization, sitemap, island manifests,
npm-specifier rewriting, asynchronous manifest reads, CORS defaults, and
AST-based route metadata extraction.
- Moves UI tokens to a CSS source of truth with generated-output drift checks,
and makes Create template generation asynchronous, deterministic, and bound
to the five-package same-version release invariant.
0.41.0-alpha.11 (release candidate)
- Restores frozen-install and changed-path/release workflow truth.
- Fixes query decoding, SPA page-host data, dialog inert restoration, and
theme propagation.
- Consolidates the Element/Adapter protocol seam and removes verified dead
DSD, CEM, route-scanner, and UI escape code.
- Repairs clean Nitro Workers builds, semantic visual smoke, and package
artifact allowlists.
- Enforces publishable runtime coverage at 69% lines, 81% branches, and 72%
functions; tag and GitHub prerelease remain blocked until post-publish
consumers pass.