openhands
b234a51aea
chore: add stop_grace_period to cms service for reliable rebuilds
CI / check (push) Successful in 4m17s
CI / deploy (push) Successful in 19s
CI / publish-container (push) Successful in 1m26s
2026-09-13 21:06:57 +02:00
Simo
33a760ab6b
ci: verify isolated Docker news journeys before merging to main
CI / check (push) Successful in 4m23s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
CI / preflight (push) Successful in 1m36s
2026-09-13 21:05:02 +02:00
Simo
043c763484
test(news): respect sandboxed preview focus and browser isolation
CI / check (push) Successful in 4m10s
CI / deploy (push) Failing after 1m49s
CI / publish-container (push) Skipped
2026-09-13 20:48:26 +02:00
Simo
46f7ad6571
feat(ops): add integrity-checked backups and isolated restore drills
CI / check (push) Successful in 4m12s
CI / deploy (push) Failing after 2m8s
CI / publish-container (push) Skipped
2026-09-13 20:29:18 +02:00
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