Skip to content

docs: say alpha, not pre-release, across landing page and READMEs - #571

Merged
crs48 merged 3 commits into
mainfrom
docs/alpha-software-not-prerelease
Jul 19, 2026
Merged

docs: say alpha, not pre-release, across landing page and READMEs#571
crs48 merged 3 commits into
mainfrom
docs/alpha-software-not-prerelease

Conversation

@crs48

@crs48 crs48 commented Jul 19, 2026

Copy link
Copy Markdown
Owner

Why

xNet isn't pre-release any more — @xnetjs/* is on npm, the desktop app is downloadable, and the hub image ships. But it's still early, and the site said "pre-release" in a way that both undersells what's shipped and oversells how settled it is.

This makes the actual state explicit in more places: released, but alpha.

What changed

Landing page

  • Hero badge: Pre-release — built in the openAlpha — shipping, and still moving fast
  • Community section subtitle now leads with "alpha software — not pre-release" and names what changes (APIs, schemas, wire formats)

Compare page

  • xNet's three rows: maturity: 'pre-release''alpha'. Habitat's row is left alone — that's a third party's own status, not ours.
  • Both xNet footnotes and the "when the alternatives are better" copy reworded

Download page

  • An amber alpha banner above the platform cards, pointing users at .xnetpack export for their own backups

READMEs

  • Root README.md: an up-front callout, including the bit that's easy to miss — package version numbers are not a maturity signal (core is already past 2.x, and lockstep versioning means that number says nothing about stage)
  • All 18 publishable package READMEs get a short banner after the intro paragraph, so the notice is visible on the npm package page

Docs

  • introduction.mdx gets a matching :::caution callout (and llms-full.txt regenerated to match)

Verification

  • pnpm --filter ./site build passes — 124 pages, all site validators green (validate:compare covers the maturity changes)
  • Rendered and eyeballed /, /download, /compare, /docs/introduction/ in light and dark
Download page, dark mode

The banner uses the same amber tone as the existing MaturityBadge alpha/beta styling.

Note

The .changeset is a patch across all 18 packages. README text ships inside the npm tarball, so this is consumer-visible — but there are no code changes in this PR.

🤖 Generated with Claude Code

xNet is no longer pre-release: the @xnetjs/* packages are published on npm,
the desktop app is downloadable, and the hub image ships. But it is still
early — APIs, schemas and wire formats change between releases. The site and
READMEs said "pre-release", which understates what has shipped and overstates
how settled it is.

- Hero badge: "Pre-release — built in the open" -> "Alpha — shipping, and
  still moving fast"
- Community section, compare page copy and both compare footnotes reworded
- xNet's three compare rows: maturity 'pre-release' -> 'alpha' (Habitat's row
  is untouched — that is a third party's own status)
- Root README: an up-front alpha callout, including the note that package
  version numbers are not a maturity signal (core is already past 2.x)
- Download page: an alpha banner above the platform cards, pointing at
  .xnetpack export for backups
- Docs introduction: a matching caution callout
- All 18 publishable package READMEs: a short alpha banner after the intro,
  so the notice shows on the npm package page

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Signed-off-by: xNet Test <test@xnet.dev>
@crs48
crs48 temporarily deployed to pr-571 July 19, 2026 03:02 — with GitHub Actions Inactive
@github-actions

github-actions Bot commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

✓ Changelog fragment found — thanks!

@github-actions

github-actions Bot commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

🖼️ UI changes in this PR

Screens

✏️ Discover _(SSIM 0.982)_
before after diff
before after diff

Auto-captured by CI · run. Informational — not a blocking check.

github-actions Bot added a commit that referenced this pull request Jul 19, 2026
github-actions Bot added a commit that referenced this pull request Jul 19, 2026
@github-actions

github-actions Bot commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

Preview removed for PR #571.

github-actions Bot added a commit that referenced this pull request Jul 19, 2026
@crs48 crs48 added the skip-changelog Exclude this PR from the changelog label Jul 19, 2026
@crs48
crs48 temporarily deployed to pr-571 July 19, 2026 05:21 — with GitHub Actions Inactive
github-actions Bot added a commit that referenced this pull request Jul 19, 2026
@crs48
crs48 temporarily deployed to pr-571 July 19, 2026 06:49 — with GitHub Actions Inactive
github-actions Bot added a commit that referenced this pull request Jul 19, 2026
github-actions Bot added a commit that referenced this pull request Jul 19, 2026
github-actions Bot added a commit that referenced this pull request Jul 19, 2026
@crs48
crs48 merged commit 0e6d1b8 into main Jul 19, 2026
22 checks passed
@crs48
crs48 deleted the docs/alpha-software-not-prerelease branch July 19, 2026 06:59
github-actions Bot added a commit that referenced this pull request Jul 19, 2026
crs48 added a commit that referenced this pull request Jul 19, 2026
Follow-up to #571.

That PR swept the landing page, all 18 package READMEs, the compare page
and the docs introduction — but a final grep turned up one straggler:
the cryptography concept page still opened with "Since xNet is
prerelease software".

The underlying point is unchanged and still true — being early is
exactly *why* hybrid post-quantum crypto can ship as a clean
implementation with no migration debt. Only the label was wrong:

> Since xNet is prerelease software, hybrid security ships as a clean
implementation
> **Because xNet is still alpha,** hybrid security ships as a clean
implementation

`llms-full.txt` regenerated to match.

## What I deliberately left alone

- `Maturity` type still includes `'pre-release'` — Habitat's compare row
legitimately uses it; that's a third party's own status
- `xnet-prerelease` / `fw-xnet-prerelease` footnote **ids** —
identifiers, not copy, per the repo's identifier-vs-copy rule
- The 2026-06-23 changelog entry mentioning "pre-release resets" — a
dated historical record, not a current claim

## Verification

`pnpm --filter ./site build` passes — 42 static pages, all validators
green.

Site-only, no publishable package touched, so no changeset.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
crs48 added a commit that referenced this pull request Jul 19, 2026
…585)

Follow-on from #571 / #583, which made every human-readable surface say
"alpha" while `@xnetjs/core` still says `2.5.0`.

## The short version

**The renumber isn't available, and the number was never the problem.**

- npm never lets a version string be reused, and since **npm 11** (which
we pin in `npm-release.yml:40`) publish refuses to move `latest`
backwards. `@xnetjs/core@0.5.0` is publishable as a string but
incoherent as a release.
- The unpublish escape needs **<300 downloads/week**; core pulls
**2,120**. Door shut regardless of whether that traffic is real users or
bots.
- A true 0.x requires a **scope rename** — `@xnet/core` returns 404, so
it looks free. Costed as a real option rather than dismissed, since
nobody's meaningfully depending on us yet.
- Worth knowing: under node-semver `^0.2.3` and `~0.2.3` are
**identical**. 0.x buys safety through total friction, not signalling.

## Four enforcement gaps, all verified against the code

| Gap | Evidence |
|---|---|
| Stop hook checks a changeset **exists**, never that the bump matches
the diff | `assert-coverage.mjs:95-105` — regex for `name:
patch\|minor\|major` |
| `schema-check.yml` is a **stub that can never fail** | `:33,:41`
placeholder `{"schemas":[]}` both sides; `:49` zeroed fallback |
| ~25 protocol constants hand-maintained, **one already drifted** | TS
`CURRENT_PROTOCOL_VERSION = 4` vs Swift `protocolVersion: Int64 = 3` |
| Ignored packages ship wire-visible changes with no release intent |
`hub` (Docker image), `editor` (`content-v4`) both in `.changeset`
`ignore` |

The Swift drift is a live correctness bug, not just hygiene — it's the
enforcement gap made visible.

Also relevant: **JS has no tool that detects a breaking change.**
`cargo-semver-checks` has no equivalent; semver-ts.org's own tooling
appendix recommends hand-written assertions. That's why `CLAUDE.md`'s
"bump from the diff" is a *human* instruction.

## Recommendation

Keep the numbers. Write `STABILITY.md`. Scope semver to a surface we can
actually hold via api-extractor release tags
(`@public`/`@beta`/`@alpha`/`@internal`) — **a smaller honest promise
beats a bigger dishonest one**. Fix the drift, delete or implement the
stub. Then decide the rename separately, because a rename without gates
lands us back at `@xnet/2.5.0` in a year.

## Verification

- All 15 cited repo paths confirmed to exist
- All 4 mermaid diagrams parse (validated against the site's mermaid
build)
- Registry facts pulled live from npm, not recalled

Two things flagged as unproven in the doc: whether the `@xnet` scope is
genuinely claimable (an unpublished-but-reserved scope looks identical
from outside), and what the 2,120/week download traffic actually is.

Docs only — no changeset needed.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changelog Exclude this PR from the changelog

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant