3.0 KiB
Persimmons shared-hosting cutover
https://persimmons.app is a second front door for the source-owned
matcha/persimmons bytes already composed at
https://xn--sj8h.teahub.xyz/%F0%9F%8D%8A/. It is not an application or a
second Gitea. The browser uses the shared Gitea identity and storage at
teahub.xyz; browser/API operations terminate at teahub-mcp through the
bounded /tea/site/* bridge.
The retired persimmons-app and persimmons-gitea state is disposable. The
repository contains no Fly manifests, provisioners, launch workflow, preflight
workflow, or operator allowlist entry capable of recreating either app.
External cutover (independent operator plane)
Do not operate this change through Teahub itself. Start from an independently authenticated Fly/Cloudflare operator and record the current machine, image, volume, DNS, and certificate state before mutation.
- Build the Gitea image from the exact current
matcha/teahubmain SHA. Update only the canonicalteahub-giteamachine, preserving its machine ID, volume, services, IPs, and rollback image. This activates bothgitea/teahub-nginx.confandGITEA__session__SAME_SITE=none; do not use the UI-only refresh script for this config change. - On that same independent plane, run the composed Pages projector against the
exact current
matcha/greenteamain SHA:ops/pages-project-greentea.sh <40-character-greentea-main-sha>. Confirm its recordedapp_persimmons_source_shaequals the localmatcha/persimmons.gitrefs/heads/mainand thatcurrent/🍊/index.html,app.js, andstore.jsare nonempty. - Add
persimmons.appto theteahub-giteaFly certificate set. Replace the old dedicated-app DNS with DNS-only records pointing at the existing shared Teahub addresses:A 66.241.124.48andAAAA 2a09:8280:1::19c:1dd0:0. Remove the retired66.241.124.82/2a09:8280:1::1a0:f8e1:0records. Wait for Fly to report the hostname certificate ready before treating the cutover as live. - Verify
https://persimmons.app/,/app.js, and/store.jsreturn 200 and nonempty bytes; compare their hashes with the files under the composedcurrent/🍊directory. Verifyhttps://teahub.xyz/api/healthzandhttps://mcp.teahub.xyz/healthzremain 200 and one bounded Gitea write path still succeeds. - In a fresh browser, sign in through the Persimmons popup and confirm the
Teahub session cookie is
Secure; HttpOnly; SameSite=None. Confirm session, repository discovery, create/list/rotate/revoke/delete, extension connection, and Juice targethttps://teahub.xyzwork. Confirm an unallowlisted origin receives no credentialed CORS header. - After the shared taste test passes, stop/delete the old
persimmons-appandpersimmons-giteaapps and their disposable volumes/IPs/certificates. Do not copy old dedicated users or vault state into Teahub.
Rollback changes only the shared Gitea machine back to the recorded image and restores the prior DNS records. Never replace or detach the Gitea data volume.