docs: record that CI, the registry and the deploy moved to Gitea
CI / Typecheck, test, feed (push) Successful in 17s
CI / Build site (push) Successful in 9s
CI / Container image (push) Failing after 18s

The pipeline change made a set of sentences false, and they are the only
record of why things are the way they are, so they move with it: the CI
section and deploy target in README, the cron and BASE_PATH notes in
ARCHITECTURE, the documented User-Agent in INGESTION, and the contact
URL in SOURCES.

Two comments in source were false in the same way and are fixed here
rather than left for the next reader. `serve.ts` said compression was
"the whole difference between the Docker image and the deployed site" —
the image *is* the deployed site now, so that negotiation is the only
compression any reader gets. `robots.ts` justified product-token
matching with "our contact URL contains the string StereotypicalCat",
which it no longer does; the hazard is the arbitrary substring, not that
one, so the comment now says so and the regression test keeps the URL
that actually caused it.

What is deliberately NOT rewritten: game8.co's refusal stays in the past
tense with the Gitea result marked unverified, in AGENTS.md, README,
SOURCES and FEEDBACK alike. A new runner address is the variable that
failure turns on, so it may well be served — but "may well be" is not
evidence, and the four places that would have to change are named
together so they change together once a cycle has actually run.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
Lucas Winther
2026-09-16 04:32:51 +02:00
co-authored by Claude Opus 5
parent 5b8109b556
commit f32eb93289
10 changed files with 111 additions and 58 deletions
+10 -6
View File
@@ -37,7 +37,7 @@ are no users.
```
**That is the design, and the scheduler half of it is not built yet.** What runs today is
`scripts/refresh-sources.ts` on a GitHub Actions cron, writing snapshots to disk, and a feed built
`scripts/refresh-sources.ts` on a Gitea Actions cron, writing snapshots to disk, and a feed built
from those files rather than from SQLite — see § Today. The stages, the layering and the review gate
are unchanged by that; only what wakes them up and where they land is.
@@ -230,8 +230,10 @@ gates and publish it.
Assets resolve against a `<base href>` substituted at build time, the feed URL resolves against
`document.baseURI` so deep links work, and the service worker derives its paths from its own
registration scope. `BASE_PATH=/gacha-event-tracker/ bun run build` for GitHub Pages; without it a
subpath deploy 404s on every asset.
registration scope. `BASE_PATH=/gacha-event-tracker/ bun run build` for any host that serves the app
from a subpath; without it a subpath deploy 404s on every asset. CI no longer sets it — the container
image is what gets deployed and `serve.ts` serves from `/` — but the mechanism stays, because a
subpath deploy is a hosting decision rather than a build one.
### Offline
@@ -263,9 +265,11 @@ mode of the `fetch()` that follows it, and a mismatch is not a no-op — the bro
preload and fetches the feed a second time, which is worse than not preloading. If that link is ever
edited, count the feed requests in a real browser; nothing in the test suite can see this.
Compression is the server's job and both hosts do it: GitHub Pages transparently, and `serve.ts`
which is what the Docker image runs — by negotiating `accept-encoding` per request. It matters more
than it sounds: the bundle is 344 KB raw and 100 KB gzipped.
Compression is the server's job, and `serve.ts` — which is what the Docker image runs, and so what
serves the deployed site — does it by negotiating `accept-encoding` per request. It matters more
than it sounds: the bundle is 344 KB raw and 100 KB gzipped. A static host put in front of the built
`public/` instead must do its own; GitHub Pages did this transparently while it was the deploy
target, which is why nothing here ever had to.
### The theme, before the bundle arrives