[SILO-1087] feat: add IssueRelations external API#8763
[SILO-1087] feat: add IssueRelations external API#8763sriramveeraghanta merged 2 commits intopreviewfrom
Conversation
|
Linked to Plane Work Item(s) This comment was auto-generated by Plane |
📝 WalkthroughWalkthroughAdds issue-relation support: new serializers, a GET/POST API endpoint to list and bulk-create typed relations, URL routing, and OpenAPI decorator for relation endpoints. Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant Endpoint as IssueRelationListCreateAPIEndpoint
participant DB as Database
participant Serializer as Serializers
rect rgba(100, 150, 200, 0.5)
Note over Client,Endpoint: GET /relations/
Client->>Endpoint: GET /relations/
Endpoint->>DB: Query IssueRelation with ArrayAgg/Coalesce
DB-->>Endpoint: Aggregated relation IDs by type
Endpoint->>Serializer: IssueRelationResponseSerializer
Serializer-->>Endpoint: Grouped relations payload
Endpoint-->>Client: 200 OK with grouped relations
end
rect rgba(200, 150, 100, 0.5)
Note over Client,Endpoint: POST /relations/
Client->>Endpoint: POST /relations/ (relation_type, issue_ids)
Endpoint->>Serializer: IssueRelationCreateSerializer (validate)
Serializer-->>Endpoint: Validated data
Endpoint->>DB: Compute actual_relation, bulk create IssueRelation (ignore_conflicts)
DB-->>Endpoint: Created/ignored rows
Endpoint->>DB: Re-fetch created relations with select_related
DB-->>Endpoint: Enriched relation records
Endpoint->>Serializer: RelatedIssueSerializer / IssueRelationSerializer
Serializer-->>Endpoint: Serialized created relations
Endpoint-->>Client: 201 Created with relation metadata
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~50 minutes Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (1)
apps/api/plane/api/views/issue.py (1)
2249-2252: Remove pagination params from relation-list docs (endpoint is not paginated).
get()returns a grouped object, not a paginated list, socursor/per_pagein docs is misleading.Also applies to: 2283-2330
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/api/plane/api/views/issue.py` around lines 2249 - 2252, Remove the pagination parameters from the relation-list endpoint documentation because get() returns a grouped object rather than a paginated list; specifically remove CURSOR_PARAMETER and PER_PAGE_PARAMETER (and any mentions of ORDER_BY_PARAMETER/CURSOR usage) from the parameter array where ISSUE_ID_PARAMETER is used for the relation-list docs referenced around the get() handler, and do the same cleanup for the second occurrence noted (the block around the other relation-list docs). Ensure the docs only include ISSUE_ID_PARAMETER and any relevant non-pagination params so the OpenAPI docs reflect the non-paginated grouped response.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@apps/api/plane/api/serializers/issue.py`:
- Around line 533-534: The serializer currently uses PrimaryKeyRelatedField for
the scalar UUID source "related_issue.project_id" (in the project_id field)
which expects a model instance; change the field to
serializers.UUIDField(source="related_issue.project_id", read_only=True) and do
the same for the other occurrence of project_id elsewhere in the file (the
duplicate at the later block around sequence_id), while leaving sequence_id as
serializers.IntegerField(source="related_issue.sequence_id", read_only=True);
ensure both project_id declarations reference the scalar UUID source and are
read_only UUIDField instances.
In `@apps/api/plane/api/views/issue.py`:
- Around line 2391-2418: The bulk_create call
(IssueRelation.objects.bulk_create) can insert relations with issue IDs that
don't belong to the same project/workspace and may raise IntegrityError; before
calling bulk_create, fetch and validate that the source issue_id and every ID in
serializer.validated_data["issues"] exist and belong to the same
Project/workspace (use Issue.objects.filter(pk__in=ids, project_id=project_id,
workspace_id=project.workspace_id) and compare counts or returned IDs), and
return a 400 Response if any IDs are missing/out-of-scope; only then proceed to
build the IssueRelation instances (respecting is_reverse and
get_actual_relation) and call bulk_create with ignore_conflicts.
- Around line 2403-2460: The bulk_create call uses ignore_conflicts=True which
silently skips existing issue-pair rows that have a different relation_type,
then still returns 201 and possibly an empty/partial result; fix by pre-checking
for conflicting existing relations before creating: query IssueRelation for the
same issue/related_issue pairs (use the same logic as refetch_filter but without
relation_type or with exclude(relation_type=actual_relation)) to find rows where
a pair exists with a different relation_type, and if any are found return a 409
response listing the conflicting pairs (or otherwise surface an error) instead
of proceeding to IssueRelation.objects.bulk_create with ignore_conflicts=True;
keep the rest of the flow (refetch_filter, refetched_relations, serializer
selection) unchanged but only execute them after the conflict check passes.
---
Nitpick comments:
In `@apps/api/plane/api/views/issue.py`:
- Around line 2249-2252: Remove the pagination parameters from the relation-list
endpoint documentation because get() returns a grouped object rather than a
paginated list; specifically remove CURSOR_PARAMETER and PER_PAGE_PARAMETER (and
any mentions of ORDER_BY_PARAMETER/CURSOR usage) from the parameter array where
ISSUE_ID_PARAMETER is used for the relation-list docs referenced around the
get() handler, and do the same cleanup for the second occurrence noted (the
block around the other relation-list docs). Ensure the docs only include
ISSUE_ID_PARAMETER and any relevant non-pagination params so the OpenAPI docs
reflect the non-paginated grouped response.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 496d6ae4-e178-48a4-be19-e5a7bd9bb0d2
📒 Files selected for processing (7)
apps/api/plane/api/serializers/__init__.pyapps/api/plane/api/serializers/issue.pyapps/api/plane/api/urls/work_item.pyapps/api/plane/api/views/__init__.pyapps/api/plane/api/views/issue.pyapps/api/plane/utils/openapi/__init__.pyapps/api/plane/utils/openapi/decorators.py
There was a problem hiding this comment.
Actionable comments posted: 3
♻️ Duplicate comments (1)
apps/api/plane/api/serializers/issue.py (1)
624-626:⚠️ Potential issue | 🔴 CriticalUse
UUIDFieldforproject_idon the reverse serializer.Line 625 points
PrimaryKeyRelatedFieldatissue.project_id, which is already a UUID scalar. DRF relation fields expect a related object and will try to serialize.pk, so reverse-relation responses can fail here. Switch this toserializers.UUIDField(source="issue.project_id", read_only=True).💡 Proposed fix
- project_id = serializers.PrimaryKeyRelatedField(source="issue.project_id", read_only=True) + project_id = serializers.UUIDField(source="issue.project_id", read_only=True)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/api/plane/api/serializers/issue.py` around lines 624 - 626, Change the serializer field for project_id to use serializers.UUIDField instead of serializers.PrimaryKeyRelatedField: update the field declaration (currently project_id = serializers.PrimaryKeyRelatedField(source="issue.project_id", read_only=True)) to project_id = serializers.UUIDField(source="issue.project_id", read_only=True) so the reverse serializer emits the UUID scalar from issue.project_id rather than treating it as a related-object field; leave id and sequence_id declarations unchanged.
🧹 Nitpick comments (1)
apps/api/plane/api/views/issue.py (1)
2442-2448:issue__typeis still missing from the refetch query.Reverse responses serialize
issue.type.idandissue.type.is_epic, so this query still does per-row lookups even though the comment says N+1s are being avoided. Addissue__typetoselect_related()here.♻️ Proposed fix
refetched_relations = IssueRelation.objects.filter( refetch_filter, workspace__slug=slug, ).select_related( + "issue__type", "issue__state", "related_issue__state", )🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/api/plane/api/views/issue.py` around lines 2442 - 2448, The refetch query on IssueRelation (refetched_relations = IssueRelation.objects.filter(...).select_related(...)) omits the related issue type so reverse responses still trigger per-row lookups; update the select_related call on IssueRelation to include "issue__type" (alongside the existing "issue__state" and "related_issue__state") so that issue.type.id and issue.type.is_epic are fetched in the same query.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@apps/api/plane/api/views/issue.py`:
- Around line 2394-2412: The bulk_create block can create duplicate logical
relations for symmetric types like "duplicate" and "relates_to" because you only
flip asymmetric types via is_reverse; update the logic around IssueRelation bulk
creation so symmetric relations are normalized or pre-checked: detect when
relation_type is symmetric (e.g., "duplicate", "relates_to"), then for each
candidate pair normalize the order (canonicalize by id or tuple sort) or query
existing IssueRelation rows for either (issue, issue_id) or (issue_id, issue)
and filter out those already present before calling
IssueRelation.objects.bulk_create; keep references to get_actual_relation,
relation_type, is_reverse, issues, and the IssueRelation bulk_create call to
locate and modify the code.
- Around line 2351-2354: The POST 201 OpenApiResponse currently claims
IssueRelationSerializer[] but actually returns IssueRelationSerializer[] or
RelatedIssueSerializer[] depending on the relation_type; update the OpenAPI
response to document both shapes explicitly (or normalize the response to a
single serializer) — e.g., replace the single IssueRelationSerializer(many=True)
with a polymorphic/OneOf response that includes
IssueRelationSerializer(many=True) and RelatedIssueSerializer(many=True) (using
your OpenAPI helper / drf-spectacular OneOf construct), and apply the same
change for the other POST response instance referenced (the one around lines
2450-2452); ensure the relation_type parameter is noted in the operation
description so consumers know which variant will be returned.
- Around line 2297-2300: Ensure the code validates that the requested issue_id
belongs to the route's (slug, project_id) and returns a 404 if not, then
restrict the IssueRelation query to that project: first fetch or get Issue (or
Issue.objects.filter(pk=issue_id, workspace__slug=slug, project__id=project_id))
and raise Http404 if absent, and then build issue_relation_qs using
IssueRelation.objects.filter((Q(issue_id=issue_id) |
Q(related_issue_id=issue_id)), workspace__slug=slug, project__id=project_id) so
relations are limited to the same project; update any variables (e.g.,
issue_relation_qs, issue_id checks) accordingly.
---
Duplicate comments:
In `@apps/api/plane/api/serializers/issue.py`:
- Around line 624-626: Change the serializer field for project_id to use
serializers.UUIDField instead of serializers.PrimaryKeyRelatedField: update the
field declaration (currently project_id =
serializers.PrimaryKeyRelatedField(source="issue.project_id", read_only=True))
to project_id = serializers.UUIDField(source="issue.project_id", read_only=True)
so the reverse serializer emits the UUID scalar from issue.project_id rather
than treating it as a related-object field; leave id and sequence_id
declarations unchanged.
---
Nitpick comments:
In `@apps/api/plane/api/views/issue.py`:
- Around line 2442-2448: The refetch query on IssueRelation (refetched_relations
= IssueRelation.objects.filter(...).select_related(...)) omits the related issue
type so reverse responses still trigger per-row lookups; update the
select_related call on IssueRelation to include "issue__type" (alongside the
existing "issue__state" and "related_issue__state") so that issue.type.id and
issue.type.is_epic are fetched in the same query.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: e6f7dbc2-e245-47be-9c51-7baf4f2c0c63
📒 Files selected for processing (2)
apps/api/plane/api/serializers/issue.pyapps/api/plane/api/views/issue.py
* fix: editor sync changes (#8306)
* chore: upate function declarations
* chore: formatted files
* chore: fix/check tooling improvements with turbo (#8304)
* fix: broken lock file
* chore: add Plane sync label to github templates #8303
Co-authored-by: Pushya Mitra Thiruvooru <pushya@Pushyas-MacBook-Pro.local>
* [WEB-5624] chore: added webhook translations #8312
* chore(deps): upgrade next themes package
* [WEB-5654]fix: custom select selection and dropdown close #8324
* [WEB-5124] chore: intake work item toast enhancements (#8329)
* [WEB-5647] chore: list layout work item identifier enhancements (#8326)
* chore: file formating
* [WEB-5650] feat: Enable Gitea OAuth configuration (#8325)
* feat: implement OAuth configuration helper and integrate into auth forms
* fix: ensure OAuth providers are disabled by default if not configured
* [WEB-5602] feat: new design system (#8220)
* chore: init tailwind v4
* chore: update all configs
* chore: add source to parse monorepo packages
* chore: combine all css files
* feat: added extended colors
* chore: update typography
* chore: update extended color var names
* refactor: remove initial spacing variable and update dark mode selector
* chore: update css files
* chore: update animations
* chore: remove spacing tokens
* fix: external css files
* chore: update tailwind-merge version
* chore: update font family
* chore: added brief agents.md and story for new design system
* chore: enhance design system documentation with rare exceptions for visual separation
* chore: add fontsource package for typography
* chore: material symbols font added
* chore: update shadow default
* chore: add stroke and outline theme vars
* chore: update ring and fill colors
* chore: overwrite tailwind typography tokens
* chore: add high contrast mode tokens
* chore: update scrollbar colors
* chore: backward compatibility for buttons and placeholders
* chore: add priority colors
* chore: update urgent priority color
* chore: update plan colors
* chore: add missing utility class
* chore: update height and padding classes
* chore: update label colors
* chore: add missing utlity
* chore: add typography plugin to space app
* chore: replace existing classNames with new design system tokens #8244 (#8278)
* chore: update border colors
* chore: update all borders
* chore: update text colors
* chore: update css variables
* chore: update font sizes and weights
* chore: update bg colors
* chore: sync changes
* fix: uncomment spacing-1200 variable in variables.css
* chore: update primary colors
* refactor: updated border to border-subtle
* refactor: update various components and improve UI consistency across the application
* updated classnames
* updated classnames
* refactor: update color-related class names to use new design system variables for consistency
* chore: default automations
* chore: update text sizes
* chore: home and power k
* chore: home and power k
* chore: replace ui package button components
* chore: update text sizes
* chore: updated issue identifier (#8275)
* refactor: top navigation and sidebar design token (#8276)
* chore: update all button components (#8277)
* chore: new button component
* chore: update existing buttons
* chore: overwrite tailwind typography tokens
* fix: twMerge config + fixed cn instances
* refactor: toast design token updated (#8279)
* chore: update existing buttons
* chore: tooltip design token updatged (#8280)
* chore: moved cn utility to propel (#8281)
* chore: update space app UI (#8285)
* chore; update space app filters component
* fix: button whitespace wrap
* chore: space app votes
* chore: update dropdown components
* refactor: auth, onboarding, sidebar, and common component design token migration (#8291)
* chore: checkbox component design token updated
* chore: indicator and oauth component design token updated
* chore: sidebar design token updated
* chore: auth and onboarding design token updated
* chore: update divider color
* style: update background colors and hover effects across list components
* fix: tailwind merge
* refactor: toggle switch design token migration and header utility classname added (#8295)
* chore: toggle component design token updated
* chore: h-header utility class added
* chore: updated color tokens for work item detail page (#8296)
* chore: update react-day-picker UI
* refactor: update button sizes and styles in filters components
* refactor: breadcrumbs design token updated (#8297)
* chore: update priority icon colors
* refactor: updated layout variables
* chore: update plan card primary CTA
* Chore update editor design system (#8299)
* refactor: update styles for callout, color selector, logo selector, and image uploader
* refactor:fix image
* chore: update settings UI
* chore: updated notifications color and size tokens (#8302)
* chore: update sm button border radius
* fix: logo renderer
* chore: icon button component
* chore: remove deprecated classes
* chore: remove deprecated classes
* chore: update editor list spacing
* fix: icon button size
* chore: improvements (#8309)
* chore: update cycles and modules pages
* refactor: update background styles across various components to use new design system colors
* fix: button type errors
* chore: update modals design system (#8310)
* refactor: callout bg
* refactor: code bg
* refactor: modal size and variant
---------
Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com>
* chore: update next-themes
* design: update billing and plans component styles and remove unused utility functions (#8313)
* refactor: empty state design token migration and improvements (#8315)
* fix: profile page
* refactor: tabs design token updated (#8316)
* chore: updated buttons and tokens for work items (#8317)
* fix: adjust trial button spacing in checkout modal
* chore: update add button hover state
* fix: type error (#8318)
* fix: type error
* chore: code refactor
* refactor: update button sizes and background styles in rich filters components
* refactor: update editor bg
* refactor: enhance Gantt chart sidebar functionality and styling
- Removed unused prop from .
- Updated to include new props for better block management and scrolling behavior.
- Improved auto-scroll functionality for Gantt chart items.
- Adjusted styles in component for consistent design.
* regression: gantt design
* chore: new badge component
* fix: favorite star
* chore: update backgroung, typography and button sizes across workspace settings general and members pages
* fix: header button sizes
* fix: emoji icon logo (#8323)
* more fixes
* chore: update settings sidebar
* refactor: avatar component
* chore: updated work item detail sidebar (#8327)
* refactor: update link preview
* fix: work item property dropdowns
* fix: dropdown buttons border radius
* chore: update power k translation
* chore: updated profile activity design (#8328)
* chore: update settings pages
* chore: update work item sidebar alignments (#8330)
* refactor: admin design system
* chore: update page header
---------
Co-authored-by: Jayash Tripathy <76092296+JayashTripathy@users.noreply.github.com>
Co-authored-by: VipinDevelops <vipinchaudhary1809@gmail.com>
Co-authored-by: Vamsi Krishna <46787868+vamsikrishnamathala@users.noreply.github.com>
Co-authored-by: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com>
Co-authored-by: gakshita <akshitagoyal1516@gmail.com>
Co-authored-by: Palanikannan M <akashmalinimurugu@gmail.com>
Co-authored-by: Prateek Shourya <prateekshourya29@gmail.com>
Co-authored-by: b-saikrishnakanth <bsaikrishnakanth97@gmail.com>
Co-authored-by: M. Palanikannan <73993394+Palanikannan1437@users.noreply.github.com>
* fix: formatting
* reexport types
* fix: lint error
---------
Co-authored-by: Jayash Tripathy <76092296+JayashTripathy@users.noreply.github.com>
Co-authored-by: VipinDevelops <vipinchaudhary1809@gmail.com>
Co-authored-by: Vamsi Krishna <46787868+vamsikrishnamathala@users.noreply.github.com>
Co-authored-by: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com>
Co-authored-by: gakshita <akshitagoyal1516@gmail.com>
Co-authored-by: Palanikannan M <akashmalinimurugu@gmail.com>
Co-authored-by: Prateek Shourya <prateekshourya29@gmail.com>
Co-authored-by: b-saikrishnakanth <bsaikrishnakanth97@gmail.com>
Co-authored-by: M. Palanikannan <73993394+Palanikannan1437@users.noreply.github.com>
* [WEB-5668] fix: add fetchWorkspaceLevelProjectEntities method and update project-related fetch keys (#8347)
* [SILO-783] feat: added porters and new serializer based exporter (#8335)
* [WEB-5699] refactor: update styling and classnames of charts according to new design system (#8345)
* refactor: update styling and class names according to new design system in charts
* refactor: clean up
* feat: custom theming enhancements (#8342)
* [WEB-5671] chore: settings workspace members enhancements #8346
* [WEB-5666] chore: set project timezone same as workspace timezone in project (#8340)
* [WEB-5614] fix: new design system consistency (#8351)
* chore: tooltip enhancements
* chore: project card enhancements
* chore: work item card enhancements
* chore: update component styles and class names for consistency across the application
---------
Co-authored-by: Anmol Singh Bhatia <anmolsinghbhatia@plane.so>
* [WEB-5708] regression: remove material icon instances from the Space app (#8353)
* chore: sync changes (#8343)
* [WEB-5614] chore: work item detail and list layout enhancements #8355
* regression: replace old css vars with the new design system tokens (#8354)
* chore: replace old css vars
* fix: replace shadow and primary colors
* chore: remove hardcoded colors
* [WEB-5614] chore: custom theme on colour improvement #8356
* [WEB-5732] style: update work item detail properties UI (#8357)
* [WEB-5730] fix: user mention colors #8358
* [WEB-5614] fix: empty state and padding token fixes (#8359)
* [WEB-5614] chore: update component styles and class names for consistency across projects #8360
* [WEB-5614] chore: logo and icon enhancements #8362
* fix: work item property icon renderer (#8363)
* [WEB-5614] fix: sidebar and label dropdown #8364
* fix: material icons font file (#8366)
* [WEB-5614] chore: lucide icon code refactor #8365
* fix: nested context menu UI (#8367)
* [WEB-5708] style: space app kanban card UI (#8368)
* [WEB-5742] fix: input field background #8369
* [WEB-5641] chore: sub work item quick menu padding #8370
* chore: replace old classNames (#8372)
* chore: update component styles and class names for consistency across the application (#8376)
* [WEB-5660] [WEB-5737] fix: cycle and module sidebar #8375
* [WEB-5676] style: gantt column outline #8374
* [WEB-5614] chore: platform design token enhancements (#8373)
* [WEB-5649] [WEB-5675] fix: local font files #8377
* [WEB-5614] chore: primitive token updated (#8378)
* fix: tooltip imports (#8379)
* [WEB-5614] chore: platform header and breadcrumb enhancements (#8383)
* [WEB-5652] fix: kanban quick add UI #8382
* [WEB-5726] fix: showing an empty state on deleted work item link #8381
* fix: space app default background (#8384)
* [WIKI-849] feat: debounce for mention search (#8380)
* fix: font imports (#8387)
* chore: platform layout enhancements (#8386)
* fix: image uploader bg in light mode (#8385)
* [WEB-5614] refactor: update styling and structure across various components (#8388)
* fix: input fields bg (#8389)
* fix: custom z-index classNames (#8395)
* [WEB-5454] fix: optimize date validation logic in CycleCreateUpdateModal #8394
* [WEB-5614] chore: work item detail comment and sidebar enhancements (#8397)
* [WEB-5675] chore: implement `fontsource` as the fonts library (#8398)
* [WEB-5762] fix: workitem detail sidebar properties design consistency (#8400)
* [WEB-5761]fix: intake spacing issue (#8399)
* [WEB-5614] chore: sidebar enhancement #8401
* [WEB-5768]chore: updated comment UI #8402
* [WEB-5614] chore: package and layout enhancements #8403
* chore: update storybook dependency
* [WEB-5657] feat: add synchronization configuration for multiple providers in authentication adapter (#8336)
* feat: add sync functionality for OAuth providers
- Implemented `check_sync_enabled` method to verify if sync is enabled for Google, GitHub, GitLab, and Gitea.
- Added `sync_user_data` method to update user details, including first name, last name, display name, and avatar.
- Updated configuration variables to include sync options for each provider.
- Integrated sync check into the login/signup process.
* feat: add sync toggle for OAuth providers in configuration forms
* fix: remove default value for sync options in OAuth configuration forms
* chore: delete old avatar and upload a new one
* chore: update class method
* chore: add email nullable
* refactor: streamline sync check for multiple providers and improve avatar deletion logic
* fix: ensure ENABLE_SYNC configurations default to "0" for Gitea, Github, Gitlab, and Google forms
* fix: simplify toggle switch value handling in ControllerSwitch component
---------
Co-authored-by: b-saikrishnakanth <bsaikrishnakanth97@gmail.com>
* [WEB-5657] chore: synchronization configuration for multiple providers in authentication adapter #8409
* [WEB-5746]fix: workspace member modal z-index #8410
* [WEB-5773] fix: editor image full screen modal (#8413)
* [WEB-5774] fix: editor nodes background colors (#8416)
* [WEB-5776]chore: updated design system for alert modal #8415
* [WEB-5775] fix: mentions search on empty query #8417
* [WEB-5662][WEB-5770] fix: alignment of cycles in sidebar and layout selection dropdown button (#8414)
* fix: alpha colors (#8418)
* [WEB-5784] fix: truncation issue in wi properties (#8422)
* fix: update background surface 2 variables in tailwind config
* fix: improve layout and truncation handling in issue link and list items
* docs: update readme with react router badge (#8424)
Updated feature list and modified the local development section.
* [WEB-5788] fix: board layout group by icon #8426
* [WEB-5792] regression: editor font family #8427
* [WIKI-740] refactor: editor table performance (#8411)
* [WEB-5786] fix: updated font size for dates at Kanban card #8429
* [WEB-5772] fix: theme switch flicker (#8428)
* [WEB-5784] fix: truncation of links in work items (#8430)
* [WEB-5772] chore: theme switcher and editor colors enhancements (#8436)
* [WEB-5772] chore: theme switcher code refactor #8438
* chore: workspace events (#8439)
* chore: adding invite and joined events
* chore: adding workspace create and update events
* [WEB-5798] refactor: web and admin auth related components and update admin designs (#8431)
* refactor: web and admin auth related components and update admin designs.
* fix: format
* [WEB-5581] fix: resolve logo spinner hydration and theme loading issues (#8450)
- Fix hydration mismatch by lazy loading components that depend on theme
- Ensure LogoSpinner renders with correct theme on initial load
* [WEB-5791] fix: broken favicon in links (#8396)
* fix: using base url of a redirect url
* chore: internal networks check for the final_url
* fix: none final_url
* fix: exception handling
* fix: exception handling
* chore: remove unused imports
* refactor: moved ip address check logic into separate function
* fix: ValueError logic
* [WEB-5667] fix: estimate value display in analytics #8448
* [WEB-5779] fix: handle loading state while fetching project cover image (#8419)
* refactor: replace cover image handling with CoverImage component across profile and project forms
* fix: extend CoverImage component to accept additional img props
* Update apps/web/core/components/common/cover-image.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix: handle undefined cover image URL in ProfileSidebar component
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* [WEB-5782]chore: migrated modals to @plane/ui (#8420)
* chore: migrated modal to @plane/ui
* chore: fixed spacings
* [WEB-5808] chore: sidebar project list enhancements (#8451)
* chore: sidebar project list enhancements
* chore: code refactor
* chore: code refactor
* [WEB-5324] refactor: add Unified OAuth Configuration and Missing Gitea Options (#8050)
* refactor: add Unified OAuth Configuration and Missing Gitea Options
- Replaced the AuthenticationModes component with a more streamlined implementation using AuthenticationMethodCard.
- Removed obsolete authentication modes files from the codebase.
- Enhanced the AuthRoot component to utilize the new OAuth configuration hook for better management of authentication options.
- Updated type definitions for instance authentication modes to reflect the new structure.
* refactor: update OAuth type imports and remove obsolete types
- Replaced local type imports with centralized imports from @plane/types in core, extended, and index OAuth hooks.
- Removed the now redundant types.ts file as its definitions have been migrated.
- Enhanced type definitions for OAuth options to improve consistency across the application.
* feat: add new Gitea logo and update OAuth icon imports to use standard HTML img tags
* chore: remove unused authentication logos and upgrade button component
* [WEB-5574]chore: notification card refactor (#8234)
* chore: notification card refactor
* chore: moved base activity types to constants package
* [WEB-5804] refactor: decouple filter value types from filter configurations (#8441)
* [WEB-5804] refactor: decouple filter value types from filter configurations
Remove value type constraints from filter configurations to support
operator-specific value types. Different operators can accept different
value types for the same filter property, so value types should be
determined at the operator level rather than the filter level.
- Remove generic value type parameter from TFilterConfig
- Update TOperatorConfigMap to accept union of all value types
- Simplify filter config factory signatures across all filter types
- Add forceUpdate parameter to updateConditionValue method
* refactor: remove filter value type constraints from filter configurations
Eliminate the generic value type parameter from filter configurations to allow for operator-specific value types. This change enhances flexibility by enabling different operators to accept various value types for the same filter property.
- Updated TFilterConfig and related interfaces to remove value type constraints
- Adjusted filter configuration methods and types accordingly
- Refactored date operator support to align with the new structure
* [WEB-5785]fix: favorites icon size #8449
* [WEB-5781]chore: removed info banner for preferences #8442
* [WEB-5809] refactor: tailwind config inline variables (#8437)
* refactor: actions icon migration (#8219)
* chore: gitignore updated
* chore: check icon added to propel package
* feat: search icon migration
* chore: check icon migration
* chore: plus icon added to propel package
* chore: code refactor
* chore: plus icon migration and code refactor
* chore: trash icon added to propel package
* chore: code refactor
* chore: trash icon migration
* chore: edit icon added to propel package
* chore: new tab icon added to propel package
* chore: edit icon migration
* chore: newtab icon migration
* chore: lock icon added to propel package
* chore: lock icon migration
* chore: globe icon added to propel package
* chore: globe icon migration
* chore: copy icon added to propel package
* chore: copy icon migration
* chore: link icon added to propel package
* chore: link icon migration
* chore: link icon migration
* chore: info icon added to propel package
* chore: code refactor
* chore: code refactor
* chore: code refactor
* chore: code refactor
* regression: red and green color backgrounds (#8456)
* [WEB-5815] chore: removed the deleted states (#8457)
* Typo: database extension error message (#8461)
* [WEB-5179] chore: icon utils code refactor #8458
* [WEB-5790] feat: new email templates (#8423)
* chore: remove unused get_client_ip import (#8453)
Remove unused import `get_client_ip` from workspace/invite.py.
Identified by ruff linter (F401 error).
Signed-off-by: majiayu000 <1835304752@qq.com>
* [WEB-5822] fix: migrate ImagePickerPopover to Propel Tabs component and render only enabled tabs #8290
- Replace custom tab implementation with Propel Tabs
- Dynamically render only enabled tabs based on configuration
- Filter tabs by isEnabled property for cleaner conditional rendering
- Improve tab navigation and accessibility with Propel components
* chore: navigation preference enhancements (#8468)
* [WEB-5472] refactor: components of project creation flow (#8462)
* [WEB-857] regression: image uploader error state #8471
* [WEB-4959]chore: refactor project member page #8464
* [WEB-5472] refactor: project form #8472
* migration: added webhook version, navigation related fields and allowed_rate_limit for APIToken (#8339)
* migration: added version field in webhook
* chore: add max_length
* chore: added product tour fields
* chore: updated the migration file
* chore: removed the duplicated migration file
* chore: added allowed_rate_limit for api_tokens
* chore: changed key feature tour to product tour
* chore: added is_subscribed_to_changelog field
---------
Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
* fix: correct spelling error in database.ts log message (#8452)
Fix "convertion" -> "conversion" in error log message.
Signed-off-by: majiayu000 <1835304752@qq.com>
* [WEB-5598] refactor: streamline object creation in workspace seed task and improve error handling in workspace creation #8264
* chore: remove posthog events (#8465)
* chore: remove posthog events
* chore: remove event tracking
* chore: lint errors
* chore: minor changes based on comments
* fix: type errors
* Revert "[WEB-4959]chore: refactor project member page #8464" (#8476)
This reverts commit c97e41851530fbb0426c542fa8739ab95218f8a5.
* chore: remove unused right sidebar component and clean up workspace member settings (#8477)
* [WEB-5537]refactor: rename IssueUserProperty to ProjectUserProperty and update related references (#8206)
* refactor: rename IssueUserProperty to ProjectUserProperty and update related references across the codebase
* migrate: move issue user properties to project user properties and update related fields and constraints
* refactor: rename IssueUserPropertySerializer and IssueUserDisplayPropertyEndpoint to ProjectUserPropertySerializer and ProjectUserDisplayPropertyEndpoint, updating all related references
* fix: enhance ProjectUserDisplayPropertyEndpoint to handle missing properties by creating new entries and improve response handling
* fix: correct formatting in migration for ProjectUserProperty model options
* migrate: add migration to update existing non-service API tokens to remove workspace association
* migrate: refine migration to update existing non-service API tokens by excluding bot users from workspace removal
* chore: changed the project sort order in project user property
* chore: remove allowed_rate_limit from APIToken
* chore: updated user-properties endpoint for frontend
* chore: removed the extra projectuserproperty
* chore: updated the migration file
* chore: code refactor
* fix: type error
---------
Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
Co-authored-by: sangeethailango <sangeethailango21@gmail.com>
Co-authored-by: vamsikrishnamathala <matalav55@gmail.com>
Co-authored-by: Anmol Singh Bhatia <anmolsinghbhatia@plane.so>
* [WIKI-826] chore: add unique id as key to logo selector (#8494)
* [VPAT-50] chore(security): add X-Frame-Options header to nginx configuration to prevent clickjacking attacks (#8507)
* [VPAT-50] chore(security): add X-Frame-Options header to nginx configuration to prevent clickjacking attacks
* [SECURITY] chore: enhance nginx configuration with additional security headers
* chore: updated migration file name (#8515)
* chore(deps): react router upgraded
* [WEB-5890] migration: added getting_started_checklist, tips, explored_feature fields on the workspace member table (#8489)
* migration: added getting_started_checklist and tips field
* fix: remove defaults and added explored_features field
* fix: added user table migration
* [WEB-5907] fix: magic code sign-in at Space app. #8552
* [WIKI-735] fix: table insert handle z-index #8545
* [WEB-5898] chore: update tailwind config #8516
* chore(deps): bump lodash-es in the npm_and_yarn group across 1 directory (#8573)
Bumps the npm_and_yarn group with 1 update in the / directory: [lodash-es](https://github.com/lodash/lodash).
Updates `lodash-es` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)
---
updated-dependencies:
- dependency-name: lodash-es
dependency-version: 4.17.23
dependency-type: direct:production
dependency-group: npm_and_yarn
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* [WEB-5845] chore: changing description field to description json (#8230)
* chore: migrating description to description json
* chore: replace description with description_json
* chore: updated migration file
* chore: updated the migration file
* chore: added description key in external endpoint
* chore: updated the migration file
* chore: updated the typo
---------
Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com>
* chore: fix typos in comments (#8553)
* [GIT-61] chore: allow .md files to be uploaded (#8571)
* chore: allow .md files to be uploaded
* chore: allow .md files to be uploaded
* [WEB-5860] [WEB-5861] [WEB-5862] style: improved settings interface (#8520)
* style: improved profile settings
* chore: minor improvements
* style: improved workspace settings
* style: workspace settings content
* style: improved project settings
* fix: project settings flat map
* chore: add back navigation from settings pages
* style: settings content
* style: estimates list
* refactor: remove old code
* refactor: removed unnecessary line breaks
* refactor: create a common component for page header
* chore: add fade-in animation to sidebar
* fix: formatting
* fix: project settings sidebar header
* fix: workspace settings sidebar header
* fix: settings content wrapper scroll
* chore: separate project settings features
* fix: formatting
* refactor: custom theme selector
* refactor: settings headings
* refactor: settings headings
* fix: project settings sidebar padding
* fix: sidebar header padding
* fix: sidebar item permissions
* fix: missing editable check
* refactor: remove unused files
* chore: remove unnecessary code
* chore: add missing translations
* fix: formatting
* [GIT-45] fix: allow markdown file attachments (#8524)
* fix: allow markdown file attachments
- Add text/markdown to ATTACHMENT_MIME_TYPES
- Fixes issue where .md files were rejected with 'Invalid file type' error
* added the support for frontend mime type too
* fix: node view renders (#8559)
* fix node renders
* fix handlers
* fix: duplicate id
* fix: pdf export (#8564)
* feat: pdf export
* fix: tests
* fix: tests
---------
Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
* migration: back migrate all product tour fields to set true (#8575)
* [GIT-66] improvement: prevent disabling last enabled authentication method (#8570)
* fully translated into Ukrainian language (#8579)
* chore: add copyright (#8584)
* feat: adding new copyright info on all files
* chore: adding CI
* fix: module percentage calculation (#8595)
* fix: file fomatting
* [SECUR-113] fix: ssrf for work item links (#8607)
* [SECUR-104] fix: Arbitrary Modification of API Token Rate Limits#8612
* chore(deps): upgrade django version
* [WEB-6058] chore : add logic to handle save#8614
* chore(deps): update the node pacakges
* fix: type fix for description payload (#8619)
* fix: type fix
* fix: duplicate type fix
* chore(deps): update lodash package
* [WEB-6149] migration: change estimate point key max value to 50 #8620
* fix: remove ee folder from web (#8622)
* chore: merge constants and services (#8623)
* fix: remove constants and services
* fix: formatting
* fix: types check
* chore: merge helpers and layouts (#8624)
* fix: remove constants and services
* fix: formatting
* chore: merge helpers and layouts
* fix: workspace disbale flag handling
* chore(deps): bump cryptography (#8625)
Bumps the pip group with 1 update in the /apps/api/requirements directory: [cryptography](https://github.com/pyca/cryptography).
Updates `cryptography` from 44.0.1 to 46.0.5
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/44.0.1...46.0.5)
---
updated-dependencies:
- dependency-name: cryptography
dependency-version: 46.0.5
dependency-type: direct:production
dependency-group: pip
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* style: update ASCII art in install script header (#8628)
* [WEB-6038] fix: work item empty title flicker #8618
* fix: workitem description input inital load (#8617)
* [WEB-6137] fix: work item peek view outside click #8610
* [SECUR-105] fix: csv injection vulnerability sanitization #8611
* [WIKI-877] fix: order of this dropdown options in pages #8563
* [WEB-5899]fix: project sort order (#8530)
* fix: project sort order
* chore: updated queryset for sort_order
* chore: admin folder structure (#8632)
* chore: admin folder structure
* fix: copy right check and formatting
* fix: types
* i18n(ru): expand Russian translation coverage (#8603)
Added missing translations for:
- Profile preferences (language, timezone settings)
- Account settings sections (preferences, notifications, security, api-tokens, activity)
- Workspace settings (billing, exports, webhooks headings/descriptions)
- Project settings (states, labels, estimates, automations headings/descriptions)
- Power-K command palette (contextual actions, navigation, creation, preferences, help)
- Sidebar elements (stickies, your_work, pin/unpin)
- Common actions (copy_markdown, overview)
- Navigation customization options
* chore(deps): update axios dependency
* [GIT-57 | WEB-5912] fix: app sidebar ux and responsiveness (#8560)
* fix: project extended sidebar accordion ux
* fix: app sidebar mobile responsiveness ux
* chore: code refactor
* refactor: table drag preview using decorations (#8597)
* refactor: table drag preview using decorations
* fix: history meta for table drag state
* [WEB-5884] chore: layout loader enhancements #8500
* [WEB-1201] chore: dropdown options hierarchy improvements (#8501)
* chore: sortBySelectedFirst and sortByCurrentUserThenSelected utils added
* chore: members dropdown updated
* chore: module dropdown updated
* chore: project and label dropdown updated
* chore: code refactor
* [GIT-44] refactor(auth): add PASSWORD_TOO_WEAK error code (#8522)
* refactor(auth): add PASSWORD_TOO_WEAK error code and update related error handling in password change flow
* fix(auth): update import to use type for EAuthenticationErrorCodes in security page
* Update apps/web/app/(all)/profile/security/page.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* refactor: updated auth error exception accross zxcvbn usages
* fix: improve error handling for password strength validation and update error messages
* i18n(ru): update Russian translations for stickies and automation description
Added translation for 'stickies' and improved formatting of the automation description in Russian locale.
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update translations.ts: issue-artifacts discoverd (#7979)
* [WEB-5873] fix: user avatar ui consistency (#8495)
* fix: user avatar ui consistency
* chore: code refactor
* [SILO-820] fix: update serializer for module detail API endpoint to use ModuleUpdateSerializer (#8496)
* [VPAT-51] fix: update workspace invitation flow to use token for validation #8508
- Modified the invite link to include a token for enhanced security.
- Updated the WorkspaceJoinEndpoint to validate the token instead of the email.
- Adjusted the workspace invitation task to generate links with the token.
- Refactored the frontend to handle token in the invitation process.
Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
* [WEB-5871] chore: added intake count for projects (#8497)
* chore: add intake_count in project list endpoint
* chore: sidebar project navigation intake count added
* fix: filter out closed intake issues in the count
* chore: code refactor
* chore: code refactor
* fix: filter out deleted intake issues
---------
Co-authored-by: Anmol Singh Bhatia <anmolsinghbhatia@plane.so>
* [WEB-5829] fix: Intake open work count (#8547)
* fix: open intake count at sidebar header
* chore: reverted inbox store arguments to core store
* fix: intake count update
* [WEB-5863] fix: estimate point input validation #8492
Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
* [VPAT-55] chore(security): implement input validation across authentication and workspace forms (#8528)
* chore(security): implement input validation across authentication and workspace forms
- Add OWASP-compliant autocomplete attributes to all auth input fields
- Create centralized validation utilities blocking injection-risk characters
- Apply validation to names, display names, workspace names, and slugs
- Block special characters: < > ' " % # { } [ ] * ^ !
- Secure sensitive input fields across admin, web, and space apps
* chore: add missing workspace name validation to settings and admin forms
* feat: enhance validation regex for international names and usernames
- Updated regex patterns to support Unicode characters for person names, display names, company names, and slugs.
- Improved validation functions to block injection-risk characters in names and slugs.
* [VPAT-16] improvement: add file validation to prevent malicious uploads #8493
Add client-side checks for double extensions, dangerous file types,
dot files, and path traversal patterns. Addresses security audit
recommendations for file upload validation.
* [WEB-5827] fix: persist external cover image URLs (Unsplash) in project updates #8482
* [VPAT-27] chore(security): disable autocomplete on sensitive input fields #8517
Disable autocomplete on authentication and security-related forms to prevent
browsers from storing sensitive credentials. This affects sign-in, password
reset, account security, and onboarding forms across admin, web, and space apps.
Modified components:
- Auth forms (email, password, unique code, forgot/reset/set password)
- Account security pages
- Instance setup and profile onboarding
- Shared UI components (auth-input, password-input)
* [WEB-5917] fix: generate clean plain text from HTML email template #8535
* [WEB-5878] chore: add validation for project name/identifier for special characters (#8529)
* chore: update ProjectSerializer to raise validation for special characters in name and identifier
* chore: update external endpoints
* fix: external api serializer validation
* update serializer to send error code
* fix: move the regex expression to Project model
* [WEB-6194]migration: added archived_at in IssueView #8641
* migration: added archived_at in IssueView
* fix: lint
* fix: IDOR Vulnerabilities in Asset & Attachment Endpoints (#8644)
* fix: idor issues in project assets and issue attachements
* fix: comments
* fix: Member Information Disclosure via Public Endpoint #8646
* chore: Add forum link and remove discord link on readme (#8655)
* Update README to remove Discord and add Forum link
Removed Discord badge and replaced Releases link with Forum link.
* Fix forum link in README.md
* fix: Update healthcheck endpoint in Dockerfile to target /spaces/ path (#8674)
* Change Dependabot update interval from weekly to daily
* [WIKI-887] fix: add scroll in heading layout (#8596)
* fix: add scroll in heading layout
* chore: remove visible scroll bar
* fix :format
* chore: fix outline scroll
* chore: fix format
* chore: fix translation
---------
Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com>
* fix: merge lists in editor (#8639)
* chore: replace prettier with oxfmt (#8676)
* fix: replace eslint with oxlint (#8677)
* fix: replace eslint with oxlint
* chore: adding max warning
* fix: formatting
* chore(deps): minimatch and rollup package vulnerabilities (#8675)
* fix: package updates
* fix: package upgrades
* fix: minimatch package vulnerabilities
* fix: ajv package vulnerabilities
* fix: lint
* fix: format
* [SILO-1028] feat: Project Summary external API (#8661)
* add project summary endpoint
* update response structure
* [WIKI-852] chore: update page version save logic (#8440)
* chore: updated the logic for page version task
* chore: updated the html variable
* chore: handled the exception
* chore: changed the function name
* chore: added a custom variable
* [WEB-5225] feat: enhance authentication logging with detailed error and info message (#7998)
* feat: enhance authentication logging with detailed error and info messages
- Added logging for various authentication events in the Adapter and its subclasses, including email validation, user existence checks, and password strength validation.
- Implemented error handling for GitHub OAuth email retrieval, ensuring proper logging of unexpected responses and missing primary emails.
- Updated logging configuration in local and production settings to include a dedicated logger for authentication events.
* chore: address copilot comments
* chore: addressed some additional comments
* chore: update log
* fix: lint
* [WEB-6420] chore: migrate community references from Discord to Forum (#8657)
* chore: replace Discord references with Forum links
* chore: migrate help and community CTAs from Discord to Forum
* refactor: replace Discord icons with lucide MessageSquare
* chore: rename Discord labels and keys to Forum
* chore: remove obsolete Discord icon component
* chore: update Discord references to Forum in templates
* chore: code refactoring
* fix: dependabot and codeql CI
* fix: disable react-in-jsx-scope rule in oxlint config (#8682)
After #8677 replaced ESLint with OxLint, the react-in-jsx-scope rule
was not disabled. This causes all commits touching JSX files to fail
the pre-commit hook (oxlint --deny-warnings).
React 17+ uses automatic JSX runtime so explicit React imports are
not required.
Fixes #8681
* chore: space folders (#8707)
* chore: change the space folders structure
* fix: format
* chore(deps): django version upgrade
* [GIT-40]fix: apply sub-issue display filter when adding work items #8534
* [WEB-5606] fix: work item preview word break #8537
* [WIKI-892] fix: description input component re-render #8600
* [WIKI-785] refactor: editor markdown handler #8546
* [WEB-5911] fix: error outline button text color #8531
* [SECUR-116] fix: ssrf webhook url for ip address #8716
* [WEB-6420] chore: self-host social icons in project invitation email (#8718)
* chore: add self-hosted social icon assets for email templates
* chore: pass current_site to project invitation email context
* chore: replace mailinblue CDN icons with self-hosted static assets
* [WIKI-874] refactor: description input component (#8544)
* refactor: description input component
* fix: add missing prop to rich text editor
* chore(deps): bump python-json-logger from 3.3.0 to 4.0.0 in /apps/api (#8692)
Bumps [python-json-logger](https://github.com/nhairs/python-json-logger) from 3.3.0 to 4.0.0.
- [Release notes](https://github.com/nhairs/python-json-logger/releases)
- [Changelog](https://github.com/nhairs/python-json-logger/blob/main/docs/changelog.md)
- [Commits](https://github.com/nhairs/python-json-logger/compare/v3.3.0...v4.0.0)
---
updated-dependencies:
- dependency-name: python-json-logger
dependency-version: 4.0.0
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore(deps): bump pytest from 7.4.0 to 9.0.2 in /apps/api (#8693)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.0 to 9.0.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.4.0...9.0.2)
---
updated-dependencies:
- dependency-name: pytest
dependency-version: 9.0.2
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* [WEB-6599] feat: instance not ready ui revamp (#8755)
* feat: instance not ready ui revamp
* chore: code refactoring
* chore: code refactoring
* chore(deps): upgrade the undici and flatted versions
* [WEB-6610] Fix work item drag handle hover gap (#8759)
* [WEB-6610] Fix work item drag handle hover gap
Amp-Thread-ID: https://ampcode.com/threads/T-019ce703-e30e-769b-9436-a7f5506e8a6c
Co-authored-by: Amp <amp@ampcode.com>
* fix: use p-0! pl-6! for correct drag handle hover area
Amp-Thread-ID: https://ampcode.com/threads/T-019ce703-e30e-769b-9436-a7f5506e8a6c
Co-authored-by: Amp <amp@ampcode.com>
* fix: update containerClassName to -ml-6 border-none p-0! pl-6!
Amp-Thread-ID: https://ampcode.com/threads/T-019ce703-e30e-769b-9436-a7f5506e8a6c
Co-authored-by: Amp <amp@ampcode.com>
---------
Co-authored-by: Amp <amp@ampcode.com>
* chore(deps): bump the actions group across 1 directory with 11 updates (#8741)
Bumps the actions group with 11 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
| [actions/checkout](https://github.com/actions/checkout) | `4` | `6` |
| [makeplane/actions](https://github.com/makeplane/actions) | `1.0.0` | `1.4.0` |
| [actions/upload-artifact](https://github.com/actions/upload-artifact) | `4` | `7` |
| [softprops/action-gh-release](https://github.com/softprops/action-gh-release) | `2.1.0` | `2.5.0` |
| [actions/setup-node](https://github.com/actions/setup-node) | `4` | `6` |
| [actions/setup-go](https://github.com/actions/setup-go) | `5` | `6` |
| [docker/login-action](https://github.com/docker/login-action) | `3` | `4` |
| [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) | `3` | `4` |
| [docker/build-push-action](https://github.com/docker/build-push-action) | `6.9.0` | `7.0.0` |
| [tailscale/github-action](https://github.com/tailscale/github-action) | `2` | `4` |
| [actions/cache](https://github.com/actions/cache) | `4` | `5` |
Updates `actions/checkout` from 4 to 6
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v6)
Updates `makeplane/actions` from 1.0.0 to 1.4.0
- [Release notes](https://github.com/makeplane/actions/releases)
- [Commits](https://github.com/makeplane/actions/compare/v1.0.0...v1.4.0)
Updates `actions/upload-artifact` from 4 to 7
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v7)
Updates `softprops/action-gh-release` from 2.1.0 to 2.5.0
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2.1.0...v2.5.0)
Updates `actions/setup-node` from 4 to 6
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4...v6)
Updates `actions/setup-go` from 5 to 6
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v5...v6)
Updates `docker/login-action` from 3 to 4
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v3...v4)
Updates `docker/setup-buildx-action` from 3 to 4
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4)
Updates `docker/build-push-action` from 6.9.0 to 7.0.0
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6.9.0...v7.0.0)
Updates `tailscale/github-action` from 2 to 4
- [Release notes](https://github.com/tailscale/github-action/releases)
- [Commits](https://github.com/tailscale/github-action/compare/v2...v4)
Updates `actions/cache` from 4 to 5
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4...v5)
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: '6'
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: actions
- dependency-name: makeplane/actions
dependency-version: 1.4.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: actions
- dependency-name: actions/upload-artifact
dependency-version: '7'
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: actions
- dependency-name: softprops/action-gh-release
dependency-version: 2.5.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: actions
- dependency-name: actions/setup-node
dependency-version: '6'
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: actions
- dependency-name: actions/setup-go
dependency-version: '6'
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: actions
- dependency-name: docker/login-action
dependency-version: '4'
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: actions
- dependency-name: docker/setup-buildx-action
dependency-version: '4'
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: actions
- dependency-name: docker/build-push-action
dependency-version: 7.0.0
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: actions
- dependency-name: tailscale/github-action
dependency-version: '4'
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: actions
- dependency-name: actions/cache
dependency-version: '5'
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: actions
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore: remove chat support component
* fix: added workspace member check in allow permission for creator #8778
* fix: package updates
* fix: remove unused imports and variables (part 1 — packages & non-web-core) (#8751)
* fix: remove unused imports and variables (part 1)
Resolve oxlint no-unused-vars warnings in packages/*, apps/admin,
apps/space, apps/live, and apps/web (non-core).
* fix: resolve CI check failures
* fix: resolve check:types failures
* fix: resolve check:types and check:format failures
- Use destructuring alias for activeCycleResolvedPath
- Format propel tab-navigation file
* fix: format propel button helper with oxfmt
Reorder Tailwind classes to match oxfmt canonical ordering.
* fix: remove unused imports and variables (part 2 — web/core non-issues) (#8752)
* fix: remove unused imports and variables (part 2)
Resolve oxlint no-unused-vars warnings in apps/web/core/
(excluding components/issues/).
* fix: resolve CI check failures
* fix: resolve check:types failures
* fix: remove unused imports and variables (part 3) (#8753)
Resolve oxlint no-unused-vars warnings in
apps/web/core/components/issues/.
* fix: removed unused files
* chore: remove service token endpoint which is unused (#8797)
* fix: broken lockfile
* fix: add model_activity.delay() to API issue update/create paths for webhook dispatch (#8792)
Fixes #6746
API-driven issue updates (PUT update, PUT create-via-upsert, PATCH) were
missing `model_activity.delay()` calls, so webhooks were never dispatched
for changes made through the API. The web UI paths already include these
calls (e.g. in `post()` at L475), but the `put()` and `partial_update()`
methods only called `issue_activity.delay()`.
This adds `model_activity.delay()` immediately after each existing
`issue_activity.delay()` in these three code paths, using the same
signature as the existing call in `post()`.
Tested on Plane CE v1.2.1 self-hosted: API PATCH triggers
`webhook_send_task` in the Celery worker, confirming webhook delivery.
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* [WEB-6702] feat: redesign intake action buttons and use design tokens (#8801)
* feat: intake action buttons redesign
* chore: code refactoring
* Open [WEB-6739] fix: color inside of active projects of analytics overview tab #8803
* [WEB-6734] fix: circular progress indicator stroke color#8802
* fix: migrate page navigation pane tabs from headless ui to propel (#8805)
* chore(deps): bump requests (#8804)
Bumps the pip group with 1 update in the /apps/api/requirements directory: [requests](https://github.com/psf/requests).
Updates `requests` from 2.32.4 to 2.33.0
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.4...v2.33.0)
---
updated-dependencies:
- dependency-name: requests
dependency-version: 2.33.0
dependency-type: direct:production
dependency-group: pip
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix: tsdown watch (#8813)
closes #8791
* [WEB-6762] fix: missing profile icons for recent activities on "Your Work" Page #8812
* [WEB-6763] fix: date range dropdown clipped in sub-issues list #8809
* [WEB-6783] fix: crash when deleting work item from peek view in workspace spreadsheet (#8821)
* fix: guard against undefined issue in SpreadsheetIssueRow
* fix: add defensive guard for isIssueNew in list block-root
* chore(deps): bump cryptography (#8819)
Bumps the pip group with 1 update in the /apps/api/requirements directory: [cryptography](https://github.com/pyca/cryptography).
Updates `cryptography` from 46.0.5 to 46.0.6
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/46.0.5...46.0.6)
---
updated-dependencies:
- dependency-name: cryptography
dependency-version: 46.0.6
dependency-type: direct:production
dependency-group: pip
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* [SILO-1087] feat: add IssueRelations external API (#8763)
* add IssueRelations external API
* update serializer methods and filter by slug
* [SILO-1026] feat: add estimates external API endpoints (#8664)
* add project summary endpoint
* update response structure
* add estimates external API endpoints with migrations
* fix invalid project and workspace error
* [WEB-6794] fix: align profile cover update with correct unsplash and upload handling (#8830)
* fix: profile cover update
* chore: code refactoring
* chore: code refactoring
* chore(deps): update dependency overrides (#8831)
Update brace-expansion override from 2.0.2 to 5.0.5 and add picomatch,
yaml@1, and yaml@2 overrides to pin transitive dependency versions.
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore(deps): replace dotenvx with dotenv and update overrides (#8832)
* chore(deps): replace dotenvx with dotenv and update dependency overrides
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: sort devDependencies in package.json files
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: version bump
* fix: scope IssueBulkUpdateDateEndpoint query to workspace and project (#8834)
The bulk update date endpoint fetched issues by ID without filtering
by workspace or project, allowing any authenticated project member to
modify start_date and target_date of issues in any workspace/project
across the entire instance (IDOR - CWE-639).
Scoped the query to include workspace__slug and project_id filters,
consistent with other issue endpoints in the codebase.
Ref: GHSA-4q54-h4x9-m329
* chore: adding traget commit sha for the github release
* [INFRA-346] chore: remove artifacts.plane.so references from community deployments (#8836)
* chore: Intake snooze modal width
* [INFRA-351] fix: correct directory and command for space program in supervisor.conf #8838
* [WEB-6813] fix: module not associated when accepting intake work items (#8839)
* fix: intake module association on accept
* chore: code refactoring
* chore: add ops/ — NixOS module + obs + hooks
---------
Signed-off-by: majiayu000 <1835304752@qq.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
Co-authored-by: Aaron <lifeiscontent@users.noreply.github.com>
Co-authored-by: pushya22 <130810100+pushya22@users.noreply.github.com>
Co-authored-by: Pushya Mitra Thiruvooru <pushya@Pushyas-MacBook-Pro.local>
Co-authored-by: b-saikrishnakanth <130811169+b-saikrishnakanth@users.noreply.github.com>
Co-authored-by: Vamsi Krishna <46787868+vamsikrishnamathala@users.noreply.github.com>
Co-authored-by: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com>
Co-authored-by: Aaryan Khandelwal <65252264+aaryan610@users.noreply.github.com>
Co-authored-by: Jayash Tripathy <76092296+JayashTripathy@users.noreply.github.com>
Co-authored-by: VipinDevelops <vipinchaudhary1809@gmail.com>
Co-authored-by: gakshita <akshitagoyal1516@gmail.com>
Co-authored-by: Palanikannan M <akashmalinimurugu@gmail.com>
Co-authored-by: Prateek Shourya <prateekshourya29@gmail.com>
Co-authored-by: b-saikrishnakanth <bsaikrishnakanth97@gmail.com>
Co-authored-by: M. Palanikannan <73993394+Palanikannan1437@users.noreply.github.com>
Co-authored-by: Henit Chobisa <chobisa.henit@gmail.com>
Co-authored-by: Sangeetha <sangeethailango21@gmail.com>
Co-authored-by: Anmol Singh Bhatia <anmolsinghbhatia@plane.so>
Co-authored-by: Nikhil <118773738+pablohashescobar@users.noreply.github.com>
Co-authored-by: Bavisetti Narayan <72156168+NarayanBavisetti@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Shaikh Naasir <yoursdeveloper@protonmail.com>
Co-authored-by: lif <1835304752@qq.com>
Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
Co-authored-by: vamsikrishnamathala <matalav55@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com>
Co-authored-by: yy <yhymmt37@gmail.com>
Co-authored-by: punto <119956578+AshrithSathu@users.noreply.github.com>
Co-authored-by: Ship it <161483884+vcscroll@users.noreply.github.com>
Co-authored-by: Akshat Jain <akshatjain9782@gmail.com>
Co-authored-by: stelmsk <151884118+stelmsk@users.noreply.github.com>
Co-authored-by: Cornelius <70640137+conny3496@users.noreply.github.com>
Co-authored-by: Dheeraj Kumar Ketireddy <dheeraj.ketireddy@plane.so>
Co-authored-by: Vihar Kurama <vihar.kurama@gmail.com>
Co-authored-by: Saurabh Kumar <70131915+Saurabhkmr98@users.noreply.github.com>
Co-authored-by: darkingtail <51188676+darkingtail@users.noreply.github.com>
Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: ouchan <111338754+ouchanip@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* add IssueRelations external API * update serializer methods and filter by slug
Description
URL -
/api/v1/workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/relations/POST endpoint
Sample Payload
Sample Response
GET endpoint
Sample response
Type of Change
Screenshots and Media (if applicable)
Test Scenarios
References
Summary by CodeRabbit
New Features
Documentation