Commit Graph
1770 Commits
Author SHA1 Message Date
remco 1dd29d298a Add renovate.json
CI / tests-ui (pull_request) Skipped
CI / preflight (pull_request) Skipped
CI / check (pull_request) Failing after 31s
CI / tests-unit (pull_request) Skipped
CI / tests-integration (pull_request) Skipped
CI / deploy (pull_request) Skipped
2026-10-12 22:00:11 +00:00
openhands d7d6382b60 chore: upgrade msw to v3 and update typescript
CI / check (push) Successful in 32s
CI / tests-unit (push) Successful in 1m43s
CI / tests-integration (push) Successful in 1m45s
CI / tests-ui (push) Successful in 2m33s
CI / preflight (push) Skipped
CI / deploy (push) Successful in 3m44s
2026-10-12 20:20:27 +02:00
openhands 007818b03f chore: upgrade pnpm version via corepack
CI / check (push) Failing after 23s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
CI / preflight (push) Skipped
CI / tests-ui (push) Skipped
CI / deploy (push) Skipped
2026-10-12 20:18:32 +02:00
openhands b24045812b chore: update dependencies (vitest, drizzle, zod, lucide)
CI / check (push) Successful in 32s
CI / tests-integration (push) Successful in 1m54s
CI / tests-unit (push) Successful in 1m59s
CI / tests-ui (push) Successful in 2m57s
CI / preflight (push) Skipped
CI / deploy (push) Successful in 21s
2026-10-12 20:16:24 +02:00
openhands 0d943fe3dc fix(ci): use runs-on: ubuntu-latest (non-empty) for Gitea Actions v5
CI / check (push) Successful in 32s
CI / tests-integration (push) Successful in 2m4s
CI / tests-unit (push) Successful in 2m18s
CI / preflight (push) Skipped
CI / tests-ui (push) Successful in 3m2s
CI / deploy (push) Successful in 3m12s
2026-10-12 20:05:56 +02:00
openhands 6e82a02e64 fix(ci): rewrite ci.yaml with correct Gitea Actions syntax
CI / check (push) Failing after 1s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
CI / tests-ui (push) Skipped
CI / preflight (push) Skipped
CI / deploy (push) Skipped
2026-10-12 20:04:13 +02:00
openhands 08ff14d0ac test: trigger CI run for monitoring
CI / check (push) Failing after 1s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
CI / preflight (push) Skipped
Test Runner / hello (push) Failing after 2s
CI / tests-ui (push) Skipped
CI / deploy (push) Skipped
2026-10-12 20:01:17 +02:00
openhands b17da6ab25 fix(gitea): use runs-on: [] so host runner picks up jobs (contract test aligned)
CI / check (push) Failing after 1s
Test Runner / hello (push) Failing after 0s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
CI / tests-ui (push) Skipped
CI / preflight (push) Skipped
CI / deploy (push) Skipped
2026-10-12 19:43:34 +02:00
openhands 56ca775405 fix(gitea): runner label ubuntu-latest (remove GITEA_TOKEN drop-in conflict)
Test Runner / hello (push) Successful in 2s
CI / check (push) Successful in 33s
CI / tests-integration (push) Successful in 1m57s
CI / tests-unit (push) Failing after 2m0s
CI / tests-ui (push) Successful in 2m43s
CI / preflight (push) Skipped
CI / deploy (push) Skipped
2026-10-12 19:38:08 +02:00
openhands 8ee99e8ce8 test: ubuntu-latest only label
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 19:26:16 +02:00
openhands 5ea1d50ad1 test: add ubuntu-latest label test
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 19:24:54 +02:00
openhands 6ef7486ca4 test: clean v5 install via Docker approach
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 19:21:39 +02:00
openhands 7c15cfd26d test: clean v5 install test
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 19:19:31 +02:00
openhands 2ca277d858 test: final CI test after clean install
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 19:17:52 +02:00
openhands 758e25452d test: try different label approach
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 19:13:19 +02:00
openhands 60d375144d test: final CI trigger test
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 19:12:03 +02:00
openhands 1c816019b1 test: final CI verification
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 19:09:59 +02:00
openhands ceff6f98d9 test: add test-ci file for CI trigger
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 19:09:01 +02:00
openhands 8395e60f87 test: fourth verification after token fix
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
2026-10-12 19:07:43 +02:00
openhands a92b951540 test: token sync fix verification
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 19:06:50 +02:00
openhands d5938f94ed test: second verification
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
2026-10-12 19:05:45 +02:00
openhands 991328ff0e test: verify runner picks up Gitea CI
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
2026-10-12 19:02:45 +02:00
openhands 1835221096 fix: remove .gitlab-ci.yml (using Gitea CI instead)
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
2026-10-12 19:00:45 +02:00
openhands e7a6245ac2 test: add test line to README
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
2026-10-12 18:49:25 +02:00
openhands da43b6c80c fix: use explicit runner label self-hosted:host to match registered v5-runner
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 18:28:31 +02:00
openhands eb67424a1c test: add verification comment to .gitlab-ci.yml, triggering workflow run
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 18:25:05 +02:00
openhands 3776475db4 fix: ci-workflow-contract test expectations updated to runs-on: []
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 18:18:24 +02:00
openhands 54b9186e52 fix: test.yml runs-on ubuntu-latest → [] for host runner compatibility
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 18:15:58 +02:00
openhands fe684faf70 fix: change Gitea Actions runner from self-hosted to host runner, preventing stuck jobs when self-hosted runners are offline
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 18:08:08 +02:00
openhands 22f834ef45 fix: add explicit runner tags to .gitlab-ci.yml jobs, ensuring shared runners are used and 'no matching online runner' error is prevented
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
2026-10-12 17:46:36 +02:00
openhands 7b249a7222 P1-P3 admin cleanup: rank guard, SSRF guard, count caching, dead code removal, pagination rewrite
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
- P1: new src/lib/admin/rank-guard.ts with tryGuardRank/guardRank + RankGuardTarget/Result; extracted from users.ts; applied to admin-bans (create/lift + rank redirect) and admin-badges (caps + rank guard + error surfacing); import-url-safety.ts SSRF guard wired into clone save+icon fetch; logAudit await in help-tickets; antiddos mutations SETTINGS_EDIT; markAllAlertsRead NOTIFICATIONS_EDIT; rankError/saveError in all 25 message files; tests rew/new for bans/badges/rank-guard/import-url-safety

- P2: ticket-inbox merged pagination reworked to single UNION ALL SQL with LIMIT/OFFSET (avoids O(offset) materialization); getCachedAdminCount with cacheFiltered option applied to devops/errors/photos/items/guilds/help-tickets/moderation pages; admin-theme catches→?error=1+banner+25 locales; logger in silent catches (rare-values/writeable-boxes); catalog-items-loader CAST→plain equality; count caching helper extended with opt-in cacheFiltered

- P3: removed dead modules is-staff/notice/recent-furni-resync/log-filters plus load-user-sanctions/user-sanction-timeline; removed orphaned CATALOG_PAGE_COLUMNS re-export; removed getFurniIconUrl from studio-furni-icons

Build: lint 0, typecheck 0, 3480 tests pass, i18n:check exit 0, colors exit 0. Circular chunk warning (9452/10535/66463) is webpack code-splitting artifact; build succeeds.
2026-10-12 17:42:19 +02:00
openhands 57529fd1ea Fix: badge API now reads from Gamedata/c_images/album1584
CI / check (push) Successful in 30s
Gitea Actions Runner Test / test-job (push) Successful in 2s
CI / tests-unit (push) Successful in 1m46s
CI / tests-integration (push) Successful in 1m38s
Gitea Runner Clean Test / test-job (push) Successful in 2s
CI / tests-ui (push) Successful in 2m26s
CI / preflight (push) Skipped
CI / deploy (push) Successful in 3m18s
The badge GIF files exist at /var/www/Gamedata/c_images/album1584/ but the
/api/imaging/badge endpoint only looked in /swf/c_images/album1584/ (relative
to process.cwd()). Added GEDATA_IMAGES_BASE candidate and fetchCandidate
handler so badges render correctly in the admin UI and on the site.
2026-10-11 21:14:10 +02:00
openhands acbb833eca Fix: make live test describe blocks conditional on RUN env vars (skip when not set)
CI / check (push) Successful in 32s
Gitea Actions Runner Test / test-job (push) Successful in 2s
CI / tests-unit (push) Successful in 1m25s
CI / tests-integration (push) Successful in 1m17s
Gitea Runner Clean Test / test-job (push) Successful in 3s
CI / tests-ui (push) Successful in 2m9s
CI / preflight (push) Skipped
CI / deploy (push) Successful in 2m46s
2026-10-11 20:49:53 +02:00
openhands 6912669754 Remove skip directives from live test files
CI / check (push) Successful in 36s
Gitea Actions Runner Test / test-job (push) Successful in 2s
CI / tests-unit (push) Failing after 1m47s
CI / tests-integration (push) Successful in 1m28s
Gitea Runner Clean Test / test-job (push) Successful in 2s
CI / tests-ui (push) Successful in 2m11s
CI / preflight (push) Skipped
CI / deploy (push) Skipped
2026-10-11 20:26:27 +02:00
openhands 7388ad3451 Fix: admin badges formatting (biome)
CI / check (push) Successful in 34s
Gitea Actions Runner Test / test-job (push) Successful in 1s
CI / tests-unit (push) Successful in 1m33s
CI / tests-integration (push) Successful in 1m22s
Gitea Runner Clean Test / test-job (push) Successful in 2s
CI / tests-ui (push) Successful in 2m22s
CI / preflight (push) Skipped
CI / deploy (push) Successful in 3m58s
2026-10-11 20:05:27 +02:00
openhands b13c9f47be Fix admin-badges: handle non-positive userId, truncate badge code to 32 chars, only revalidate on grant
CI / check (push) Failing after 23s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
Gitea Actions Runner Test / test-job (push) Successful in 3s
CI / tests-ui (push) Skipped
CI / preflight (push) Skipped
CI / deploy (push) Skipped
Gitea Runner Clean Test / test-job (push) Successful in 2s
2026-10-11 20:04:06 +02:00
openhands f14a0e5fe7 Fix i18n type errors: add colIcon to Dutch locale and type casts
CI / check (push) Successful in 31s
Gitea Actions Runner Test / test-job (push) Successful in 2s
CI / tests-unit (push) Failing after 1m22s
CI / tests-integration (push) Successful in 1m19s
Gitea Runner Clean Test / test-job (push) Successful in 2s
CI / tests-ui (push) Successful in 2m12s
CI / preflight (push) Skipped
CI / deploy (push) Skipped
2026-10-11 19:56:05 +02:00
openhands 505ed2bfe2 fix(lint): remove duplicate colIcon key in en.json
CI / check (push) Failing after 30s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
Gitea Actions Runner Test / test-job (push) Successful in 2s
CI / tests-ui (push) Skipped
CI / preflight (push) Skipped
CI / deploy (push) Skipped
Gitea Runner Clean Test / test-job (push) Successful in 2s
2026-10-11 19:40:32 +02:00
openhands 548ae541b2 fix(i18n): add colIcon keys for badges and rareValues
CI / check (push) Failing after 24s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
Gitea Actions Runner Test / test-job (push) Successful in 3s
CI / tests-ui (push) Skipped
CI / preflight (push) Skipped
CI / deploy (push) Skipped
Gitea Runner Clean Test / test-job (push) Successful in 2s
2026-10-11 19:40:03 +02:00
openhands 05883b1ee6 chore: make workflow file anonymous and secure
CI / check (push) Failing after 24s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
CI / preflight (push) Skipped
Gitea Actions Runner Test / test-job (push) Successful in 2s
CI / tests-ui (push) Skipped
CI / deploy (push) Skipped
Gitea Runner Clean Test / test-job (push) Successful in 3s
2026-10-11 19:38:22 +02:00
openhands ad015e1e9c fix(lint): remove duplicate i18n key and cleanup unused biome suppressions
CI / check (push) Failing after 24s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
Gitea Actions Runner Test / test-job (push) Successful in 2s
CI / tests-ui (push) Skipped
CI / preflight (push) Skipped
CI / deploy (push) Skipped
Gitea Runner Clean Test / test-job (push) Successful in 2s
2026-10-11 19:36:57 +02:00
openhands 62e3e49ad1 fix(i18n): add colIcon translation to en.json
CI / check (push) Failing after 22s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
Gitea Actions Runner Test / test-job (push) Successful in 2s
CI / tests-ui (push) Skipped
CI / preflight (push) Skipped
CI / deploy (push) Skipped
Gitea Runner Clean Test / test-job (push) Successful in 2s
2026-10-11 19:36:02 +02:00
openhands 338591691f chore: schone start test-workflow voor v5 runner
CI / check (push) Failing after 24s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
Gitea Actions Runner Test / test-job (push) Successful in 2s
CI / tests-ui (push) Skipped
CI / preflight (push) Skipped
CI / deploy (push) Skipped
Gitea Runner Clean Test / test-job (push) Successful in 12s
2026-10-11 19:34:04 +02:00
openhands f56109836e chore: trigger v5 runner
CI / check (push) Failing after 23s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
Gitea Actions Runner Test / test-job (push) Successful in 0s
test.yml (push) Invalid workflow file
CI / tests-ui (push) Skipped
CI / preflight (push) Skipped
CI / deploy (push) Skipped
2026-10-11 19:31:35 +02:00
openhands b1a45902b4 Test Gitea v5 runner
CI / check (push) Failing after 24s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
Gitea Actions Runner Test / test-job (push) Successful in 1s
test.yml (push) Invalid workflow file
CI / tests-ui (push) Skipped
CI / preflight (push) Skipped
CI / deploy (push) Skipped
2026-10-11 19:30:03 +02:00
openhands 7d8874c8cd fix: biome lint suppressions + admin-badges.ts formatting
Gitea Actions Runner Test / test-job (push) Successful in 2s
CI / check (push) Failing after 23s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
CI / tests-ui (push) Skipped
CI / preflight (push) Skipped
CI / deploy (push) Skipped
2026-10-11 18:48:26 +02:00
openhands a06db72c65 Update: admin panel fixes, badge icons, studio improvements, gitea runner v5
Gitea Actions Runner Test / test-job (push) Successful in 2s
CI / check (push) Failing after 21s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
CI / tests-ui (push) Skipped
CI / preflight (push) Skipped
CI / deploy (push) Skipped
2026-10-11 18:44:02 +02:00
openhands afc8909d3f fix(studio): the furniture list was rendered at opacity 0 and never painted
Gitea Actions Runner Test / test-job (push) Successful in 2s
CI / check (push) Successful in 33s
CI / tests-integration (push) Successful in 2m2s
CI / tests-unit (push) Successful in 2m3s
CI / tests-ui (push) Successful in 2m39s
CI / preflight (push) Skipped
CI / deploy (push) Successful in 2m40s
The Studio furniture pane was present in the DOM the whole time and still
looked empty. Every row existed, had real dimensions, and its image loaded
with a 200 — and none of it was visible.

The pane was wrapped in a `motion/react-m` element declared with
`initial={{ opacity: 0 }}` and `animate={{ opacity: 1 }}`. That minimal entry
renders the element but never runs the animation, so the inline style stayed at
opacity 0 and the content was painted transparently forever. Measured on the
live release: the table sat at opacity 1 directly inside a wrapper pinned at
`style="opacity: 0"`.

It went unnoticed because playwright.ui.config.ts sets reducedMotion to
"reduce", under which the animation is skipped and the element lands straight
on its final value. The existing Studio specs therefore passed while the real
browser showed nothing. That also means the perf win from the minimal entry
was never actually delivering a working fade — it only hid the breakage.

The decorative 150ms fade is now a CSS animation (.studio-list-fade-in). A CSS
animation cannot strand content this way: if it never runs, the element is
simply opaque. motion/react-m had exactly one usage in the app and is gone;
the four files that use the full motion/react are untouched and unaffected.

Adds e2e/ui/studio-visibility.spec.ts, which opts out of reduced motion and
asserts no ancestor of a furniture row is faded below 0.9. Verified it fails
on the old code with `Received: 0` and passes on the new, so this cannot
regress silently again.
2026-10-11 18:05:13 +02:00
openhands 990ebdb158 fix(pwa): retire the service worker instead of just fixing it
Gitea Actions Runner Test / test-job (push) Successful in 2s
CI / check (push) Successful in 35s
CI / tests-integration (push) Successful in 1m58s
CI / tests-unit (push) Successful in 2m22s
CI / tests-ui (push) Successful in 2m50s
CI / preflight (push) Skipped
CI / deploy (push) Successful in 2m50s
The previous commit stopped the worker from caching build output, which
removed the cause of the blank Catalog Studio but left the worker itself
serving a purpose worth one offline fallback: three public endpoints
(/api/home, /api/online, /api/radio/config). Behind Cloudflare, for a site
whose visitors are online, that fallback rarely fires and goes stale exactly
where it is most likely to matter.

So the worker goes away rather than staying as a mostly-inert layer that every
future release still has to keep correct.

public/sw.js is not deleted, because deleting it would leave every existing
registration alive and still in control of the page, caching as it did before.
It becomes the opposite of what it was: on activate it deletes every cache,
unregisters itself and reloads open clients so they stop being controlled.
Browsers that already installed a worker therefore uninstall it on their next
visit; browsers that never had one are unaffected.

src/components/pwa-register.tsx is removed and unmounted from the root
layout, so nothing registers a worker any more and the kill switch only ever
runs for the visitors who need it.

The manifest is deliberately untouched. src/app/manifest.ts is an ordinary
Next.js route, independent of any worker, and Chrome installs from a manifest
alone, so the site stays installable on a phone.

Verified nothing depended on it: no other navigator.serviceWorker or caches.*
reference exists in the app, the theme runs from the plain /scripts/
theme-init.js script, and no Studio, catalog or import module touches a
worker. Typecheck and lint clean, 2326 unit tests and 72 UI tests green,
including every Studio and catalog spec.
2026-10-11 17:31:15 +02:00
openhands 1a4888df50 fix(pwa): stop the service worker replaying chunks from a previous release
Gitea Actions Runner Test / test-job (push) Successful in 3s
CI / check (push) Successful in 32s
CI / tests-integration (push) Successful in 2m11s
CI / tests-unit (push) Successful in 2m16s
CI / preflight (push) Skipped
CI / tests-ui (push) Successful in 2m54s
CI / deploy (push) Successful in 2m47s
The Catalog Studio rendered as a blank white page after a deploy, while the
server was serving it correctly: /admin/studio/furni answered 200 with 110KB
of HTML and every API it calls answered 200 with data. No script chunk 404ed
during the session and no JavaScript threw, so the failure was entirely in
what the browser chose to execute.

The service worker wrapped /assets/ and /_next/static/ in a Cache Storage
entry served cache-first, under a hardcoded name (atom-v3) with no build id
and no revalidation. A release therefore could not invalidate it: the browser
kept replaying the previous release's chunks against the new HTML, and React
never hydrated. The chunk branch also had no .catch(), unlike the API branch
below it, so a rejected fetch silently dropped the <script> instead of
surfacing a network error the browser could retry.

That cache also bought nothing. nginx already sends /_next/static/ and
/assets/ as `max-age=31536000, immutable`, and those filenames are
content-hashed, so the HTTP cache is both sufficient and safe — a changed
file gets a new name. The worker was the only layer able to go stale across a
deploy, and it was the one doing it.

Both prefixes now fall through to the network and are left to the HTTP cache.
The API offline fallback and network-first navigations are unchanged, and the
cache names move to v4 so an existing worker is replaced. SW_VERSION moves
with them: it is part of the registration URL, so without the bump the browser
never refetches sw.js and the old worker keeps running.

Unrelated but confirmed while tracing this: /assets/images/themes/arctic-ice.png
is requested by the browser and 404s, but that string exists nowhere in the
code, the database or the build. It was a stale reference served out of this
same cache, not a missing asset.
2026-10-11 17:21:53 +02:00