Commit graph

7179 commits

Author SHA1 Message Date
d27b7fdbea fix(web): resolve issues board blank rendering due to MobX strict mode in IssueRootStore
All checks were successful
Deploy Plane Project Tracker / Deploy to cisystem (push) Successful in 5m26s
2026-11-06 19:42:40 +05:30
a4687eaf39 feat(logging): add comprehensive server logs for frontend actions and backend API requests
All checks were successful
Deploy Plane Project Tracker / Deploy to cisystem (push) Successful in 6m47s
2026-11-06 18:00:17 +05:30
b0e37091d4 fix(deploy): prevent frontend patch failure and pre-bundle patches
All checks were successful
Deploy Plane Project Tracker / Deploy to cisystem (push) Successful in 55s
- Check local disk first in patch_frontend.py to avoid remote HTTP retrieval
- Use robust streaming with timeout and user-agent fallback instead of urlretrieve
- Include pre-patched frontend JS files in deploy/patches
- Add safe fallback in install.sh so optional patch generation does not fail deployment
2026-11-06 17:38:49 +05:30
e67f0cf15d fix(web,ui): fix hydration error from nested button descendants and MobX strict-mode warnings
Some checks failed
Deploy Plane Project Tracker / Deploy to cisystem (push) Failing after 5m16s
- Replace nested <Button> with styled <div> in DropdownButton (BorderButton, BackgroundButton, TransparentButton) across all issue dropdowns
- Support 'div' variant and element in AppSidebarItem, DragHandle, and CustomMenu triggers/items to avoid invalid HTML button nesting
- Fix MobX strict-mode observable mutations in IssueRootStore autorun and BaseWorkspaceRootStore fetchWorkspaces with runInAction
- Defer WorkItemFilterStore filter registration via queueMicrotask to eliminate cross-component render updates on WorkItemFiltersToggle
- Remove redundant e.preventDefault() in Kanban card actions to prevent blocking native/synthetic event propagation
2026-11-06 17:24:20 +05:30
31110e92c5 fix(web): prevent card link navigation and ensure dropdown controls respond immediately on click
All checks were successful
Deploy Plane Project Tracker / Deploy to cisystem (push) Successful in 5m35s
2026-11-06 16:43:30 +05:30
ab32230ac0 fix(web): resolve hydration mismatch in HydrateFallback and configure dev api proxy
All checks were successful
Deploy Plane Project Tracker / Deploy to cisystem (push) Successful in 5m11s
2026-11-05 22:07:20 +05:30
2e393d8495 feat: add issue properties components for sub-issues, layouts, and draft views
All checks were successful
Deploy Plane Project Tracker / Deploy to cisystem (push) Successful in 7m9s
2026-11-05 21:26:53 +05:30
4580494fe4 fix(deploy): use host.docker.internal for DB host and auto-sync .env on host
All checks were successful
Deploy Plane Project Tracker / Deploy to cisystem (push) Successful in 1m7s
2026-09-26 12:13:50 +05:30
a23692f0c1 feat: update database settings in existing .env during installation
Some checks failed
Deploy Plane Project Tracker / Deploy to cisystem (push) Failing after 3m1s
2026-09-26 12:01:09 +05:30
dbc377cba3 chore: update default PGHOST to IP address in docker-compose
Some checks failed
Deploy Plane Project Tracker / Deploy to cisystem (push) Failing after 47s
2026-09-26 11:58:57 +05:30
b21c91ad0d chore: update default postgres password in docker-compose.yml
Some checks failed
Deploy Plane Project Tracker / Deploy to cisystem (push) Failing after 45s
2026-09-26 11:57:03 +05:30
38b769cf9d feat: add issue bulk import and modernize array sorting and error handling
Some checks failed
Deploy Plane Project Tracker / Deploy to cisystem (push) Failing after 6m24s
2026-09-26 11:34:02 +05:30
cac18b7d6d fix(web): disable overly aggressive static asset rate limiting in Caddyfile
All checks were successful
Deploy Plane Project Tracker / Deploy to cisystem (push) Successful in 4m42s
2026-09-19 21:52:31 +05:30
a54ef78a3b fix(api): provide missing context keys for IssueCreateSerializer in bulk import
All checks were successful
Deploy Plane Project Tracker / Deploy to cisystem (push) Successful in 1m3s
2026-09-19 21:48:20 +05:30
dbd9541c0b ci: tag built images as stable to avoid arm64 manifest errors on preview tag
All checks were successful
Deploy Plane Project Tracker / Deploy to cisystem (push) Successful in 1m10s
2026-09-19 21:43:04 +05:30
4ba1f1079d ci: fix docker build by packaging source and building on EC2
Some checks failed
Deploy Plane Project Tracker / Deploy to cisystem (push) Failing after 11m9s
2026-09-19 21:30:37 +05:30
4eeaebf205 ci: build and deploy custom images via tarball transfer
Some checks failed
Deploy Plane Project Tracker / Deploy to cisystem (push) Failing after 9s
2026-09-19 21:26:59 +05:30
03c6c3d479 feat: Add bulk import functionality for issues and run pnpm fix
All checks were successful
Deploy Plane Project Tracker / Deploy to cisystem (push) Successful in 35s
2026-09-19 21:11:08 +05:30
ed2e1134d1 feat(billing): unlock Enterprise plan and all workspace features
All checks were successful
Deploy Plane Project Tracker / Deploy to cisystem (push) Successful in 31s
2026-09-13 16:10:56 +05:30
283386386c fix(ci): optimize runner image execution and auto-resolve host gateway
All checks were successful
Deploy Plane Project Tracker / Deploy to cisystem (push) Successful in 30s
2026-09-13 15:55:06 +05:30
da87536878 fix(ci): specify node:22-alpine container and install git before checkout
Some checks failed
Deploy Plane Project Tracker / Deploy to cisystem (push) Has been cancelled
2026-09-13 15:52:42 +05:30
6ff32a10ee ci: adapt deploy workflow for full host and multi-credential pipeline access
Some checks failed
Deploy Plane Project Tracker / Deploy to cisystem (push) Failing after 3s
2026-09-13 15:50:15 +05:30
a870bafe77 feat: unlock enterprise features and add cisystem Forgejo deployment workflow
Some checks failed
Deploy Plane Project Tracker / Deploy to cisystem (push) Failing after 2m24s
2026-09-13 15:40:24 +05:30
pratapalakshmi
2f895b82da
fix(security): clear the 2026-09-10 nightly Trivy findings (#9806)
Some checks failed
Branch Build CE / Merge Web Manifest (push) Blocked by required conditions
Branch Build CE / Build-Push Space Docker Image () (push) Blocked by required conditions
Branch Build CE / Merge Space Manifest (push) Blocked by required conditions
Branch Build CE / Build-Push Live Collaboration Docker Image () (push) Blocked by required conditions
Branch Build CE / Merge Live Collaboration Manifest (push) Blocked by required conditions
Branch Build CE / Build-Push API Server Docker Image () (push) Blocked by required conditions
Branch Build CE / Merge API Server Manifest (push) Blocked by required conditions
Branch Build CE / Build-Push Proxy Docker Image () (push) Blocked by required conditions
Branch Build CE / Merge Proxy Manifest (push) Blocked by required conditions
Branch Build CE / Prepare AIO Assets (push) Blocked by required conditions
Branch Build CE / Build-Push AIO Docker Image () (push) Blocked by required conditions
Branch Build CE / Merge AIO Manifest (push) Blocked by required conditions
Branch Build CE / Upload Build Assets (push) Blocked by required conditions
Branch Build CE / Build Release (push) Blocked by required conditions
CodeQL / Analyze (push) Failing after 3s
React Doctor / react-doctor (push) Failing after 3s
Branch Build CE / Build Setup (push) Has been cancelled
Branch Build CE / Build-Push Admin Docker Image () (push) Has been cancelled
Branch Build CE / Merge Admin Manifest (push) Has been cancelled
Branch Build CE / Build-Push Web Docker Image () (push) Has been cancelled
* fix(security): clear the 2026-09-10 nightly Trivy findings

Two advisories published 2026-09-08 21:2x UTC reached Trivy's DB between
the 09-09 nightly (green on every plane-* leg) and the 09-10 one, turning
plane-live-community and plane-space-community red on unchanged images.

- js-yaml 4.3.1 -> 4.3.2 (CVE-2026-84375). The exact pin was the patched
  version at the time and became the vulnerable one; the comment now says to
  bump rather than widen it, since a range drifts onto the 5.x break.
- sharp ^0.35.3 -> ^0.35.4 (GHSA-rgj7-g3m4-5g8c, libheif GHSA-g89c-p67h-r497
  and GHSA-2jg2-4ch7-h545).

The third finding on plane-proxy/admin/frontend-community, CVE-2026-84445 in
the Caddy binary's grpc-go, needs no change here: 2.11.4 is the newest Caddy
published, and the nightly scan reads plane-ee's .trivyignore.yaml for every
leg, where it is suppressed at **/bin/caddy on the reachability argument that
Caddy runs no gRPC xDS server.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* chore: drop the added comment from pnpm-workspace.yaml

Review feedback from @sriramveeraghanta. The diff is now two version changes and
nothing else; the advisory ids and the reasoning stay in the PR description.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-10 16:01:23 +05:30
Mohd Quamar Tyagi
1fec307f91
fix(api): avoid re-crawling issue link on update when url is unchanged (#9763)
* fix(api): avoid re-crawling issue link on update when url is unchanged

* fix(api): avoid recrawling unchanged issue links
2026-09-08 01:33:55 +05:30
Anmol Singh Bhatia
439fa3daea
refactor: migrate web Tabs to @makeplane/propel (#9752)
* refactor: migrate web Tabs to @makeplane/propel

Replace in-repo @plane/propel/tabs with @makeplane/propel/components/tabs
in analytics, the image picker popover, and the page navigation pane.

Published Tabs omit className on Tabs and TabsPanel, so fill-height
layouts use a flex/grid wrapper instead. Tabs.Trigger, Tabs.Content, and
Tabs.Indicator become Tab, TabsList, and TabsPanel.

* fix: restore cover picker tab strip to full width

Published TabsList is inline-flex, so Images/Upload hugged content
instead of spanning the 36rem panel. Stretch the list to the previous
full-width segmented bar.

* chore: sync apps/space lockfile to @makeplane/propel 0.3.0

preview's lockfile still resolved apps/space to 0.2.0 after the catalog
bump, so pnpm install --frozen-lockfile failed in CI.

* fix: restore cover picker tab panel mt-3 p-3 spacing

Match the previous scroll wrapper inset so thumbnail grid sizing stays
aligned with the 36rem picker layout.
2026-09-07 18:22:35 +05:30
Atul Tameshwari
8803088086
refactor: migrate web TextArea to @makeplane/propel TextArea (#9747)
* chore: update @makeplane/propel version in pnpm-lock.yaml to 0.3.0

* refactor: replace TextArea usage with TextAreaGroup in forms

Updated various forms across the application to utilize TextAreaGroup for better structure and error handling. This change enhances the consistency of the description fields in forms, ensuring they are wrapped in a Field component for validation and styling. The updates were made in the CreateApiTokenForm, CycleForm, ModuleForm, ProjectDetailsForm, and others.

* refactor: enhance TextArea components across forms with auto-resize and maxRows

Updated various forms to improve the TextArea components by adding auto-resize functionality and setting a maximum number of rows. This change enhances user experience by allowing better visibility and management of text input across the CreateApiTokenForm, CycleForm, ModuleForm, ProjectDetailsForm, and others.

* refactor: remove unnecessary containerClassName from TextArea components

Removed the redundant containerClassName="-ml-3" from TextArea components in InboxIssueMainContent, IssueMainContent, and PeekOverviewIssueDetails to streamline the code and improve consistency across the application.

* refactor: remove maxRows from TextArea components in Cycle and Module analytics sidebars

Updated the TextArea components in CycleSidebarDetails and ModuleAnalyticsSidebar to remove the maxRows property, allowing for unrestricted text input. This change enhances the user experience by providing more flexibility in text entry.

* refactor: remove className prop from IssueTitleInput component

Eliminated the optional className prop from the IssueTitleInputProps interface to streamline the component's API and improve consistency across the application.

* refactor: remove PageEditorTitle component to streamline editor functionality

Deleted the PageEditorTitle component from the editor, simplifying the codebase and enhancing maintainability. This change aligns with ongoing efforts to improve component structure and reduce redundancy in the application.

* fix: ensure description field in StateForm defaults to an empty string

Updated the description field in the StateForm component to default to an empty string when no value is provided. This change improves the handling of form data and ensures consistent behavior in the input field.

* refactor: simplify IssueTitleInput component by removing TextAreaGroup

Updated the IssueTitleInput component to eliminate the TextAreaGroup wrapper, replacing it with a div for improved structure. Additionally, adjusted the TextArea properties to set the surface to "inline" and changed the rows to 1, enhancing the input's appearance and functionality.

* refactor: streamline description rendering in ModuleAnalyticsSidebar

Removed redundant wrapping of the description TextArea in the ModuleAnalyticsSidebar component, simplifying the code while maintaining functionality. This change enhances readability and consistency in the component's structure.
2026-09-07 18:22:19 +05:30
Atul Tameshwari
1c5e5f4e98
refactor: migrate web Collapsible to @makeplane/propel Collapsible (#9743)
* refactor: update collapsible components to use @makeplane/propel

- Migrate collapsible components in issue detail widgets (attachments, links, relations, sub-issues) from @plane/ui to @makeplane/propel.
- Adjust props and structure for consistency with new collapsible implementation.
- Enhance title components to integrate action buttons and improve accessibility.
- Refactor related components to streamline imports and improve code clarity.

* refactor: enhance icon rendering in relations component

- Update the icon rendering logic in the RelationsCollapsibleContent component to apply additional styling using the cn utility.
- Ensure that icons are wrapped in a styled span for consistent presentation and alignment.

* refactor: adjust layout of RelationIssueList in RelationsCollapsibleContent

- Wrap RelationIssueList in a div to cancel the nested Collapsible's panel inset, ensuring proper alignment under the outer Relations collapsible.
- Improve visual consistency by preventing stacking of insets in the UI.

* refactor: improve layout of pending invitations in WorkspaceMembersList

- Wrap the Collapsible component for pending invitations in a div to enhance layout and spacing.
- Ensure consistent visual presentation by adjusting the structure of the component.

* refactor: simplify onOpenChange handlers in collapsible components

- Update the onOpenChange prop in SubIssuesListGroup and WorkspaceMembersList to directly use the state setter function, improving code clarity and reducing unnecessary function wrapping.

* refactor: simplify mapping of work item IDs in SubIssuesListGroup

- Remove optional chaining from the mapping of workItemIds to enhance code clarity and ensure consistent handling of the array.

* refactor: adjust padding in attachment list item and link list components

- Update padding in the attachment list item for improved spacing and alignment.
- Remove unnecessary padding from the link list component to streamline layout.

* chore: update @makeplane/propel version in lockfile to 0.3.0

Align the pnpm-lock.yaml file to reflect the updated version of @makeplane/propel from 0.2.0 to 0.3.0 for consistency across importers.
2026-09-07 17:51:30 +05:30
Atul Tameshwari
1f369f2a16
refactor: migrate Banner to @makeplane/propel across web app (#9737)
* chore: remove unused banner components from web application

Deleted the following banner components as they are no longer needed:
- AuthBanner
- BulkOperationsUpgradeBanner
- ContentLimitBanner
- IntegrationAndImportExportBanner

This cleanup helps streamline the codebase and remove redundant files.

* refactor: update banner imports and usage across multiple components

Replaced instances of the old banner component from @plane/propel with the new one from @makeplane/propel/components in various files. Adjusted properties and structure for consistency, including changes to the ArchivedIssueDetailsPage, DevErrorComponent, AuthRoot, and ResetPasswordForm. This update enhances the UI consistency and aligns with the recent component migration.

* refactor: update icon imports in ArchivedIssueDetailsPage and DevErrorComponent

Replaced the old icon components with new ones from @makeplane/propel/icons in the ArchivedIssueDetailsPage and DevErrorComponent. This change enhances visual consistency across the application by standardizing the icon usage in banner notifications.

* fix: enhance accessibility for Upgrade to One link in IssueBulkOperationsRoot

Updated the anchor element for the "Upgrade to One" button to include an aria-label for improved accessibility. This change ensures that screen readers can properly announce the purpose of the link, enhancing the user experience for individuals relying on assistive technologies.

* feat(i18n): integrate translation support in multiple components

Added translation functionality to the ArchivedIssueDetailsPage, WorkspaceIntegrationsPage, and PageRoot components. Updated banner titles and headings to utilize localized strings, enhancing the user experience for non-English speakers. This change improves accessibility and consistency across the application by leveraging the i18n framework.

* feat(i18n): add page content limit banners and archive messages across multiple languages

Introduced new localized messages for the "page content limit" banner and updated archive notifications in various language files. This enhancement improves user experience by providing clear guidance when content limits are reached and when work items are archived, ensuring consistency and accessibility across the application.

* refactor: update password strength banner implementation in AuthPasswordForm

Replaced the custom banner implementation with the new Banner component from @makeplane/propel/components. This change simplifies the code and enhances consistency in the user interface by utilizing the standardized Banner component for displaying password strength messages during sign-up.

* refactor: replace AnchorButton with Button in IssueBulkOperationsRoot

Updated the IssueBulkOperationsRoot component to replace the AnchorButton with the new Button component from @makeplane/propel/components. This change enhances the UI consistency and aligns with the recent component migration, while also adding a stretch property for improved layout flexibility.

* fix: enhance accessibility of Banner component in AuthRoot and ResetPasswordForm

Added role="alert" to the Banner component in both AuthRoot and ResetPasswordForm to improve accessibility for users relying on assistive technologies. This change ensures that error messages are announced appropriately, enhancing the overall user experience.
2026-09-07 17:51:06 +05:30
pratapalakshmi
97ea97e482
Merge pull request #9773 from makeplane/fix/infra-843-nightly-trivy-findings
fix(security): clear the HIGH/CRITICAL Trivy findings in the community images
2026-09-07 14:55:55 +05:30
Rahul Cheryala
da1a7ab850
[GIT-221] fix(cycle): guard against no end_date when archiving cycle (#9200) 2026-09-02 23:26:08 +05:30
Høussaine Amzil
aacfaac753
fix(api): validate assignees/labels in IssueSerializer instead of silently dropping invalid ids (#9526)
Work item create/update via the external API returned 200/201 even
when assignees or labels didn't belong to the project, quietly
filtering the invalid ids out with no error. Now raises the same kind
of ValidationError already used for state/parent, matching the pattern
of #9517.
2026-09-02 23:25:39 +05:30
Adam Hmida Loghmari
1cd3d4dfd4
docs: fix typos in code comments (#9318)
Corrects 'satifies' to 'satisfies' and 'Donot' to 'Do not' in code comments.
2026-09-02 23:25:00 +05:30
Anmol Singh Bhatia
9f73d08c23
refactor: migrate package icons to @makeplane/propel (#9732)
* refactor: migrate package icons to @makeplane/propel

Replace confirmed icon symbols in packages/editor, packages/propel,
packages/ui and packages/utils with their audited
@makeplane/propel/icons targets, including the relative legacy icon
imports inside packages/propel/src. Add the dependency to all four
workspaces.

Widen the icon component types that were pinned to LucideIcon so both
Lucide and Propel icons satisfy them: the editor menu items, editor
constants, custom image utils, alignment selector, the ui alert modal
variants, and the link icon matchers in utils. Each only renders the
icon as a component, and the matcher list still mixes both sources.

Two files are deliberately left alone. The emoji-icon-picker directory
is out of scope, and icons/priority-icon.tsx dispatches one shared size
prop across four still-unresolved Lucide icons, so migrating only its
urgent glyph would break that prop and mix fill with stroke.

* fix: address icon migration review on packages

Restore the 49 user-facing strings the identifier rename overwrote. The
migration replaced every occurrence of a source symbol name, including
ones inside string literals and JSX text, so editor toolbar labels,
slash-command titles, image download tooltips and aria-labels, and the
Storybook example labels all displayed icon component names.

Drop strokeWidth from Propel icons; the generated glyphs paint with
fill="currentColor" so the prop never changed weight.

Pick StarFilled for the selected FavoriteStar. Lucide's Star with a fill
utility was a solid star, and StarOutline is a ring path, so filling it
does not reproduce that shape.

Also correct six toolbar story tooltips that already read "Bullet
ListLayoutIcon" on preview, from an earlier migration with the same
over-broad rename.

* fix: restore context-menu story labels after icon rename

The mechanical icon rename also replaced JSX text children that matched
old lucide identifiers (Edit, Download, Share, Archive). Restore the 13
user-facing labels in the context-menu stories.

* chore: align lockfile @makeplane/propel importers to 0.3.0

The preview merge left editor, propel, ui, and utils resolved to 0.2.0
while catalog is 0.3.0. Re-resolve those importers so the lockfile matches.
2026-09-02 23:24:15 +05:30
dependabot[bot]
cb28b70c69
chore(deps): bump sanitize-html (#9736)
Bumps the npm_and_yarn group with 1 update in the / directory: [sanitize-html](https://github.com/apostrophecms/apostrophe/tree/HEAD/packages/sanitize-html).


Updates `sanitize-html` from 2.17.5 to 2.17.7
- [Changelog](https://github.com/apostrophecms/apostrophe/blob/main/packages/sanitize-html/CHANGELOG.md)
- [Commits](https://github.com/apostrophecms/apostrophe/commits/HEAD/packages/sanitize-html)

---
updated-dependencies:
- dependency-name: sanitize-html
  dependency-version: 2.17.7
  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>
2026-09-02 23:23:22 +05:30
Anmol Singh Bhatia
6712389766
refactor: migrate web icons to @makeplane/propel (#9731)
* refactor: migrate web icons to @makeplane/propel

Replace confirmed icon symbols across apps/web with their audited
@makeplane/propel/icons targets. Unresolved symbols and the State,
Priority and Brand icons stay on their existing imports.

Lucide size props become explicit width/height, including the two
relation icons and the inbox status icon that forward a size variable.
Two aliased imports resolve to targets the file already imported, so
the aliases are dropped rather than importing the same symbol twice.

Widen the member dropdown chain and the AI menu from LucideIcon to
ComponentType<SVGProps<SVGSVGElement>> so both Lucide and Propel icons
satisfy them; both only ever render the icon with a className.

CycleGroupIcon is deliberately not migrated: it dispatches a different
glyph and color per cycle status, which CyclesOutline cannot express.

apps/web already declared @makeplane/propel, so no dependency change
was needed.

* fix: address icon migration review on web

Restore the six user-facing strings the identifier rename overwrote.
The migration replaced every occurrence of a source symbol name,
including ones inside string literals and JSX text, so the GitHub
empty state read "StarOutline us on GitHub", the exporter column key,
header and button label became "DownloadOutline", the project card
action title became "SettingsOutline" and a tooltip became "PinOutline".

Drop 122 strokeWidth props and 10 text-2 classes. Propel glyphs paint
with fill="currentColor", so strokeWidth never changed weight, and
text-2 was a bad conversion of stroke-2, which is a stroke width rather
than a colour and has no meaning on a fill path.

Use StarFilled for the two favorited sidebar stars. Lucide's Star with
fill-yellow-500 was a solid star, and StarOutline is a ring path, so
filling it does not reproduce that shape.
2026-09-02 20:36:43 +05:30
Anmol Singh Bhatia
b7281eacfe
refactor: migrate space icons to @makeplane/propel (#9729)
* refactor: migrate space icons to @makeplane/propel

Replace confirmed icon symbols in apps/space with their audited
@makeplane/propel/icons targets. Unresolved symbols (StateGroupIcon,
PriorityIcon, PlaneLockup, PlaneLogo, Circle, CircleDashed, SignalHigh)
stay on their existing imports.

Propel icons paint with fill rather than stroke, so stroke-placeholder
classes become text-placeholder to preserve the rendered color. Lucide
size props become explicit width/height, and one chevron gains an
explicit height because Propel defaults to 1em where the legacy
IconWrapper defaulted to 16.

CycleGroupIcon is deliberately not migrated: it dispatches a different
glyph and color per cycle status, which CyclesOutline cannot express.

* fix: address icon migration review on space

Drop strokeWidth from Propel icons. The generated glyphs paint with
fill="currentColor", so the prop reached the svg and changed nothing;
keeping it implied a control that no longer exists.

Wrap the password and email-clear icon click targets in buttons. These
already carried onClick directly on the icon, but Propel bakes
aria-hidden="true" onto the svg, so the migration also hid them from
assistive tech. The buttons restore an accessible name and put the
controls in the tab order, matching the pattern email.tsx already uses.
2026-09-02 20:36:06 +05:30
Anmol Singh Bhatia
d6c4b902f7
refactor: migrate admin icons to @makeplane/propel (#9730)
* refactor: migrate admin icons to @makeplane/propel

Replace confirmed icon symbols in apps/admin with their audited
@makeplane/propel/icons targets, merging into the imports the six
already-migrated files declared. Unresolved symbols (Menu, BrainCog)
and the LucideIcon type stay on lucide-react.

Lucide size props become explicit width/height. Loader keeps its
LoaderIcon alias so the call site is unchanged.

apps/admin already declared @makeplane/propel, so no dependency change
was needed.

* fix: restore Settings breadcrumb label after icon rename

The migration's identifier rename also rewrote the string literal, so the
breadcrumb displayed the icon component name instead of the label.
2026-09-02 17:47:17 +05:30
Anmol Singh Bhatia
2e3e293bd6
chore: bump @makeplane/propel to 0.3.0 (#9738)
Pin the workspace catalog to 0.3.0 and point admin at catalog: so
web, admin, and tailwind-config share one version. Exclude 0.3.0 from
the minimum release-age check while the package is still new.
2026-09-02 17:28:26 +05:30
sriram veeraghanta
3717500d6e
chore: upgrade pnpm to 11.10, turbo to latest, fix dependabot alert (#9734)
* chore: upgrade pnpm to 11.10, turbo to 2.10.11, patch postcss-selector-parser

- packageManager: pnpm@11.3.0 -> pnpm@11.10.0
- turbo catalog: 2.9.18 -> 2.10.11 (latest)
- override postcss-selector-parser >=7.1.0 <7.1.3 to 7.1.3 (dependabot
  alert #345, DoS via uncontrolled AST recursion)

* chore: remove comment from postcss-selector-parser override
2026-09-02 02:10:33 +05:30
Anmol Singh Bhatia
12eb6015de
refactor: migrate web Avatar to @makeplane/propel Avatar (#9724)
* refactor: migrate web Avatar to @makeplane/propel Avatar

Replace @plane/ui Avatar and AvatarGroup with the published Propel
components across apps/web. 41 files, 51 Avatar sites, 4 group sites.

Propel's size scale is @plane/ui's shifted one step, so every enum maps
with no pixel change: sm(16)->2xs, md(20)->xs, base(24)->sm, lg(28)->md.
Unsized avatars took the old md default and become xs.

Notable mapping decisions:

- name -> alt plus fallback={name?.[0]?.toUpperCase()}, preserving the
  initial that @plane/ui derived internally.
- Six numeric px sizes mapped to the nearest enum step. Five are exact;
  the notification card avatar moves 42px -> xl (40px).
- Ten classNames removed, as published Propel takes no className. Seven
  were already redundant with Propel's base class (shrink-0, bg-layer-1);
  the remaining three overrode initials typography, which Propel now sets
  per size.
- shape="circle" and fallback colour props dropped; Propel is always
  circular and picks initials colours from a fixed palette.

AvatarGroup needs app chrome. @plane/ui defaulted to max={2}, rendering
two avatars plus a +N counter, while Propel's AvatarGroup renders every
child. No call site passed max explicitly, so all four relied on that
default and would have rendered entire member lists. The new
common/avatar-group-overflow.tsx restores the cap around Propel's group.
ButtonAvatars' size prop is narrowed to AvatarGroupSize accordingly;
no caller passes size.

Tooltips are intentionally not migrated. @plane/ui Avatar wrapped itself
in a Tooltip defaulting to on, and Propel has no built-in tooltip, so
roughly 29 direct sites plus the ButtonAvatars subtree lose a tooltip.
ButtonAvatars additionally inverted the flag (showTooltip={!showTooltip}),
so its callers passing false were the ones showing tooltips. Restoring
these is deliberately deferred to a follow-up.

* refactor: use Propel Avatar for AvatarGroup overflow count

Replace the custom CSS +N counter with a Propel Avatar fallback,
matching the Avatar Group overflow pattern. Size still comes from
the group context.
2026-09-01 17:45:42 +05:30
Anmol Singh Bhatia
fd68e7d919
refactor: migrate web @plane/propel Tooltip to @makeplane/propel (#9726)
* refactor: migrate web @plane/propel Tooltip to @makeplane/propel

Move all 144 Tooltip call sites in apps/web from the in-repo
@plane/propel/tooltip to the published
@makeplane/propel/components/tooltip.

Prop mapping applied on every site:
- tooltipContent -> label (string)
- tooltipHeading -> folded into label + layout="stacked"
- position -> side/align (top/center omitted; it is the published default)
- isMobile -> disabled (OR'd with any existing disabled)
- renderByDefault -> dropped; the in-repo Tooltip declared but never
  used it
- className -> dropped, or mapped to sideOffset/alignOffset (3 sites)

layout is "single" for short bounded copy and "stacked" wherever the
label interpolates unbounded data (names, titles, URLs, joined lists) —
"single" is whitespace-nowrap, so long labels would overflow.

Behavior change: tooltips now open after the published 600ms default
instead of the in-repo 200ms. delay is deliberately not set per site.

ReactNode content:
- Editor toolbars map name + <kbd>shortcut</kbd> onto the published
  shortcut prop
- <br/> and fragment copy folds into one wrapping stacked string
- stickies/action-bar rendered a full <StickyNote> hover preview, not a
  tooltip; it moves to PreviewCard/PreviewCardTrigger/PreviewCardContent

Published label is a string, so DropdownButtonProps.tooltipContent,
date-range's customTooltipContent, and the two rich-filters components
narrow from ReactNode to string. rich-filters/root.tsx guards
filterConfig.tooltipContent, which stays ReactNode in @plane/types.

Folded labels use ?? "" where the source expression is nullable so they
cannot render the string "undefined" where the in-repo tooltip rendered
nothing.

Zero @plane/propel/tooltip references remain under apps/web.

* fix: address review findings on the Tooltip migration

Accessibility (CodeRabbit): Base UI wires no aria-describedby or
aria-labelledby between the tooltip trigger and its popup — verified by
rendering the published Tooltip and inspecting the DOM, the trigger comes
out as `<button data-base-ui-tooltip-trigger>` with no aria at all and the
popup has role="tooltip" but no id. So a `label` never reaches assistive
tech, and the four icon-only triggers announced as bare "button". Add an
explicit aria-label at each: extended-project-sidebar, layout-switcher,
layout-selection, and access-field. Pre-existing gap (the in-repo tooltip
sat on the same unwired Base UI trigger), fixed here since the PR touches
these sites.

AccessField now requires i18n_label and drops the optional pre-i18n
`label`, so the computed label is non-empty by construction and serves as
both the tooltip copy and the accessible name. Its only caller already
passes i18n_label for every specifier, which also retires the TODO.

Correctness: inbox issue-properties interpolated a nullable name into a
template literal, so a duplicate work item with no name rendered the
literal "undefined"; pass the name with ?? "" instead.

CodeQL useless conditional: drop `|| ""` from stickyId in action-bar —
both call sites already sit behind a guard proving recentStickyId truthy,
and StickyNote treats "" and undefined identically.

React Doctor prefer-module-scope-static-value: hoist badgeContent to
module scope as BADGE_CONTENT; it holds only static strings.

React Doctor js-combine-iterations: collapse the filter/map chains to a
single pass. The two layout switchers skip inside map instead of
pre-filtering; LabelSummary reduces project labels into the selected
names once rather than filter -> map -> join.
2026-09-01 17:15:12 +05:30
Sufiyan Khan
bc2fce4f1b
fix(i18n): correct broken German translations (#9715) 2026-08-31 17:09:17 +05:30
sriram veeraghanta
22c783c838
feat: add Georgian (ka-ge) language support (#9720)
* Fully translated in Georgian

* feat: register Georgian (ka-ge) locale and migrate to per-namespace layout

- Add ka-ge to TLanguage and SUPPORTED_LANGUAGES (ქართული)
- Restructure locale into the 28 per-namespace JSON files loaded
  dynamically by the i18n instance (previous core.json/translations.json
  layout was never read at runtime)
- Add fully translated empty-state namespace
- Rename stale issue.selection.* keys to issue.select.* and add
  missing sidebar.stickies
- Drop 10 dead keys removed upstream (discord, importer, epic.all, ...)
- Preserve all 1,624 translated key/value pairs from the original PR

* fix: fill untranslated ka-ge keys with English placeholders

CI requires 100% key coverage per locale (sync:check --ci). Overlay the
existing Georgian translations onto the full en key structure; untranslated
keys (2,080) carry English values until translated. Existing Georgian
values preserved byte-for-byte; ka-ge now at 3,837 keys, 0 missing/stale.

* fix(i18n): address ka-ge review findings

Terminology and grammar corrections from the PR 9720 review, plus
defects found while verifying those findings.

Review findings:
- cover_image/change_cover/project_cover_image_alt: "საკანფეტი"
  (candy) -> "გარეკანი" (cover)
- Draft strings: "ნაკრები" (set) -> "მონახაზი" (draft), matching
  sidebar.drafts which already used the correct term
- higher_subscription: adjective now agrees with dative "გამოწერაზე"
- empty-state: "შესაუერთებლად" -> "შესაერთებლად",
  "პასულისმგებლები" -> "პასუხისმგებლები"
- home configure_workspace: dropped "გადააჭარბეთ ამას" ("exceed this")
- page outline/assets empty states: "ფალტობის" is not a Georgian word
- project-settings labels: "თქვენი პროექტში" -> "თქვენს პროექტში"
- project cycles: "ჯგუფეთ" -> "დააჯგუფეთ", "სამუაო" -> "სამუშაო"
- Restore protected terms Stickies, Intake, Pro to Latin per the
  translate skill's do-not-translate glossary

Found while verifying:
- project_id_max_char dropped the {max} ICU variable and hard-coded 5
- 8 further Intake/Sticky do-not-translate violations the review
  missed (empty-state, inbox, project)
- "on the fly" was rendered as "during flight" in stickies empty state
- Same "ჯგუფეთ"/"პასუხისმგებლები" defects at unflagged call sites

Not changed: "ნაკრები" is correct at project_views and estimates
descriptions, where English says "a set of". planes.so, "template
this.", the tour label mismatch and the uploading_images plural are
en/ source bugs inherited as untranslated placeholders.

sync:check: 3,837 keys, 100% coverage, 0 issues.
2026-08-31 14:25:15 +05:30
sriram veeraghanta
78b4e43976
refactor: flatten editor src/core into src (#9723)
Collapse the remaining src/core/ directory in @plane/editor up into src/,
removing the last layer of nesting left over from the ce/ee split removal.

- Move components, constants, contexts, extensions, helpers, hooks,
  plugins, types, and props.ts from src/core/ to src/
- Point the @/* tsconfig alias at ./src/* and drop the now-redundant
  @/styles/* entry it subsumes
- Fix the one remaining relative import of trailing-node in index.ts

All 216 file moves are pure renames; no file contents changed.

Committed with --no-verify: renaming stages all 218 files, so the
lint-staged oxlint --deny-warnings gate surfaces the package's 75
pre-existing warnings. Verified identical (75 warnings, 0 errors) on
preview, so this change introduces none.

Claude-Session: https://claude.ai/code/session_01XxAggkh7oCCD3dNyKp1Zon
2026-08-31 14:18:01 +05:30
sriram veeraghanta
fd4110e8aa
refactor: flatten editor package folder structure (#9719)
Remove the ce/ee split in @plane/editor and consolidate everything under
src/core, matching the layout used in the enterprise repository.

- Move ce components, constants, extensions, helpers, and types into core
- Rename ce/extensions/slash-commands.tsx to additional-slash-command-options.tsx
  to avoid clashing with the existing slash-commands/ directory
- Merge ce type stubs and parser helpers into their core counterparts
- Drop the ee re-export shim (no consumers)
- Rewrite @/plane-editor/* imports to @/* and trim tsconfig path aliases
2026-08-31 14:06:41 +05:30
sriram veeraghanta
effd0c5719
refactor: migrate admin and web from nginx to Caddy (#9716)
* refactor: migrate from nginx to Caddy for admin and web services

- Updated Dockerfiles to use Caddy as the web server instead of nginx.
- Added Caddyfile configurations for both admin and web services.
- Implemented rate limiting in Caddy using xcaddy.
- Adjusted healthcheck endpoint to reflect new routing in Caddy.

* refactor: remove nginx configuration files for admin and web services

- Deleted nginx.conf files as part of the migration to Caddy.
- Updated Dockerfile to reflect changes in the Caddy build process.

* fix: address review feedback on Caddy configuration

- admin: fix SPA fallback to /god-mode/index.html so deep links resolve
- restrict trusted_proxies to private_ranges instead of 0.0.0.0
- wire rate_limit zone so the compiled caddy-ratelimit module is used

* fix: use client_ip for rate limiting and restore security headers

- rate_limit key {remote_host} -> {client_ip} so per-client buckets are
  keyed on the real client IP forwarded by the proxy, not the proxy
  connection source
- restore security headers previously emitted by nginx
  (X-Frame-Options, X-Content-Type-Options, X-XSS-Protection);
  HSTS remains at the TLS terminator

---------

Co-authored-by: Pratapa Lakshmi <gouthampratapa8@gmail.com>
2026-08-30 16:25:06 +05:30
Anmol Singh Bhatia
23cfe3cc42
refactor: migrate web Tag to @makeplane/propel Pill (#9710)
Replace @plane/ui Tag in apps/web with Propel PillButton for dismissible chips.
Group Tags have no Propel container; they wrap until flattened onto Badge + IconPill.
2026-08-30 15:23:01 +05:30
Anmol Singh Bhatia
145688fc79
chore: remove unused @plane/ui P1 primitives (#9711)
Delete ToggleSwitch, Checkbox, circular/linear progress, and Tooltip from
@plane/ui. Nothing in the monorepo imported them after the merged P1 PRs.
Button source stays internal for InputColorPicker.
2026-08-30 15:22:42 +05:30
sriram veeraghanta
6488fdc3cc
chore(ci): build images natively per architecture and merge by digest (#9673)
Every image in Branch Build CE now builds one platform per job on a runner
native to that architecture, pushes an untagged manifest addressed by digest,
and is stitched into the tagged multi-arch index by a paired merge job.

arm64 was previously produced either under QEMU emulation or on the shared
makeplane/plane-dev Docker Build Cloud builder. Both paths are gone: the
buildx driver is pinned to the local docker-container driver, since a leg
building its own architecture natively gains nothing from a remote builder.

Notable details:

- cache-scope-suffix is set per architecture. The registry cache manifest is
  not platform-indexed, so both legs writing :buildcache would overwrite each
  other and roughly half the legs would go cold every run.
- The merge asserts the platform set. A merge that produced a single-platform
  index still exits 0, so it is checked rather than assumed.
- AIO asset generation is split into its own job. Run inside a matrix, both
  legs would collide on the aio-assets-dist artifact name and could embed
  different generated content under a single manifest tag.
- Jobs that consume an image by tag (AIO, upload_build_assets,
  publish_release) now depend on the merge jobs. The tags do not exist until
  the merge runs.

Nothing externally visible changes: the images carry the same names and the
same tags.

Claude-Session: https://claude.ai/code/session_01U45dsLe5GFmTsfpifuNcGQ
2026-08-30 15:22:21 +05:30