Skip to content

Release channels: dev (default) and stable - #107

Open
raphaelvigee wants to merge 4 commits into
mainfrom
docs/release-channels
Open

Release channels: dev (default) and stable#107
raphaelvigee wants to merge 4 commits into
mainfrom
docs/release-channels

Conversation

@raphaelvigee

@raphaelvigee raphaelvigee commented Aug 31, 2026

Copy link
Copy Markdown
Member

What

Adds the concept of a release channel — the stream a heph release comes from.

Channel Repository Status
dev hephbuild/heph-artifacts-v1 default — what the site showed until now
stable hephbuild/heph non-default; no release published yet

Site

  • website/src/releaseChannels.ts — single source of truth: channel metadata, the repo each publishes to, and DEFAULT_RELEASE_CHANNEL. Flipping which channel readers get by default is a one-line change there.
  • Every code block carrying a version or a release URL gets a channel selector on top; the selection is shared page-wide (context mounted in Root) and persisted in localStorage. ?channel=<id> pins a channel for one visit (same spirit as ?search=).
  • Docs blocks now use <HEPH_ARTIFACTS_URL> instead of hardcoded heph-artifacts-v1 download URLs, so they follow the selected channel. Side effect: blocks titled ci.hephconfig finally get substituted — the old wrapper matched the exact title .hephconfig, so their <HEPH_VERSION_URL> shipped raw.
  • Landing chrome (nav version strip) keeps quoting the default channel.
  • A channel with no release yet — stable, today — says so, instead of the generic "could not resolve the version" error.

Installer

HEPH_CHANNEL=dev|stable selects the repository; HEPH_VERSION still pins a tag within it. Unknown channel fails with a clear message.

Docs

New reference page Release channels, registered in the sidebar and linked from getting started and the version key. Plugin skill references (heph-expert, heph-go) updated in the same change per the drift rule; plugin/marketplace versions bumped.

Checks

lint clean, build succeeds. Screenshotted both channel states in the dev server.

🤖 Generated with Claude Code

https://claude.ai/code/session_017fcBWHbsCSTCSopBkF8W8t

raphaelvigee and others added 2 commits August 31, 2026 12:55
Introduce the concept of a release channel: the stream a heph release comes
from. Two channels ship: `nightly` (from hephbuild/heph-artifacts-v1, the
default and what the site showed until now) and `stable` (from hephbuild/heph),
which has no release published yet.

Site:

- `website/src/releaseChannels.ts` is the single source of truth: channel
  metadata, the repository each publishes to, and `DEFAULT_RELEASE_CHANNEL`.
  Making another channel the default is a one-line change there.
- A channel selector is drawn on top of every code block carrying a version or
  release URL, and the choice is shared page-wide (context in `Root`) and
  persisted in localStorage. `?channel=<id>` pins a channel for a single visit.
- Docs blocks use `<HEPH_ARTIFACTS_URL>` in place of hardcoded
  heph-artifacts-v1 download URLs, so they follow the selected channel. This
  also fixes blocks titled `ci.hephconfig`, whose placeholders were never
  substituted (the old wrapper matched the exact title `.hephconfig`).
- Landing chrome keeps quoting the default channel.
- A channel with no release yet (stable, today) says so instead of rendering
  the generic "could not resolve the version" error.

Installer: `HEPH_CHANNEL=nightly|stable` picks the repository; unknown values
fail with a clear message.

Docs: new reference page "Release channels", linked from getting started and
the `version` key; plugin skill references updated in the same change.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fcBWHbsCSTCSopBkF8W8t
Same channel, same repository (hephbuild/heph-artifacts-v1) — only the id and
label change: `nightly` -> `dev`, `Nightly` -> `Dev`. Covers the channel model,
the installer's HEPH_CHANNEL values, the docs, and the plugin skill references.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fcBWHbsCSTCSopBkF8W8t
@raphaelvigee raphaelvigee changed the title Release channels: nightly (default) and stable Release channels: dev (default) and stable Aug 31, 2026
@github-actions

github-actions Bot commented Aug 31, 2026

Copy link
Copy Markdown

⚡ Cloudflare Pages preview

Preview https://a3c0830f.hephbuild.pages.dev
Commit 91ff846

raphaelvigee and others added 2 commits August 31, 2026 13:19
The version lookup hit the GitHub API from every component that asked for it,
and remembered only successes. A docs page with three channel-aware code blocks
therefore fired one request per block, and flipping the channel selector fired
another round every time — measured against the dev server, 39 requests on load
and 429 after twenty flips. Unauthenticated the API allows 60 per hour per IP,
so a reader could exhaust their quota on a single page and get 403s where the
version belongs.

Lookups are now shared per channel: callers that arrive while a request is in
the air join it instead of starting a second one, a resolved version and an
empty channel are remembered for the life of the page, and a failure is
remembered for a minute so a flurry of clicks cannot retry it sixty times. The
same page is now 1 request on load and 2 after twenty flips — one per channel,
ever.

Switching channel mid-flight drops the pending answer rather than aborting it:
the request is shared, and its result is still worth caching for whoever asks
next.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fcBWHbsCSTCSopBkF8W8t
fetchChannel deliberately never rejects — the promise is shared by every
component waiting on that channel and is cached once it settles, so throwing
would poison the entry for all of them. Discarding the reason along with the
exception was not deliberate: the usual cause is a 403 from the API's
60-requests-per-hour-per-IP limit, which is invisible from the page and had to
be read out of response headers by hand.

The failure is now reported once per channel, with the rate-limit case named
explicitly instead of surfacing as a bare status code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fcBWHbsCSTCSopBkF8W8t
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant