Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Elements are the durable application contract; JSX and Basic Element are the
authoring layer; Declarative Shadow DOM is the default server representation;
interactive regions upgrade selectively.

Published package line: `0.41.0-alpha.19` (`v0.41.0-alpha.19`). This release
Published package line: `0.41.0` (`v0.41.0`). This release
keeps the project in alpha while the five-package product and external adoption
evidence continue to mature; the abandoned beta naming is not an active line.

Expand Down Expand Up @@ -51,7 +51,7 @@ external adoption. It is not presented as an already-achieved market claim.

## Current release state

The five-package convergence is published as `0.41.0-alpha.19`. npm beta.1
The five-package convergence is published as `0.41.0`. npm beta.1
through beta.3 remain withdrawn partial artifacts and are not compatibility
baselines. External adopter pilot #390 remains the primary repository-external
condition before the project can make a stability commitment. Alpha.18
Expand Down
4 changes: 2 additions & 2 deletions README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
Elements 是可长期保存的应用组件模型;JSX 与 Basic Element 是作者层;
Declarative Shadow DOM 是默认服务端表示;交互区域按需升级。

已发布包线为 `0.41.0-alpha.19`(`v0.41.0-alpha.19`)。项目继续使用 alpha
已发布包线为 `0.41.0`(`v0.41.0`)。项目继续使用 alpha
命名,直到五包产品与外部采用证据充分成熟;已放弃的 beta 命名不再是当前版本线。

## 当前产品
Expand Down Expand Up @@ -41,7 +41,7 @@ official build path = Vite + Nitro

## 当前发布状态

五包收敛已作为 `0.41.0-alpha.19` 发布。npm beta.1 至 beta.3 仍是已撤回的
五包收敛已作为 `0.41.0` 发布。npm beta.1 至 beta.3 仍是已撤回的
不完整历史产物,不构成兼容基线。外部 adopter pilot #390 仍是作出稳定性承诺前
最重要的仓库外条件。Alpha.18 已完成第二轮审计清扫(ADR-0117)。

Expand Down
4 changes: 2 additions & 2 deletions docs/current/VERSION_PLAN.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# v0.41.0 — stable five-package release plan

> Current source package line: `v0.41.0-alpha.19`\
> Current npm registry line: `v0.41.0-alpha.19`\
> Current source package line: `v0.41.0`\
> Current npm registry line: `v0.41.0`\
> Active release target: `v0.41.0`\
> Next stability candidate: `v0.41.0` (this plan)\
> Current maturity stage: alpha (stable release in preparation)
Expand Down
4 changes: 2 additions & 2 deletions docs/governance/PROJECT_WORKFLOW.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ complete because an issue, chat message, or SOP says it is complete. It is
complete only when the repository contains the decision, the execution package,
the implementation, and the gates that prove the claim.

Current execution anchor: published package line `v0.41.0-alpha.19`, completed
implementation anchor `v0.41.0-alpha.19`, active sweep target
Current execution anchor: published package line `v0.41.0`, completed
implementation anchor `v0.41.0`, active sweep target
`v0.41.0-alpha.18`, and alpha maturation under `docs/current/VERSION_PLAN.md`.
OpenElement is one Web Components-native,
static-first application framework: Basic Element is an authoring mode, not a
Expand Down
6 changes: 3 additions & 3 deletions docs/roadmap/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ Execution and release state follow the
[`Project Workflow`](../governance/PROJECT_WORKFLOW.md).

> Source of truth for forward product planning.\
> Published package line: `v0.41.0-alpha.19`.\
> Active execution target: `v0.41.0-alpha.19`.\
> Published package line: `v0.41.0`.\
> Active execution target: `v0.41.0`.\
> Current implementation state: five-package convergence is published;
> alpha.17 closed the first audit remediation and alpha.18 completed the
> second audit sweep (ADR-0117).\
Expand Down Expand Up @@ -113,7 +113,7 @@ making the standard Custom Element contract span both layers. See the official

## Current release state

`0.41.0-alpha.19` is the published package line. npm beta.1 through beta.3 are
`0.41.0` is the published package line. npm beta.1 through beta.3 are
immutable partial artifacts and remain withdrawn from the active release story.
The planned beta name was cancelled so the version label honestly reflects
that breaking architecture and interface changes are still allowed.
Expand Down
6 changes: 3 additions & 3 deletions docs/status/STATUS.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# OpenElement Status

> Updated: 2026-07-24\
> Repository package line: `v0.41.0-alpha.19`\
> npm registry line: `v0.41.0-alpha.19`\
> Active release target: `v0.41.0-alpha.19`\
> Repository package line: `v0.41.0`\
> npm registry line: `v0.41.0`\
> Active release target: `v0.41.0`\
> Next stability candidate: `v0.41.0`\
> Product graph: five packages\
> Current maturity stage: alpha
Expand Down
2 changes: 1 addition & 1 deletion packages/adapter-vite/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@openelement/adapter-vite",
"version": "0.41.0-alpha.19",
"version": "0.41.0",
"exports": {
".": "./src/index.ts",
"./nitro-mount": "./src/nitro-mount.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/app/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@openelement/app",
"version": "0.41.0-alpha.19",
"version": "0.41.0",
"exports": {
".": "./src/index.ts",
"./hono": "./src/hono.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/create/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@openelement/create",
"version": "0.41.0-alpha.19",
"version": "0.41.0",
"exports": "./src/cli.ts",
"imports": {},
"tasks": {
Expand Down
2 changes: 1 addition & 1 deletion packages/create/src/version.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
/** The published CLI version, embedded so packed npm installs are self-contained. */
export const CREATE_VERSION = '0.41.0-alpha.19';
export const CREATE_VERSION = '0.41.0';
2 changes: 1 addition & 1 deletion packages/element/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@openelement/element",
"version": "0.41.0-alpha.19",
"version": "0.41.0",
"exports": {
".": "./src/index.ts",
"./jsx-runtime": "./src/jsx-runtime.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@openelement/ui",
"version": "0.41.0-alpha.19",
"version": "0.41.0",
"exports": {
".": "./src/index.ts",
"./open-button": "./src/open-button.tsx",
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/generated-manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"schemaVersion": "1.0.0",
"packageName": "@openelement/ui",
"version": "0.41.0-alpha.19",
"version": "0.41.0",
"description": "Open Props Web Component library for openElement",
"author": "openElement",
"license": "MIT",
Expand Down
20 changes: 13 additions & 7 deletions tools/check-strategic-docs.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ Deno.test('stale currency claims: the current line and history mentions pass', (

Deno.test('stale currency claims: body-drift heuristics catch stale "current line" sentences', () => {
const patterns = staleCurrencyClaimPatterns();
const previousAlpha = PREVIOUS_PACKAGE_VERSION.match(/-alpha\.(\d+)$/u)![1];
const currentAlpha = PACKAGE_VERSION.match(/-alpha\.(\d+)$/u)![1];
const previousAlpha = PREVIOUS_PACKAGE_VERSION.match(/-alpha\.(\d+)$/u)?.[1] ?? '0';
const currentAlpha = PACKAGE_VERSION.match(/-alpha\.(\d+)$/u)?.[1];
const staleClaims = [
// The pre-fix STATUS.md:14 sentence shape (issue #482).
`Alpha.${previousAlpha} is the current published and verified line.`,
Expand All @@ -68,11 +68,17 @@ Deno.test('stale currency claims: body-drift heuristics catch stale "current lin
`stale body claim must be forbidden: ${claim}`,
);
}
const allowed = [
// The corrected STATUS.md:14 sentence shape names the current alpha.
`Alpha.${currentAlpha} is the current published and verified line.`,
`Alpha.${previousAlpha} remains the previous verified baseline.`,
];
const allowed = currentAlpha
? [
// The corrected STATUS.md:14 sentence shape names the current alpha.
`Alpha.${currentAlpha} is the current published and verified line.`,
`Alpha.${previousAlpha} remains the previous verified baseline.`,
]
: [
// On a stable line the current claim names the stable version itself.
`${PACKAGE_VERSION} is the current published and verified line.`,
`Alpha.${previousAlpha} remains the previous verified baseline.`,
];
for (const text of allowed) {
assert(
!patterns.some((pattern) => pattern.test(text)),
Expand Down
12 changes: 9 additions & 3 deletions tools/check-version-anchors.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,15 @@ Deno.test('stale claims: a stale tag before the first head anchor is still in th
});

Deno.test('stale claims: the current line never matches its own stale prefix', () => {
// `0.41.0-alpha.1` (stale) is a prefix of the current `0.41.0-alpha.17`;
// the numeric boundary must keep the current line from failing.
assert(stalePackageVersionClaims().some((claim) => PACKAGE_VERSION.startsWith(claim)));
// `0.41.0-alpha.1` (stale) is a prefix of a current prerelease like
// `0.41.0-alpha.17`; the numeric boundary must keep the current line from
// failing. On a stable current line there is no such prefix — the current
// version simply never matches a stale claim either way.
if (PACKAGE_VERSION.includes('-')) {
assert(stalePackageVersionClaims().some((claim) => PACKAGE_VERSION.startsWith(claim)));
} else {
assert(!stalePackageVersionClaims().some((claim) => PACKAGE_VERSION.startsWith(claim)));
}
assertEquals(findStaleAnchorFailures(readerFrom(goodFiles())), []);
});

Expand Down
12 changes: 9 additions & 3 deletions tools/check-www-current-truth.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { exists, walk } from './lib/fs.ts';
import { PACKAGE_VERSION } from './project-constants.ts';
import { PACKAGE_VERSION, PREVIOUS_PACKAGE_VERSION } from './project-constants.ts';

type Issue = { file: string; text: string };

Expand All @@ -9,13 +9,19 @@ const sourceRoots = [
];

const [versionBase, prerelease = ''] = PACKAGE_VERSION.split('-');
const prereleaseMatch = prerelease.match(/^(alpha|beta|rc)\.(\d+)$/u);
// After a stable bump the current version carries no prerelease suffix, but
// the previous prerelease line is exactly what must stay retired: build the
// pattern from PREVIOUS_PACKAGE_VERSION in that case.
const [retiredBase, retiredLine = ''] = prerelease
? [versionBase, prerelease]
: PREVIOUS_PACKAGE_VERSION.split('-');
const prereleaseMatch = retiredLine.match(/^(alpha|beta|rc)\.(\d+)$/u);
// Retired prerelease claims are flagged with or without the `v` prefix and in
// the short `alpha.N` form; only numbers below the current line match, so the
// current version itself never trips the gate.
const earlierPrereleasePattern = prereleaseMatch && Number(prereleaseMatch[2]) > 0
? new RegExp(
`(?:v?${versionBase.replaceAll('.', '\\.')}-${prereleaseMatch[1]}|\\b${
`(?:v?${retiredBase.replaceAll('.', '\\.')}-${prereleaseMatch[1]}|\\b${
prereleaseMatch[1]
})\\.(?:${
Array.from({ length: Number(prereleaseMatch[2]) }, (_, index) => index).join('|')
Expand Down
6 changes: 3 additions & 3 deletions tools/project-constants.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export const PACKAGE_VERSION = '0.41.0-alpha.19';
export const PACKAGE_VERSION = '0.41.0';
export const PACKAGE_VERSION_TAG = `v${PACKAGE_VERSION}`;
export const ACTIVE_EXECUTION_VERSION = 'v0.41.0-alpha.19';
export const ACTIVE_EXECUTION_VERSION = 'v0.41.0';
export const RETAINED_PACKAGE_NAMES = Object.freeze([
'@openelement/adapter-vite',
'@openelement/app',
Expand Down Expand Up @@ -49,7 +49,7 @@ export const NITRO_COMPATIBILITY_DATE = '2026-06-12';
// single source of truth for the "from" side of version-anchor replacements
// (see buildVersionAnchorReplacements in tools/autoflow/release.ts). It is
// kept in sync automatically by updateProjectConstants() during a bump.
export const PREVIOUS_PACKAGE_VERSION = '0.41.0-alpha.18';
export const PREVIOUS_PACKAGE_VERSION = '0.41.0-alpha.19';
export const PREVIOUS_PACKAGE_VERSION_TAG = `v${PREVIOUS_PACKAGE_VERSION}`;

/**
Expand Down
2 changes: 1 addition & 1 deletion www/app/data/version.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// Current published package line. Release tooling owns the next bump.
export const OPENELEMENT_VERSION = 'v0.41.0-alpha.19';
export const OPENELEMENT_VERSION = 'v0.41.0';
4 changes: 2 additions & 2 deletions www/app/routes/roadmap.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ type TimelineEntry = {

const entries: TimelineEntry[] = [
{
version: 'v0.41.0-alpha.19',
version: 'v0.41.0',
theme: 'third audit cleanup sweep',
copy:
'The published alpha line closes three full-repository audit rounds and ships the unified product and website surface.',
Expand Down Expand Up @@ -422,7 +422,7 @@ export class RoadmapPage extends OpenElement {
{entries.map((phase) => {
// The current-line stamp follows the bump-maintained anchor so a
// release bump re-marks the timeline without manual edits.
const stamp = phase.version === 'v0.41.0-alpha.19' ? 'CURRENT' : phase.stamp;
const stamp = phase.version === 'v0.41.0' ? 'CURRENT' : phase.stamp;
return (
<div class={`tl-row tl-${phase.state}`}>
<span class='tl-node' aria-hidden='true'></span>
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading