Skip to content

release: v1.4.1 - #9545

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

release: v1.4.1#9545
sriramveeraghanta wants to merge 9 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.
  • Work item layouts are now wrapped in an error boundary. If a single layout fails to render, it degrades to a local "Something went wrong" message with a Retry button instead of taking down the whole page.

🐞 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.
  • Fixed crashes on work items whose labels included an ID that no longer resolves to a label, affecting the properties row, the spreadsheet label column, the peek overview, and draft work items.
  • Fixed crashes when a response came back empty or in an unexpected shape, affecting description version history, previous exports, the integrations list, profile activity, and sub-work-items.
  • Fixed the previous exports list failing to refresh, and surfaced an error instead of failing silently when the refresh does not go through.
  • Fixed profile activity showing a loading state indefinitely instead of an empty state when a user had no activity.

🛡️ 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.
  • Upgraded cryptography to 50.0.0 to close a high-severity PKCS#7 Bleichenbacher oracle.
  • Upgraded React Router to 7.18.1, resolving denial-of-service, open redirect, cross-site scripting, and constructor injection advisories.
  • Upgraded sharp to 0.35.3 to pick up high-severity libvips fixes.
  • Resolved further high-severity advisories in fast-uri (host confusion), js-yaml (quadratic CPU denial of service), linkify-it (mailto validator denial of service), postcss (source map path traversal), and undici (information disclosure, CRLF and cookie injection).
  • Resolved medium- and low-severity advisories in sanitize-html (URI scheme validation bypass), valibot, and body-parser (request limit bypass).

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: ce7f6131-bc2e-4a51-b033-dc95c8326168

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 3 new issues in 3 files · 3 warnings · score 89 / 100 (Great) · 3 fixed · vs master

3 warnings

core/components/issues/issue-layouts/spreadsheet/columns/label-column.tsx

  • ⚠️ L14 Import from a barrel file no-barrel-import

core/components/issues/peek-overview/properties.tsx

  • ⚠️ L42 Import from a barrel file no-barrel-import

core/components/issues/workspace-draft/draft-issue-properties.tsx

  • ⚠️ L31 Import from a barrel file no-barrel-import

Reviewed by React Doctor for commit 31853ab. See inline comments for fixes.

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 thread packages/utils/src/module.ts
* 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.
codingwolf-at and others added 2 commits August 5, 2026 00:21
…ashes (#9546)

* fix: filter out undefined label options in issue properties components

Updated the mapping of label IDs to ensure that only defined label options are included in the defaultLabelOptions array across multiple components. This change enhances the robustness of the label handling in the IssueProperties and SpreadsheetLabelColumn components, as well as in the PeekOverviewProperties component.

* fix: ensure array checks for results in various components

Updated multiple components to include checks for array types before accessing results. This change enhances stability by preventing potential runtime errors when results are undefined or not an array. Affected components include DescriptionVersionsRoot, PrevExports, SingleIntegrationCard, ProfileActivity, and IssueSubIssuesStore.

* fix: wrap children in LayoutErrorBoundary for improved error handling

Updated the IssueLayoutHOC component to include LayoutErrorBoundary, enhancing error handling by wrapping the children. This change aims to provide a more robust user experience by catching layout-related errors effectively.

* fix: optimize handleRefresh with useCallback in PrevExports component

Refactored the handleRefresh function in the PrevExports component to use useCallback, improving performance by memoizing the function. Additionally, updated the useEffect dependency array to include handleRefresh, ensuring the effect runs correctly when dependencies change. This change enhances the efficiency of the component's refresh logic.

* fix: enhance LayoutErrorBoundary with retry functionality and improved error messaging

Refactored the LayoutErrorBoundary component to include a dedicated LayoutErrorFallback for better error presentation. Added a retry mechanism that allows users to attempt to reload the content after an error occurs. This change improves user experience by providing clearer messaging and a more interactive way to recover from errors.

* fix: improve label option handling and array checks in various components

Refactored the defaultLabelOptions logic in multiple components to use flatMap for better handling of undefined labels. Additionally, updated array checks in the PrevExports component to ensure results are properly validated before access. These changes enhance the robustness and stability of the components, preventing potential runtime errors.

* fix: refactor ProfileActivity component for improved loading and data handling

Updated the ProfileActivity component to enhance the loading state management and streamline the rendering of user activity results. The refactor includes a more efficient check for userProfileActivity, ensuring that loading indicators and empty states are displayed correctly. This change improves the user experience by providing clearer feedback during data fetching and handling scenarios with no activity results.

* fix: improve type safety and array handling in integration card and sub-issues store

Updated the SingleIntegrationCard component to use a specific type for workspace integrations, enhancing type safety. Additionally, refactored the subIssues assignment in the IssueSubIssuesStore to ensure it correctly checks for an array before assignment, improving stability and preventing potential runtime errors.

* fix: enhance handleRefresh in PrevExports component with error handling

Refactored the handleRefresh function in the PrevExports component to include error handling during the refresh process. The function now uses async/await for better readability and ensures that any errors during the mutation are logged, improving the robustness of the component's refresh logic.

* style: fix oxfmt formatting flagged by CI check:format

Multi-line flatMap guard needed reformatting to satisfy oxfmt.

* style: reformat defaultLabelOptions logic for consistency

Adjusted the formatting of the defaultLabelOptions logic in the DraftIssueProperties component to maintain consistency with the project's coding standards. This change enhances readability without altering functionality.
Python (apps/api):
- cryptography 48.0.1 -> 50.0.0 (PKCS#7 Bleichenbacher oracle, high)

npm (pnpm-workspace.yaml catalog/overrides + lockfile):
- react-router 7.15.1 -> 7.18.1, @react-router/dev -> 7.17.0,
  @react-router/node/serve -> 7.18.1 (DoS, open redirect, XSS, constructor injection)
- sharp ^0.34.3 -> ^0.35.3 (libvips CVEs, high)
- fast-uri -> 3.1.5 via override (host confusion, high)
- js-yaml -> 4.3.0 via override (quadratic CPU DoS, high)
- linkify-it -> 5.0.2 via override (mailto validator DoS, high)
- postcss 8.5.15 -> 8.5.25 (source map path traversal, high/medium)
- undici -> 7.29.0 via override (info disclosure, CRLF/cookie injection)
- sanitize-html 2.17.0 -> 2.17.5 (URI scheme validation bypass, medium)
- valibot -> 1.4.2 via override (flatten() throw, medium)
- body-parser -> 1.20.6 via override (limit bypass DoS, low)
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