Commit Graph
1649 Commits
Author SHA1 Message Date
Simo 7867bf6b72 test(news): gate deployment on an isolated real browser publication journey
CI / check (push) Successful in 3m28s
CI / deploy (push) Successful in 18s
CI / publish-container (push) Successful in 2m47s
2026-09-13 20:27:04 +02:00
Simo 60e49c1ec9 feat(hk): connect delivery failures to precise diagnostic records
CI / check (push) Successful in 3m31s
CI / deploy (push) Successful in 18s
CI / publish-container (push) Successful in 1m12s
2026-09-13 20:25:03 +02:00
Simo 275a574203 fix(news): retry rolled-back scheduled publication deadlocks
CI / check (push) Successful in 3m35s
CI / deploy (push) Successful in 24s
CI / publish-container (push) Successful in 1m23s
2026-09-13 20:23:29 +02:00
Simo 9a2d73a6f6 feat(docker): provide verified-header proxy profiles for self-hosted clones
CI / check (push) Failing after 1m45s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-13 20:15:10 +02:00
Simo fe34d4ac93 fix(news): enforce shared comment publication and moderation rules
CI / check (push) Failing after 1m46s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-13 20:14:32 +02:00
Simo 8aefb415b6 fix(ci): isolate session runtime from database integration tests
CI / check (push) Successful in 3m21s
CI / deploy (push) Successful in 1m27s
CI / publish-container (push) Successful in 49s
2026-09-13 19:47:16 +02:00
Simo c5c9941768 feat(hk): explain background updates with protected content links and retry details
CI / check (push) Failing after 1m34s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-13 19:41:25 +02:00
Simo dd7613850e perf(studio): load import organization tools on demand
CI / check (push) Failing after 29s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-13 19:32:46 +02:00
Simo f7b9b55700 fix(news): preserve recoverable reads and verify publication against real services
CI / check (push) Failing after 29s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-13 19:31:32 +02:00
Simo 8abfe352ef fix(security): authorize site uploads and harden tokens, media and request identity
CI / check (push) Successful in 3m15s
CI / deploy (push) Successful in 1m19s
CI / publish-container (push) Successful in 48s
2026-09-13 19:24:43 +02:00
Simo 52f6d1491f fix(news): persist publication requests and retry cache delivery
CI / check (push) Successful in 3m12s
CI / deploy (push) Successful in 1m13s
CI / publish-container (push) Successful in 42s
2026-09-13 18:33:45 +02:00
Simo c977fe95ba fix(studio): recover uncertain imports with persistent request identities
CI / check (push) Successful in 3m12s
CI / deploy (push) Successful in 19s
CI / publish-container (push) Successful in 1m12s
2026-09-13 18:33:06 +02:00
Simo afea80708c perf(studio): defer import history and Nitro scale tools until opened
CI / check (push) Successful in 3m7s
CI / deploy (push) Successful in 1m2s
CI / publish-container (push) Successful in 1m8s
2026-09-13 18:29:24 +02:00
Simo 13665e0c3c feat(catalog): persist idempotent bulk operations and retryable deliveries
CI / check (push) Successful in 3m7s
CI / deploy (push) Successful in 1m37s
CI / publish-container (push) Successful in 44s
2026-09-13 18:05:03 +02:00
Simo 76e46d295c fix(test): register Docker import check with Vitest
CI / check (push) Successful in 3m7s
CI / deploy (push) Successful in 19s
CI / publish-container (push) Successful in 1m25s
2026-09-13 18:02:00 +02:00
Simo 1eee6661f9 feat(notifications): add account-scoped inbox and persistent preferences
CI / check (push) Failing after 1m18s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-13 17:59:22 +02:00
Simo 8f55ff2d17 feat(docker): guide clone installation and validate paired update artifacts
CI / check (push) Failing after 1m18s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-13 17:57:14 +02:00
Simo a4266f297c fix(ci): resolve inherited formatter and navigation effect diagnostics
CI / check (push) Successful in 3m12s
CI / deploy (push) Successful in 19s
CI / publish-container (push) Successful in 2m47s
2026-09-13 17:55:01 +02:00
Simo a320e47c29 feat(catalog): verify deterministic release manifests before Git export
CI / check (push) Failing after 22s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-13 17:48:23 +02:00
Simo 422be3ce2d test(ci): gate deployments on MariaDB and Redis integration checks
CI / check (push) Failing after 27s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-13 17:47:58 +02:00
openhands 966a925614 feat(ui): add global progress bar for navigation feedback
CI / check (push) Failing after 25s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-13 14:44:46 +02:00
openhands d78744efc1 test(utils): add test helper utilities for mocking
CI / check (push) Failing after 25s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-13 14:37:33 +02:00
openhands 7a2c75701e style(css): add smooth transition variables and prefers-reduced-motion support
CI / check (push) Successful in 2m33s
CI / deploy (push) Successful in 18s
CI / publish-container (push) Successful in 1m12s
2026-09-13 14:35:36 +02:00
openhands 501e717fe9 test(actions): add unit tests for user management actions
CI / check (push) Successful in 2m25s
CI / deploy (push) Successful in 1m19s
CI / publish-container (push) Successful in 45s
2026-09-13 14:27:06 +02:00
openhands d5ea115d31 test(actions): add unit tests for twofactor authentication actions 2026-09-13 14:24:35 +02:00
openhands f762db9ef9 test(actions): add unit tests for shop voucher redemption 2026-09-13 14:21:55 +02:00
openhands 62f4861705 feat: Add comprehensive unit tests for admin-bans actions 2026-09-13 13:59:21 +02:00
openhands 7852e2f5fe feat(env): enforce paired PayPal credentials in env validation
CI / check (push) Successful in 2m28s
CI / deploy (push) Successful in 1m28s
CI / publish-container (push) Successful in 47s
Add superRefine rule in src/env.ts ensuring that if one PayPal credential (PAYPAL_CLIENT_ID or PAYPAL_SECRET) is set in production, the other is also required, catching configuration drift at startup.
2026-09-13 13:36:03 +02:00
openhands cbf056838f perf(admin): cache global admin list totals via redisCache
CI / check (push) Successful in 2m37s
CI / deploy (push) Successful in 18s
CI / publish-container (push) Successful in 1m24s
Introduce getCachedAdminCount to cache un-filtered table count(*) queries in Redis for admin lists (starting with UsersPage), avoiding heavy full table scans on every request while keeping exact counts for search/filtered queries.
2026-09-13 13:32:51 +02:00
openhands ec742a3f72 feat(security): add rate limiting to public POST routes
CI / check (push) Successful in 2m48s
CI / deploy (push) Successful in 20s
CI / publish-container (push) Successful in 1m31s
Add rateLimit protection to /api/paypal/create, /api/paypal/capture, /api/tokens, /api/radio/shouts, and /api/articles/[slug]/comment to prevent abuse and spamming.
2026-09-13 13:30:29 +02:00
openhands 1caef76f82 feat(ops): self-heal disk pressure instead of only alerting
CI / check (push) Successful in 2m36s
CI / deploy (push) Successful in 1m28s
CI / publish-container (push) Successful in 46s
The 5-minute disk probe now reclaims storage automatically: from 85% it runs the gentle age-windowed Docker prune, from 90% it drops the age windows (docker-prune.sh --force: all unused build cache and unreferenced images, all stopped containers) so a mount can never silently max out. Alerts still fire at 85/90/95% and their hint now points at non-Docker growth when reclaiming is not enough. Force mode is reserved for the worker; deploys keep the gentle mode. Volumes are off-limits in every path.
2026-09-13 13:18:00 +02:00
openhands fe26ca3ff3 feat(ops): alert on filesystem fill levels from the host worker
CI / check (push) Successful in 2m30s
CI / deploy (push) Successful in 1m25s
CI / publish-container (push) Successful in 1m5s
Add a pure df parser (disk-usage.ts) with 85/90/95% threshold classification, a diskPressure() alert (Discord/email/alert_logs, severity escalates with fill), and a 5-minute host-side probe in jobs-worker.ts that raises one alert per crossing mount, cooldown-gated per mount+level. Real mounts only: overlay/tmpfs pseudo filesystems are ignored.
2026-09-13 13:12:37 +02:00
openhands a0d7f42227 style: satisfy biome quote rule in deployment contract test
CI / check (push) Successful in 2m25s
CI / deploy (push) Successful in 1m15s
CI / publish-container (push) Successful in 45s
2026-09-13 13:05:19 +02:00
openhands 47917bb63b ops(docker): prune unused cache on deploys and nightly
CI / check (push) Failing after 23s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
Add scripts/docker-prune.sh (build cache >72h capped at 4g, unreferenced images >7d, stopped containers >24h; never volumes), run it after every CI deploy and compose update, and schedule a nightly prune from the host-side jobs-worker. Tighten the deployment contract tests to assert the scoped-prune boundaries.
2026-09-13 13:04:03 +02:00
openhands fb68df3ba9 feat(import): apply translation to successful bulk items
CI / check (push) Successful in 2m27s
CI / deploy (push) Successful in 1m15s
CI / publish-container (push) Successful in 56s
The interactive batch ignored the client's Translate option, so translated names never landed in the language files during a bulk run. Patch each successful item through patchLocalizedFurniDataEntries (mutex-guarded, best-effort) when translation is requested, surfacing failures as item warnings instead of failing the import.
2026-09-13 12:54:00 +02:00
openhands ffcd4232d6 feat(import): durable batch checkpoint and transient auto-retry
CI / check (push) Successful in 2m24s
CI / deploy (push) Successful in 1m32s
CI / publish-container (push) Successful in 47s
Mirror interactive batch runs into the import-job store so interrupted imports (restart, time-out, disconnect) can be resumed from Import History. Items are checkpointed as they settle (coalesced, serialized saves) and the mirror starts 'running' so the boot-time worker marks it 'interrupted' instead of double-importing; done items are never re-imported. Add bounded backoff retry for transient download/connection failures before marking an item failed, and point the client's time-out/network toasts at Import History.
2026-09-13 12:50:17 +02:00
openhands af1a06b0a3 feat(studio): polish search highlight, zebra rows, and transitions
CI / check (push) Successful in 2m24s
CI / deploy (push) Successful in 1m22s
CI / publish-container (push) Successful in 45s
Highlight the active search term in names/classnames (grid + table), add zebra striping and a left accent bar on selected table rows, fade the results list when switching grid/table or on first load, and swap the broken-icon fallback for a cleaner placeholder.
2026-09-13 12:36:20 +02:00
openhands 2a708b01b1 perf(import): adjustable concurrency and skip redundant SWF downloads
CI / check (push) Successful in 2m22s
CI / deploy (push) Successful in 1m12s
CI / publish-container (push) Successful in 44s
Raise batch concurrency (furni 3->12, clone 10->12) with a Speed control next to Translate. Skip the SWF download when a .nitro bundle already exists on disk (color variants share the base nitro), and stop flagging that as a failed download.
2026-09-13 12:14:52 +02:00
openhands 641b6b8cb8 feat(studio): bulk select all results, persist view prefs, back-to-top
CI / check (push) Successful in 2m27s
CI / deploy (push) Successful in 1m18s
CI / publish-container (push) Successful in 50s
2026-09-13 12:04:11 +02:00
openhands b92f897ba2 perf(studio): virtualize the furniture table and throttle batch progress
CI / check (push) Successful in 2m33s
CI / deploy (push) Successful in 1m28s
CI / publish-container (push) Successful in 57s
- Render the table view through a virtualizer too, using a shared grid
  template so the sticky header and rows keep perfect column alignment
- Keep semantic table/row/cell elements while virtualizing
- Cap the batch item-details list to the latest 60 rows (newest first)
- Coalesce per-item progress events server-side (120ms throttle) in both
  the exact-import and clone SSE batch runners
2026-09-13 11:53:07 +02:00
openhands d02aaa0d87 perf(studio): cache furni imports and virtualize the furniture grid
CI / check (push) Failing after 22s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
- Add TTL-based caching for local index lookup, furnidata classnames,
  catalog id set, nitro file presence and import stats
- Invalidate caches after furnace single/batch/clone imports
- Rewrite batch progress with elapsed time, rate and verification chips
- Virtualize the grid with @tanstack/react-virtual and replace the
  Load more button with infinite scroll via an IntersectionObserver
2026-09-13 11:40:55 +02:00
openhands 2920669362 feat: add CSV/JSON export, advanced bulk filters & selection to Catalog Manager
CI / check (push) Successful in 2m23s
CI / deploy (push) Successful in 1m9s
CI / publish-container (push) Successful in 49s
- Admin Audit Log: CSV/JSON export via ?format=query param
- Catalog Manager: club_only / have_offer filters (multi-filter support)
- Offer discovery: refactored discoverOffers() to accept filters object
- Translations added for new filter labels
- Test updates for all modified paths
2026-09-12 20:53:51 +02:00
openhands 388d8992f8 feat: add CSV/JSON export, advanced bulk filters & selection to Catalog Manager
CI / check (push) Failing after 1m1s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
- Admin Audit Log: CSV/JSON export via ?format=query param
- Catalog Manager: club_only / have_offer filters (multi-filter support)
- Offer discovery: refactored discoverOffers() to accept filters object
- Translations added for new filter labels
- Test updates for all modified paths
2026-09-12 20:40:33 +02:00
openhands eeca532057 feat(e2e): add ui test for organize imports dialog validation limits and modes
CI / check (push) Failing after 36s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-12 20:10:02 +02:00
openhands 0252dfe756 fix(test): update command center test assertions for synchronized keys
CI / check (push) Failing after 34s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-12 20:03:02 +02:00
openhands 0af8d8a398 fix(lint): resolve biome formatting and unused variables across codebase
CI / check (push) Failing after 1m5s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-12 19:45:29 +02:00
openhands 91008d84fe feat(i18n): synchronize all translation keys across all supported locales (25 languages)
CI / check (push) Failing after 1m10s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-12 19:30:16 +02:00
openhands 8707c0d8fe feat(studio): improve organize imports UX with validation limits and translations
CI / check (push) Failing after 30s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-12 19:24:55 +02:00
openhands d2572757cd perf(site): feature card tilt & news card zoom micro-interactions
CI / check (push) Successful in 2m26s
CI / deploy (push) Successful in 1m2s
CI / publish-container (push) Successful in 50s
- Feature cards: group hover zoom & rotate on icon badge, smoother
  card lift on hover (-translate-y-1.5).
- Stats cards: primary accent on numbers, pill badge for labels.
- News cards: smoother 500ms transition with scale-108 image zoom.
2026-09-12 18:16:29 +02:00
openhands 31a89c505d fix(studio): count pages, not items, in organize-imports button
CI / check (push) Successful in 2m25s
CI / deploy (push) Successful in 1m14s
CI / publish-container (push) Successful in 51s
The "Create" CTA used totalSelected (the sum of furni items across
approved groups) as its plural count, so with many imported items it
claimed to create thousands of pages. One approved group creates exactly
one page, so the label now counts approved groups instead.
2026-09-12 18:08:10 +02:00