Repository navigation
RELEASING
Moved from the root README. Production release and rollback for the Cloudflare host. This page describes the workflow as it runs today.
The CI workflow runs one job, CI, for every
pull request: hygiene, roadmap and security checks, the generated architecture
diagram, the content build, the fast unit tests listed in
vitest.fast.config.js (CI fails if they collect
a different number of files than the committed FAST_TEST_FILES),
vite build, the first-load budget, a Worker deploy dry run, and the browser
gate (npm run test:e2e:gate, no retries). The main-branch ruleset requires
that check and no human approval.
The same CI job runs again on the merged commit. Its dist/ (with the
recitation audio and the release markers dist/release.txt and
dist/release-<sha>.txt) and the Worker bundle from its dry run are uploaded
as the artifact rise-release-<sha>, before the browser gate rebuilds dist/
with test flags.
The production job needs that job, so it runs only when every check on the
merged commit, browser gate included, has passed. It does not build dist/:
it downloads the artifact, checks the release markers and the audio count,
bundles the Worker again from the same commit and requires it to be
byte-identical to the tested bundle, and writes wrangler versions list to the
run summary. Right before deploying it reads main from the GitHub API and
stops if main no longer points at the tested commit. So not every push to
main deploys: when merges land faster than the jobs run, a superseded push's
job fails at this step without deploying, and the job for the newest commit
deploys. It deploys with the lockfile's Wrangler and writes the new Worker
version id to the run summary:
./node_modules/.bin/wrangler deploy --config wrangler.production.jsonc --message "RISE <sha>"After deploying, the job polls https://rise.syberlabs.io/release-<sha>.txt
until it returns the commit, then checks that / and /try-rise answer 200,
that an unknown /api/ path answers a JSON 404, that /content/catalog.json
passes the browser catalog contract, that every retired inference route
answers 410, and that the release marker still matches once those checks are
done. It writes the result and an owner-acceptance step to the run summary. No
release check calls a model.
Full validation starts when the
CI workflow completes on main, and on manual dispatch: the full unit suite
in four shards, the Scriptorium CLI, and the browser suite in sixteen shards.
It reports failures and uploads Playwright reports. It does not hold or undo
the release.
The GitHub production environment restricts deployment to main. Its
protection rules are configured in GitHub settings and are not recorded in
this repository. Set these environment values before a release:
| Environment | Values |
|---|---|
production |
A separate secret CLOUDFLARE_API_TOKEN; variable CLOUDFLARE_ACCOUNT_ID. |
Scope each Cloudflare token to only the account and deployment permissions it needs. The production Worker holds no model credential: readers bring their own OpenRouter account or run Kev locally (USER-OWNED-AI.md). It holds no secrets: the catalog is a static file. The release check never calls a model.
The syberlabs.io zone and rise.syberlabs.io custom domain must be active,
and the RISE production Worker alone must have a public Access bypass; Relay
must remain protected.
Each production run's summary lists the Worker versions that existed before its deploy and the version it deployed. Confirm one is known-good, and restore it with the lockfile's Wrangler from a checkout with this configuration and Cloudflare credentials:
./node_modules/.bin/wrangler versions list --config wrangler.production.jsonc
./node_modules/.bin/wrangler rollback <VERSION_ID> --config wrangler.production.jsonc --message "RISE rollback"The previous .space site remains available
for browser-local work there. A first production release may have no
known-good prior production version to restore.
Until 2026-09-26 the CI job uploaded the tested dist/ and the production
job deployed it; #204 removed that handoff and the needs: ci link, and from
then until this change production deployed a fresh build that no test had run
against. The handoff is restored to close R1 of the
2026-10-05 principal-architect critique: production ships the tested artifact.
Full validation still runs after
the deploy and does not hold it.
Published from docs/RELEASING.md. Edits made here are overwritten on the next push to main.
Start here
- COMPOSER-FIRST-ROADMAP
- VISION
- PROJECT-KNOWLEDGE
- ARCHITECTURE
- SYSTEM-DESIGN-REVIEW-2026-08-22
- ACCOUNT-SAVES
- RELEASING
- PLUS-CUSTOMER-LIFECYCLE
- AGENTS
Release
Pilot
- LIVE-CURRENT
- LIVE-HANDOFF
- LIVE-MCP
- DIRECTORY-SCREENSHOTS
- INSPECTOR-RUN-2026-10-10
- CLAUDE-RUN-2026-10-10
- CREATIVE-CONTROL-EVALS
- PERCEPTION-EVAL
- SOUND-LEVELS
- WORDING
- RUN-2026-10-08
- COMPOSER-INSTRUMENTS
- CHATGPT-DEMO
- EMBED-WITNESS
- RISE-GATE0
- CHATGPT-HOST-2026-10-04
- LIVE-002-HOST-2026-10-05
- EMBED-STAGE-HOST-2026-10-07
- RELEASE-GATES-2026-10-07
- EMBED-SAFETY-2026-10-05
- LIVE-GEMINI
- LIVE-EVALUATION
- LIVE-RED-TEAM
- CURRENT-CONSOLIDATION
- RISE-CHANGES
The Archive - texts and their editing
- ARCHIVE-CANON-SPEC
- ARCHIVE-CLEANSING-SPEC
- CORPUS-REVIEWER-PROMPT
- TYPESETTING-CANON
- PHRASE-CHUNKING-STUDY
- CHUNKER-AWARENESS-STUDY
- LIBRARY-SPEC
- SOL-PD-ACQUISITIONS-DOSSIER-LITERATURE-2026-07-28
Authoring - scores, rooms, and rendering
- EXPERIENCE-PROGRAM-SPEC
- LIVE-CURRENT-EVENTS-V1
- RISE-CURRENT-V1-SLICE
- RISE-SDK
- SCRIPTORIUM-SPEC
- WORKSHOP-COMPOSITION-STUDIO-SPEC
- AGENT-COMPOSITION-AND-RENDER-SPEC
- NARRATION-LANE-SPEC
- RECITATION-SPEC
- SCRIPTORIUM-STRENGTHENING-SPEC
Reading surfaces
- PAGE-MODE-SPEC
- RHYTHMIC-VISUAL-PRESENCE-SPEC
- LATERAL-TRAVERSAL-SPEC
- CONTINUOUS-FIELD-SPEC
- JEV-VARIANCE
- INVOCATION-SKINS
- PHASE-2-SAFETY-SPEC
- SPATIAL-CHAMBER-SPEC
- Premium_Mobile_Chamber
Imagery - what may be shown, and on whose authority
- MUSEUM-ATLAS
- SOURCE-CURATION-SPEC
- SOURCE-EXPANSION-SPEC
- ATRIUM-IMAGERY-SPEC
- PERICOPE-IMAGERY-SPEC
- icon-museum-request-draft
- TEXT-ATTUNED-IMAGERY-SPEC
The Chapel
Direction and unbuilt work
Affect and the Emotions room
Reading decision service and retired gate
Product direction and team tracking
- README
- READER-DIRECTION
- CONSOLIDATED-READER
- COMPOSER-FIRST-ROADMAP
- TRACKER-DESIGN
- 2026-10-03-direction-decisions
- 2026-10-04-composer-decision
- 2026-10-05-consolidated-reader-decisions
- 2026-10-05-embed-stage-decision
- 2026-10-06-score-speech-service-roadmap
- 2026-10-07-current-with-a-look
- 2026-10-07-reader-control-and-replay
- 2026-10-05-one-colour-vocabulary-design
- 2026-10-07-chrome-follows-theme
- 2026-10-07-gallery-follows-with-works
- 2026-10-05-canonical-home-design
- 2026-10-04-reader-evidence
- 2026-10-original-performance-roadmap
- 2026-10-08-voice-hardening-2-findings
- 2026-10-09-feelings-sounds-parked
- 2026-10-10-connector-directory-readiness
- 2026-10-10-connector-submission-packet