Commit Graph
1579 Commits
Author SHA1 Message Date
openhands 61c7519bea fix(studio): show all offers in the imported-furniture tree
CI / check (push) Successful in 2m23s
CI / deploy (push) Successful in 1m11s
CI / publish-container (push) Successful in 44s
The organize-imports route defaulted to a 500-item limit, silently
hiding offers beyond the first batch of imported pages.  Remove the
effective cap (limit now means 'all', guarded only by a 50k lint cap)
so every offer already sitting in the import tree is returned and
grouped.
2026-09-11 20:33:27 +02:00
openhands 19dc0347df fix(studio): harden organize-imports against long-running queries and hangs
CI / check (push) Successful in 2m33s
CI / deploy (push) Successful in 1m26s
CI / publish-container (push) Successful in 50s
The original GET route used a correlated NOT EXISTS / FIND_IN_SET
subquery over the entire catalog_items table for every recent import
audit entry, causing server timeouts when the audit log or catalog
grew large.  The per-item host-page validation inside the create
action also issued one SELECT + one UPDATE per moved offer.

Changes:
- GET /api/admin/import/organize: replace the correlated subquery
  with a bounded candidate list and a JS-side placed-set check, then
  resolve all needed base items in a single indexed SELECT.  This
  bounds the query cost regardless of catalog or audit log size.
- organizeImportFurni action: validate mover ids in one SELECT, then
  batch every move per group into a single UPDATE with a CASE
  expression instead of one UPDATE per item.
- OrganizeImportsDialog: add a 45-second abort timeout on the fetch
  and a distinct load-error state so the UI never silently hangs.
- Add 'loadError' translation key (en + nl).
2026-09-11 20:24:38 +02:00
openhands 01a85ebcd0 feat(studio): add organize-imports tool with suggestion review and approval
CI / check (push) Successful in 2m22s
CI / deploy (push) Successful in 1m34s
CI / publish-container (push) Successful in 46s
Adds a Studio 'Organize imports' dialog that groups recently imported
furniture and furniture already sitting in the auto-created import
pages into suggested catalog categories.  Each group is presented with
its suggested name, icon, and layout which can be overridden before
approval; approved groups are turned into real catalog pages in a
single atomic export run.  Offers already inside the import subtree are
moved to the new pages; brand-new furniture gets a fresh offer.

- groupSuggestedCategories: generic pure helper reusing the same
  per-item label heuristic that drives suggestCategoryName; items with
  no label land in a 'Other Furni' remainder bucket
- GET /api/admin/import/organize: returns items from the imported
  furniture tree (catalog_items JOIN items_base via page id set from
  the imported-furniture root) union audit-logged but not-yet-placed
  recent imports; marks alreadyPlaced vs new
- organizeImportFurni server action: validates import-page membership
  before moving any offer, creates pages + inserts/moves items in one
  withCatalogExport snapshot, logs activity
- OrganizeImportsDialog: full-featured Studio dialog with price panel
  (applies to new offers only), parent select, per-group approval,
  editable name/icon/layout with suggestion reset chips, source tags
- import-pages.ts server helper: locates the imported-furniture tree
- Studio nav: 'Organize imports' button with FolderTree icon,
  gated on CATALOG_EDIT, wired next to the catalog manager
- en + nl translations for organizeImports.* keys with ICU plurals
- groupSuggestedCategories unit tests (deterministic grouping,
  remainder handling, size+alpha ordering, label consistency)
2026-09-11 19:38:18 +02:00
openhands f5c2c05f6e feat(studio): surface the Visual Catalog Manager in the Studio nav
CI / check (push) Successful in 2m29s
CI / deploy (push) Successful in 1m39s
CI / publish-container (push) Successful in 45s
The catalog manager (with auto-category wizard) now lives inside the Studio
navigation for teams that manage furniture inline. The button is gated on
CATALOG_EDIT; only users with that permission see the launcher.

- Split server/client Studio layout to derive permissions server-side
- Add optional triggerLabel prop to CatalogManagerDialog for custom labels
- Wire the Catalog manager button in the Studio nav right cluster
- Keep existing /admin/catalog entry points unchanged
2026-09-11 18:54:52 +02:00
openhands f832479e52 feat(catalog): add auto-category wizard with live preview and smart suggestions
CI / check (push) Successful in 3m1s
CI / deploy (push) Successful in 2m7s
CI / publish-container (push) Successful in 45s
- Add AutoCategoryDialog: pick furni (or empty page), suggest caption/icon/layout, live preview
- Add createAutoCategory server action (page + offers in one export) with CatalogKind
- Extend furni search API with interactionType
- Share ShopTile and refactor inline-editor/items-shop-preview to use it
- Add suggestion heuristics (suggestCategoryName/dIcon/layout) with tests
- Add autoCategory translations (en/nl)
2026-09-11 18:47:31 +02:00
Simo baeb54aeb5 feat(devops): separate public page server timing diagnostics
CI / check (push) Successful in 2m23s
CI / deploy (push) Successful in 1m13s
CI / publish-container (push) Successful in 44s
2026-09-11 10:49:08 +02:00
Simo d5091d1a73 fix(hk): protect unsaved editors and await prefix save results
CI / check (push) Successful in 2m34s
CI / deploy (push) Successful in 19s
CI / publish-container (push) Successful in 1m24s
2026-09-11 10:48:34 +02:00
Simo 89af4eb1f6 feat(studio): preserve work position and guide import completion
CI / check (push) Successful in 2m20s
CI / deploy (push) Successful in 18s
CI / publish-container (push) Successful in 1m22s
2026-09-11 10:48:09 +02:00
Simo c5a2b44807 feat(catalog): undo bulk offer edits with guarded history restoration
CI / check (push) Successful in 2m1s
CI / deploy (push) Successful in 18s
CI / publish-container (push) Successful in 1m28s
2026-09-11 10:47:46 +02:00
Simo 13bd3695cb feat(studio): recover matching Nitro sources and persist import phases
CI / check (push) Successful in 2m5s
CI / deploy (push) Successful in 1m8s
CI / publish-container (push) Successful in 1m4s
2026-09-11 10:22:06 +02:00
Simo 00e33623f7 feat(devops): diagnose slow HK requests and dependency timings
CI / check (push) Successful in 2m0s
CI / deploy (push) Successful in 1m35s
CI / publish-container (push) Successful in 46s
2026-09-11 09:48:19 +02:00
Simo 3b76d063a6 perf(studio): defer optional panels and trim validator imports
CI / check (push) Successful in 2m2s
CI / deploy (push) Successful in 1m11s
CI / publish-container (push) Successful in 44s
2026-09-11 09:25:21 +02:00
Simo a45d792563 ci: enforce reviewed Linux visual regression baselines
CI / check (push) Successful in 1m50s
CI / deploy (push) Successful in 1m7s
CI / publish-container (push) Successful in 42s
2026-09-11 09:09:05 +02:00
Simo fe1b358ed2 fix(ui): contain mobile article fields and stabilize history checks
CI / check (push) Successful in 1m51s
CI / deploy (push) Successful in 1m3s
CI / publish-container (push) Successful in 42s
2026-09-11 09:05:19 +02:00
Simo 88790d1a0d feat(cms): recover drafts and failed imports with verified UI workflows
CI / check (push) Successful in 2m3s
CI / deploy (push) Successful in 1m31s
CI / publish-container (push) Successful in 1m41s
2026-09-11 08:58:10 +02:00
Simo 410a1e466c fix(ci): keep optional report extraction non-blocking
CI / check (push) Successful in 58s
CI / deploy (push) Successful in 1m24s
CI / publish-container (push) Successful in 48s
2026-09-11 08:42:33 +02:00
Simo cc714b427a ci: report per-route JavaScript budgets from Docker build
CI / check (push) Failing after 54s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-11 08:41:31 +02:00
Simo 445ef13846 fix(public): distinguish unavailable data from empty results and missing pages
CI / check (push) Successful in 56s
CI / deploy (push) Successful in 1m30s
CI / publish-container (push) Successful in 44s
2026-09-11 00:39:53 +02:00
Simo db4acbb46e feat(editorial): validate publications and preserve partial event updates
CI / check (push) Successful in 57s
CI / deploy (push) Successful in 18s
CI / publish-container (push) Successful in 1m20s
2026-09-11 00:36:55 +02:00
Simo 76f0420d64 feat(import): run catalog synchronizations as durable jobs
CI / check (push) Successful in 57s
CI / deploy (push) Successful in 18s
CI / publish-container (push) Successful in 1m18s
2026-09-11 00:36:22 +02:00
Simo a2954e4408 feat(diagnostics): correlate staff operations errors and audit records
CI / check (push) Successful in 56s
CI / deploy (push) Successful in 19s
CI / publish-container (push) Successful in 1m15s
2026-09-11 00:34:49 +02:00
Simo 440ce4e556 test(me): use committed translations in dashboard tests
CI / check (push) Successful in 55s
CI / deploy (push) Successful in 19s
CI / publish-container (push) Successful in 1m23s
2026-09-11 00:34:21 +02:00
Simo a647b5451f feat(hk): persist named table views for staff accounts
CI / check (push) Failing after 55s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-11 00:32:15 +02:00
Simo 74223984dc feat(profile): add privacy controls and progressive photo gallery
CI / check (push) Failing after 53s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-11 00:31:29 +02:00
Simo ba9c61d808 feat(search): search public news events users and open rooms
CI / check (push) Failing after 54s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-11 00:29:54 +02:00
Simo 506e14783c test(i18n): validate nested housekeeping translation groups
CI / check (push) Failing after 53s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-11 00:28:26 +02:00
Simo 96d3e3f602 feat(events): add weekly browsing and personal registrations
CI / check (push) Failing after 53s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-11 00:27:41 +02:00
Simo 25d0a13050 feat(support): filter waiting tickets and staff assignments
CI / check (push) Failing after 53s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-11 00:20:54 +02:00
Simo 5d18af932d feat(news): add searchable paginated publication archive
CI / check (push) Failing after 53s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-11 00:19:12 +02:00
Simo a537c55793 feat(me): show actionable personal tasks with unavailable states
CI / check (push) Failing after 53s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-11 00:15:46 +02:00
Simo d9ea93a2e7 test(docker): derive image contract from pinned Node version
CI / check (push) Successful in 55s
CI / deploy (push) Successful in 19s
CI / publish-container (push) Successful in 2m35s
2026-09-11 00:14:43 +02:00
Simo fec8dd3c5d fix(docker): enforce Node version alignment across build stages
CI / check (push) Failing after 53s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-11 00:11:18 +02:00
openhands bcefb0f8ff build: update node engine range in package.json to match .nvmrc
CI / check (push) Successful in 54s
CI / deploy (push) Successful in 1m18s
CI / publish-container (push) Successful in 1m51s
2026-09-10 21:50:03 +02:00
openhands 8baf151d84 build: update node version in .nvmrc to match active runner version 26.8.2
CI / check (push) Failing after 17s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-10 21:49:12 +02:00
openhands 9a8c721111 fix: add avatar imager cache-buster for instant clothing updates
CI / check (push) Failing after 17s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-10 21:42:30 +02:00
openhands 75eada7a59 Replace DragonflyDB with Valkey throughout codebase
CI / check (push) Failing after 18s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
- Update all DragonflyDB references to Valkey in README and docker-compose.yml
- Update install instructions to use Valkey package repository and .deb download
- Update configuration paths from /etc/dragonfly/ to /etc/valkey/
- Update version requirement to Valkey 8.x+ (successor to Redis OSS)
2026-09-10 17:52:47 +02:00
openhands cea88eaa57 feat(catalog): repair page hierarchy cycles and duplicate sibling page order
CI / check (push) Successful in 1m3s
CI / deploy (push) Successful in 1m23s
CI / publish-container (push) Successful in 47s
The Arcturus errors "page hierarchy contains a cycle page 354 and 357" and
"sibling order 1 is used more than once (111 problems)" come from
catalog_pages, not catalog_items: pages 354/357 point at themselves, and
many parents have child pages sharing the same order_num. Extend the
emulator catalog scan + fix to detect both: pages whose parent chain loops
back get detached (parent_id = 0 on the highest cycle member) and every
affected parent's children are renumbered sequentially, preserving their
current relative order.

Add scripts/diag-emulator.ts to inspect the live catalog state.
2026-09-10 11:50:27 +02:00
openhands acbe54fcb7 style: apply biome lint fixes to catalog files and live repair tests
CI / check (push) Successful in 55s
CI / deploy (push) Successful in 1m23s
CI / publish-container (push) Successful in 45s
2026-09-10 11:32:20 +02:00
openhands 3e69b72513 feat(catalog): prevent and repair Arcturus emulator data errors
CI / check (push) Failing after 26s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
Block invalid catalog_items writes at the API level (points currency
allowlist, non-negative prices, positive amount, limited stack >= sold
count, unique sibling order numbers) and auto-assign unique order numbers
on bulk create. Add a catalog-maintenance scan + transactional repair that
fixes pre-existing rows: resets unsupported points_type, clamps negative
costs, sets amount to 1, raises limited_stack, renumbers duplicate orders
and deletes offers with missing page/item references. Surface the issue
count and a fix button in the admin maintenance panel.

Also: add enabled/retired flag to clone sources, classify poster and
currency furniture in item-kind, and remove the obsolete update-Nitrov3.sh.
2026-09-10 11:29:28 +02:00
Simo ad65d80d41 fix(ci): format catalog repair audit write
CI / check (push) Successful in 52s
CI / deploy (push) Successful in 1m27s
CI / publish-container (push) Successful in 48s
2026-09-09 22:01:40 +02:00
Simo 1ef405be0a feat(cms): add recovery history and operational reliability tools
CI / check (push) Failing after 22s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped
2026-09-09 21:57:56 +02:00
Simo 89526af344 feat(hk): expand search and add operational user overview
CI / check (push) Successful in 54s
CI / deploy (push) Successful in 1m16s
CI / publish-container (push) Successful in 1m57s
2026-09-09 21:14:10 +02:00
Simo 27447ce029 feat(docker): add guided install and saved one-command updates
CI / check (push) Successful in 53s
CI / deploy (push) Successful in 1m9s
CI / publish-container (push) Successful in 46s
2026-09-09 20:49:05 +02:00
Simo 8dc187483c fix(ci): verify registry upload against exported OCI config
CI / check (push) Successful in 51s
CI / deploy (push) Successful in 1m9s
CI / publish-container (push) Successful in 54s
2026-09-09 20:33:14 +02:00
Simo e617ed176a fix(ci): resolve OCI platform before verifying published config
CI / check (push) Successful in 50s
CI / deploy (push) Successful in 1m7s
CI / publish-container (push) Failing after 43s
2026-09-09 20:27:03 +02:00
Simo 2af244b634 fix(ci): publish registry blobs in bounded chunks
CI / check (push) Successful in 52s
CI / deploy (push) Successful in 1m6s
CI / publish-container (push) Failing after 1m2s
2026-09-09 20:22:07 +02:00
Simo 047cd9f3dd feat(catalog): add saved packages, preview and bulk price editing
CI / check (push) Successful in 52s
CI / deploy (push) Successful in 1m23s
CI / publish-container (push) Failing after 27s
2026-09-09 20:04:10 +02:00
Simo 867113d5d4 fix(ci): publish container under token account namespace
CI / check (push) Successful in 56s
CI / deploy (push) Successful in 1m9s
CI / publish-container (push) Failing after 30s
2026-09-09 19:53:16 +02:00
Simo c389c3893d feat(cms): improve catalog, editorial recovery and operations
CI / check (push) Successful in 52s
CI / deploy (push) Successful in 2m10s
CI / publish-container (push) Failing after 1m18s
2026-09-09 19:36:15 +02:00
Simo 2fead134e6 Merge branch 'main' of https://gitlab.epicnabbo.nl/remco/EpicNext-Cms 2026-09-09 19:33:42 +02:00