Skip to content

release: v1.4.1 - #9545

Open
sriramveeraghanta wants to merge 7 commits into
masterfrom
release/v1.4.1
Open

release: v1.4.1#9545
sriramveeraghanta wants to merge 7 commits into
masterfrom
release/v1.4.1

Conversation

@sriramveeraghanta

@sriramveeraghanta sriramveeraghanta commented Aug 4, 2026

Copy link
Copy Markdown
Member

✨ Features

Workspace Member Reactivation Command

Self-hosted administrators can now restore a deactivated workspace member straight from the command line, without editing the database by hand. Running reactivate_workspace_member <workspace-slug> <email> re-enables the membership and reports the role the member is restored to.

  • Validates the workspace, the user, and the existing membership before changing anything, with a clear error when any of them is missing
  • Safe to re-run — an already-active member is reported as such instead of failing
  • Keeps audit fields intact by limiting the write to the membership's active state

⬆️ Enhancements

  • The workspace-level modules list now returns the member IDs for each module, so module members and member-based filters render correctly on the workspace modules view.

🐞 Bug fixes

  • Fixed notifications failing to load on self-hosted deployments, where a missing trailing slash on the notification list request surfaced as a 500 error behind the reverse proxy.
  • Fixed filtering modules by member breaking for modules with no members assigned.
  • Fixed the layout dropdown button being clipped and overlapping neighbouring controls in the Create View modal.

🛡️ Security

  • Hardened asset uploads on published Space pages. The endpoint previously trusted the client-supplied file size when signing the upload policy, allowing a caller to request a policy larger than the instance's configured FILE_SIZE_LIMIT. The size is now clamped to the instance limit and malformed values are rejected.

pablohashescobar and others added 5 commits August 2, 2026 03:17
* feat: add command to reactivate workspace members with error handling

* fix: address review comments on reactivate command

- normalize email input to match User.save lowercasing
- fix grammar in error messages
- limit save to is_active so audit fields are not clobbered

Claude-Session: https://claude.ai/code/session_01NGjXVUi4D8JGWy7b7KDNaN

* fix: normalize inputs before validation and report partial reactivation

- strip slug/email before the required checks so whitespace-only args are rejected
- bump updated_at and pass disable_auto_set_user so the audit fields survive
- report the restored role, inactive project memberships, and inactive accounts

Claude-Session: https://claude.ai/code/session_01NGjXVUi4D8JGWy7b7KDNaN

---------

Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
list() omitted the trailing slash while every sibling method and the
Django route require /users/notifications/. Self-hosted (Traefik)
surfaces the upstream 404 as 500; unread badge still works.

Fixes #9489
Added an annotation to the WorkspaceModulesEndpoint to aggregate member IDs into an array, ensuring that only active members are included. This change improves the data structure returned by the API, allowing for better handling of member information in the frontend. Updated the corresponding utility function to handle potential null values for member IDs.
… Create View modal (#9542)

Replaced the icon button styling with a more generic button styling for the dropdown component to ensure consistency across the UI. This change enhances the visual coherence of the dropdown button's appearance.
Copilot AI lite review requested due to automatic review settings August 4, 2026 14:31
@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: e50b4f62-a981-46a3-b3f7-35a1fde76642

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

React Doctor found no new issues. 🎉

Reviewed by React Doctor for commit ed61f99.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Ready to approve

The changes are low-risk and consistent with existing patterns, with only a minor optional performance nit noted in the module ordering helper.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Pull request overview

Release v1.4.1 updates several small areas across docs, frontend utilities/UI, services, and the API to improve module/member handling, align notification endpoints, and add an admin utility command.

Changes:

  • Add “Managed hosting” (Zenith) option to the README getting-started table.
  • Improve module client-side ordering/filtering robustness and align workspace module API payloads with member_ids.
  • Normalize workspace notification API calls to the canonical trailing-slash route and add a management command to reactivate workspace members.
File summaries
File Description
README.md Adds a managed hosting deployment option link/button.
packages/utils/src/module.ts Uses toSorted() for name ordering and guards member_ids against undefined.
packages/services/src/workspace/notification.service.ts Updates notifications endpoint to include trailing slash.
apps/web/core/services/workspace-notification.service.ts Updates notifications endpoint to include trailing slash (web app).
apps/web/core/components/dropdowns/layout.tsx Switches dropdown button styling helper to standard button styling.
apps/api/plane/db/management/commands/reactivate_workspace_member.py Adds Django management command to reactivate an inactive workspace member.
apps/api/plane/app/views/workspace/module.py Annotates workspace modules with member_ids via ArrayAgg + Coalesce for consistent API output.
Review details
  • Files reviewed: 7/7 changed files
  • Comments generated: 1
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

Comment on lines +33 to +34
if (orderByKey === "name") orderedModules = [...modules].toSorted((a, b) => naturalSort(a.name, b.name));
if (orderByKey === "-name") orderedModules = [...modules].toSorted((a, b) => naturalSort(b.name, a.name));
* fix(api): enforce FILE_SIZE_LIMIT on published Space asset upload

The public Space asset upload endpoint
(POST /api/public/assets/v2/anchor/{anchor}/) trusted the client-supplied
`size` value end-to-end: it was stored on the FileAsset and passed straight
to generate_presigned_post(), which uses it as the S3/MinIO policy bound
(["content-length-range", 1, file_size]). This let an authenticated user
obtain a signed upload policy exceeding the instance's FILE_SIZE_LIMIT.

Cap the value with `size_limit = min(size, settings.FILE_SIZE_LIMIT)` and use
it consistently for the stored asset metadata and the presigned POST policy,
matching every other asset upload endpoint.

* fix(api): clamp Space asset size to a valid lower bound

Address review feedback: reject malformed (non-integer) `size` with 400 and
clamp the value to [1, FILE_SIZE_LIMIT] via max(1, min(...)) so the presigned
content-length-range is always valid and no non-positive size is persisted.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants