← Back

Release notes

Current version · v2026.05.26

v2026.05.262026-05-26

Added

  • Renamed the admin asset loader to make its admin-only access requirement explicit at every call site, with tests confirming it returns hidden assets and full file keys without filtering.

v2026.05.25.22026-05-25

Added

  • Moved the admin image grid into the shared portal-components package so every app uses one implementation.

v2026.05.252026-05-25

Added

  • Reorganized the delivery comment handlers — the route handlers now live in the shared portal-core package, and the comment permission check was split into separate endorse and resolve permissions.

v2026.05.232026-05-23

What's new

Comments on delivered assets now support emoji reactions and can be resolved when handled.

  • Reviewers can react to comments with emoji from the image viewer.
  • Comments can be marked resolved (and unresolved) to keep the conversation focused on what's still open.

Added

  • Added emoji reactions and resolve/unresolve to delivery review comments, with supporting database migrations and updates to the endorse, broadcast, and bulk-comment routes.

v2026.05.19.22026-05-19

What's new

QA approve and reject decisions are now tracked per version of each delivered asset.

  • When a new version of an image is uploaded, QA approvals and rejections now belong to that version instead of the asset as a whole, so a newer version must be reviewed separately.

Added

  • Synced QA approve and reject state to the specific delivery asset version, so QA decisions are recorded per version instead of per asset.
  • Added a restore-to-version test on alison-sheri to round out coverage.

v2026.05.192026-05-19

What's new

Admins can now restore a delivered image to any of its previous versions, and multi-version assets show a v{N} badge in the gallery.

  • A 'Restore' button in the image viewer reverts an asset to a previous version.
  • Asset cards in the delivery gallery now show a v{N} badge in the corner when the asset has multiple versions.
  • Pin comments now carry the version they were left on through every mutation response, so the viewer's version filter always reflects the right comments.

Added

  • Added a restore-to-version admin route and an in-viewer Restore button that reverts an asset to a previous version.
  • Added a v{N} corner badge on multi-version asset cards in the delivery gallery.
  • Replicated the version/register test coverage to alison-sheri.

Fixed

  • Fixed register-uploaded to create the v1 version row and set current_version_id on the asset.
  • Fixed comment mutation responses so versionNumber is populated on create, update, delete, endorse, broadcast, and bulk.
  • Fixed restore-to-version so it skips the r2_key mirror that previously caused a (delivery_id, r2_key) uniqueness collision.

v2026.05.18.22026-05-18

What's new

Delivered images can now have multiple versions, with an in-viewer switcher and an admin flow to upload a new version.

  • Admins can upload a new version of a delivered image directly from the image viewer.
  • The viewer shows a version-count badge plus a switcher to flip between revisions, with full-resolution downloads signed per version.
  • Pin comments can be filtered to the version they were left on.
  • Reviewers and clients can request a new revision of an image from the viewer.

Added

  • Added a version-aware schema for delivery assets, with a 0008_asset_versions migration, write paths that record each new version, and updated fixtures and tests.
  • Added API endpoints for new-version upload (register + upload-url), revision request actions, and a versions list, alongside the per-version sign route.
  • Added an in-viewer version switcher with a Select control, a version-count badge, an admin 'Upload new version' button, and a filter that scopes pin comments to the current version.

v2026.05.182026-05-18

What's new

QA reviewers can now open the full delivery image viewer directly from the QA queue.

  • The QA queue now opens the same image viewer used in the delivery gallery, with the comment and signing controls inline.

Added

  • Wired the delivery image viewer into the QA queue, with the gallery, action handlers, and queue-row components extracted into @onehundred/portal-components for reuse.
  • Drove lint warnings to zero with a centralized eslint config gated at --max-warnings 0, plus whitespace, code-style, typing, and logging cleanups.

v2026.05.16.22026-05-16

Added

  • Imported portal-components styles into the app's globals.css so shared components render with their full styling.

v2026.05.162026-05-16

What's new

Alison Sheri now connects to the shared model roster.

  • A 'Roster' entry now appears in the navigation, with a model list and detail pages.
  • Preview and roster activate/download routes are mounted, gated by per-app configuration.

Added

  • Mounted the model roster and preview routes on alison-sheri: a /roster page with a detail view, /api/preview, /api/roster/activate, /api/roster/download, the supporting roster-actor library, Shell+nav wiring, post-deploy seed docs, and preview-route gating tests.
  • Pointed the Drizzle config at a canonical db/drizzle/ folder shared across portal apps.

Fixed

  • Corrected the alison-sheri staging configuration to use the right app slug.

v2026.05.14.52026-05-14

Fixed

  • Stabilized workspace test suites so the CI test gate passes: mocked @/lib/r2 in the upscale/reject suites, aligned the comments broadcast, asset sign, admin upscale, and look routes with the test fixtures, and tightened shared test setup.

v2026.05.14.42026-05-14

What's new

The app now has a light/dark/system theme switcher in the shared shell.

  • A toggle in the app shell switches between light, dark, and a setting that follows the operating system.

Added

  • Picked up the light/dark/system theme switcher from @onehundred/portal-shell, with a toggle exposed in the shared app shell.

v2026.05.14.32026-05-14

Added

  • Migrated the app shell, layout primitives, navigation defaults, image cards, deliveries table, and look preview grid into the new @onehundred/portal-shell and @onehundred/portal-components workspace packages, with apps now consuming them from the workspace.

v2026.05.14.22026-05-14

What's new

Admin and QA pages now stream into place — the shell appears immediately and each section fills in as its data loads.

  • The admin dashboard's deliveries list and platform stats now appear with skeletons while their data loads.
  • The QA queue's signed-asset list now streams in independently of the surrounding shell.

Added

  • Switched the admin dashboard and QA queue pages to Suspense-based section streaming with dedicated skeletons.

v2026.05.142026-05-14

What's new

Alison Sheri's admin pages, delivery review UI, uploads page, and changelog have all been aligned onto the shared design system, matching what the demo and other portals use.

  • Admin delivery detail pages now follow the same layout as the demo, with Looks and Images at the top and Uploads/Integrations below.
  • The image overview supports a 'Per look' grouping mode, making it easier to scan deliveries that are organized around looks.
  • The uploads page has been rebuilt on the shared shell and now auto-refreshes the file list after each completed upload.
  • The changelog page has been redesigned to match demo's release-notes layout.
  • Clicking 'Deliveries' in the sidebar now navigates without re-rendering the entire app shell.

Added

  • Migrated apps/alison-sheri onto the shared @onehundred/portal-shell layout primitives, with a ShellClient split for client-side bits and matcher-excluded paths rendering cleanly.
  • Aligned the admin delivery detail page and image gallery to demo's pattern, with a Looks/Images view toggle, multi-image look previews, Field/Card primitives, and reordered sections.
  • Added a dedicated /home route inside the (shell) layout and refactored the uploads page onto the shared shell primitives.
  • Aligned the /changelog page to demo's Tailwind-based design.
  • Added 'Per look' grouping mode to the delivery image overview.
  • Extracted shared library code (delivery, upload, auth, R2 helpers, look grouping) into the new @onehundred/portal-core workspace package.
  • Set up a Vitest harness for route handlers covering deliveries, comments, approvals, uploads, hide/QA, admin management, asset hard-delete, upscale, and webhooks.

v2026.05.032026-05-03

What's new

The Alison Sheri client got a top-to-bottom design refresh — admin pages, delivery review pages, the QA queue, and delivery charts now share the same look as the demo and the hub.

  • Admin pages (deliveries table, action queue, image grid, looks grid, integrations form, upload forms, new-delivery form, admin users) have been migrated to the shared design system.
  • Delivery review pages (gallery, image viewer, gallery toolbar, broadcast comment dialog, bulk comment composer, activity timeline) have been migrated to the shared design system.
  • The QA queue page has been migrated to the shared design system.
  • Delivery charts have been rebuilt on the new shared chart primitive.

Added

  • Adopted the shared @onehundred/ui design system and Tailwind in the alison-sheri app, starting with the homepage, version badge, and deliveries table.
  • Migrated admin pages — admin landing, action queue, image grid, looks grid, integrations form, upload form, zip upload form, new-delivery form, and admin users — to the shared design system.
  • Migrated delivery review pages — gallery, image viewer, gallery toolbar, broadcast comment dialog, bulk comment composer, and activity timeline — to the shared design system.
  • Migrated the QA queue page to the shared design system.
  • Rebuilt the delivery charts on the shared Recharts-based chart primitive.
  • Picked up additional shared UI primitives across the app (button, dialog, dropdown, label, sheet, tabs, alert dialog, breadcrumb, navigation menu, pagination, scroll area, toggle group).

v2026.05.022026-05-02

What's new

Fixed how zip uploads handle a single wrapping folder — each subfolder inside it now becomes its own look.

  • Zip uploads now strip a single wrapping root folder so each subfolder inside it becomes its own look, instead of all images getting bundled together.

Fixed

  • Fixed zip upload so a single wrapping root folder is unwrapped — each subfolder inside it becomes its own look instead of all images being collapsed into one.

v2026.04.30.42026-04-30

What's new

Two admin-side fixes — the integrations form now reflects saves right away, and rejecting an upscale is admin-only.

  • The integrations form (Slack webhook URL, customer ID) now reflects saved values immediately after Save, with no hard-refresh needed.
  • Rejecting an upscale is now an admin-only action — non-admin reviewers can still approve, but only admins can detach and reset an upscale.

Fixed

  • Fixed the integrations form keeping stale state after Save — Slack webhook URL and customer ID now resync from the server when the page refreshes.
  • Locked the upscale-reject endpoint to admins and added cleanup of the underlying R2 objects when an upscale is rejected; previously any signed-in user could reject and the file lingered in storage.

v2026.04.30.32026-04-30

What's new

Two fixes to admin upload behavior — uploads, deletes, and deleted looks now behave the way you'd expect.

  • The admin image grid refreshes immediately after an upload or delete, no manual page refresh needed.
  • Deleting a look now also removes its underlying images, so they no longer reappear in the client gallery on the next load.

Fixed

  • Fixed the admin image grid not refreshing after an asset upload or delete — newly uploaded assets and cascade-deleted look images now appear immediately without a browser refresh.
  • Fixed deleted look images reappearing in the client gallery on the next page load — the look DELETE handler now also removes the underlying R2 objects, not just the database rows.

v2026.04.30.22026-04-30

What's new

Bundled looks now appear right after a zip upload, without needing a browser refresh.

  • After uploading a 'looks' zip, the looks grid updates immediately — no manual refresh needed.

Fixed

  • Fixed the admin looks grid not refreshing after a zip upload finished — newly created looks now appear immediately without a browser refresh.

v2026.04.302026-04-30

What's new

Reviewers can now comment on many images at once.

  • Multi-select images on the delivery gallery and add a single comment to all of them in one go.
  • An existing comment can also be broadcast to additional images from a picker, sharing one synced copy across the group.

Added

  • Reviewers can multi-select images on the gallery and add a single comment to all selected images at once. An existing comment can also be broadcast to additional images via a picker, with all copies sharing one comment group.

v2026.04.29.32026-04-29

What's new

A bigger magnifier on the delivery viewer, plus tidier comment behavior.

  • The magnifier on the delivery image viewer is larger and zooms in further (now 300px wide at 4× zoom).
  • Long usernames no longer push the date out of the comment box — role and 'internal' pills now wrap to a second line when needed.
  • Deleting a top-level delivery comment now also removes the replies in that thread, in one action.

Added

  • The delivery image magnifier is now larger and zooms in further (300px wide at 4× zoom).

Fixed

  • Fixed a comment header layout where long usernames could push the date out of the comment box; role pills now wrap to a second line.
  • Deleting a top-level delivery comment now also removes any replies in that thread, in one action.

v2026.04.29.22026-04-29

What's new

The changelog page is now live, and admins can keep certain comments private to the team.

  • A new /changelog page lists every release with a 'What's new' summary, the list of additions, and any fixes.
  • A small version badge in the bottom-left corner links to the changelog.
  • Admins can now mark a delivery comment as internal, so only other admins see it — clients and reviewers don't.

Added

  • Added a /changelog page (with a 'What's new' intro) and a small version badge in the bottom-left corner.
  • Admins can mark individual delivery comments as internal — visible only to admins, not to clients or reviewers.

Fixed

  • Closed paths where internal comments could leak into events, endorsements, and replies.

v2026.04.292026-04-29

What's new

Alison Sheri delivery now includes a full QA review flow, instant filters on the overview, and bundled looks via zip upload.

  • Filters on the delivery overview now respond instantly.
  • A QA review step: assets are pending until a reviewer approves them, and clients only see approved assets.
  • An internal QA queue page where reviewers can work through pending assets.
  • Admins can mark which team members can act as QA reviewers.
  • Admins can permanently delete a delivered asset after a typed-filename confirmation.
  • Bundled "looks" can now be uploaded as a zip and shown alongside the delivery.

Added

  • Initial alison-sheri delivery app with a shared image-previews worker for thumbnails on the delivery overview.
  • Filters on the delivery overview now respond instantly.
  • QA workflow: is_qa flag and DeliveryUser.isQa, qa_status columns with backfill on delivery_assets, client visibility gated on approval, /qa/approve and /qa/reject routes with pending/approved/rejected events, an internal QA queue page for reviewers, an admin user-management UI for the is_qa toggle, and pills plus dimming for non-approved assets.
  • Admin-only hard delete for delivered assets.
  • /admin/users is now scoped to users with hub access for this app, with the hub app slug overridable per environment.
  • Bundled "looks" can now be uploaded as a zip.

Fixed

  • Fixed filtering behavior on the delivery overview.
  • Editor, AD, and CD roles are now treated like viewer for the QA gate.
  • Hardened the empty-slug case on the hub users API and prevented CDN caching of stale 404s.
  • Typed-filename confirm on asset deletion, and the API is now idempotent on a 404.
  • Fixed looks showing 0 images by rewriting the count subqueries as bare SQL.
v2026.05.26