Conversation
WalkthroughThis update restructures CI workflows, tightens TypeScript types, and improves code clarity across the monorepo. It replaces a monolithic build/lint workflow with targeted workflows for API and web apps, adjusts ESLint configurations to allow intentional unused variables, and refines type annotations, import orders, and error handling. Minor functional and dependency updates are included. Changes
Sequence Diagram(s)sequenceDiagram
participant Dev as Developer
participant GitHub as GitHub Actions
participant API as API Lint/Build Workflow
participant Web as Web Apps Lint/Build Workflow
Dev->>GitHub: Open/sync PR targeting preview branch
alt Changes in apps/api/**
GitHub->>API: Trigger Build and Lint API Workflow
API->>API: Checkout, setup Python, install deps, run ruff linter
else Changes in web app files (tsx, jsx, css, json)
GitHub->>Web: Trigger Build and Lint Web Apps Workflow
Web->>Web: Checkout, setup Node, install deps, build, run lint
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~15–25 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
✨ Finishing Touches🧪 Generate unit tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
cdb3fbf to
0e9f2f0
Compare
There was a problem hiding this comment.
Pull Request Overview
This PR focuses on fixing lint errors and warnings throughout the codebase while adding a missing environment variable. The changes involve standardizing unused variable naming conventions, cleaning up TypeScript types, and reorganizing import statements for better consistency.
- Remove unused function and fix linting errors related to unused variables by prefixing them with underscore
- Update TypeScript configurations and ESLint rules to allow variables beginning with
_to be unused - Add missing live server environment variable and improve type safety across multiple packages
Reviewed Changes
Copilot reviewed 81 out of 84 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/utils/src/string.ts | Removes unused objToQueryParams function and renames unused error variables |
| packages/eslint-config/* | Updates ESLint rules to ignore unused variables with underscore prefix |
| packages/types/src/* | Reorders imports and improves type definitions |
| packages/editor/src/* | Fixes dependency arrays, removes unused parameters, and improves type safety |
| apps/web/core/* | Improves error handling and type definitions |
| apps/space/* | Updates dependency arrays and error variable naming |
| apps/live/* | Major refactor with improved type safety and error handling |
Comments suppressed due to low confidence (1)
packages/ui/src/sortable/sortable.stories.tsx:12
- [nitpick] The type name 'StoryItem' is generic and could be more descriptive. Consider renaming it to 'SortableStoryItem' to better reflect its purpose in the Sortable component story.
type StoryItem = { id: string; name: string };
b5a2e27 to
ce47b4a
Compare
| } | ||
| }, | ||
| [fetchNextPublicIssues] | ||
| [anchor, getIssueLoader, fetchNextPublicIssues] |
There was a problem hiding this comment.
This requires resting the Kanban Layout.
There was a problem hiding this comment.
Actionable comments posted: 6
🔭 Outside diff range comments (1)
apps/space/core/hooks/use-intersection-observer.tsx (1)
39-43: Dependency list risks endless re-subscriptionsThe comment says adding
callbacktriggered an infinite loop, yet the dependency array still containscallbackandcontainerRef.current.
Both references are unstable by default:
callback– if it’s recreated on every render, this hook will tear-down and recreate the observer each time, thrashing performance and risking loops.containerRef.current– the value is not reactive; React will treat the literal value seen during render as constant, so changes to.currentwon’t retrigger the effect anyway.A safer pattern is:
- }, [rootMargin, callback, elementRef, containerRef.current]); + // Hold mutable refs to avoid effect churn + }, [rootMargin, elementRef, containerRef]);Or keep
callbackout of the deps and reference it via auseRefinside the effect.- if (entries[entries.length - 1].isIntersecting) { - if (callback) { - callback(); - } - } + const savedCb = useRef<(() => void) | undefined>(); + useEffect(() => { savedCb.current = callback; }, [callback]); + ... + if (entries[entries.length - 1].isIntersecting) { + savedCb.current?.(); + }This removes the loop while still invoking the latest callback.
♻️ Duplicate comments (4)
packages/editor/src/core/hooks/use-editor.ts (1)
274-274: Adding provider to dependencies is necessary for correctness.While the past review comment raised valid concerns about potential re-renders, including
providerin the dependency array is functionally necessary since several imperative handle methods (emitRealTimeUpdate,listenToRealTimeUpdate,setProviderDocument) directly use the provider instance.To mitigate unnecessary re-renders, ensure the
providerobject reference remains stable across renders in the consuming components.packages/types/src/page/extended.ts (1)
1-1: Consider using Record<string, unknown> for better type safety.The change from
{}toobjectis an improvement, but usingRecord<string, unknown>would provide more explicit type safety and better communicate the intended structure.-export type TPageExtended = object; +export type TPageExtended = Record<string, unknown>;packages/editor/src/core/components/links/link-view.tsx (1)
31-31: Dependency array fix addresses ESLint warning correctly.The addition of
[prevFrom, props.from]to the dependency array correctly addresses the missing dependencies ESLint warning. The effect logic is safe from infinite re-renders due to the guard conditionif (props.from !== prevFrom), which ensures the state only updates whenprops.fromactually changes.Note: This addresses the previous concern about multiple useEffect triggers - the guard condition prevents unnecessary state updates.
packages/constants/src/issue/common.ts (1)
32-33: Acknowledge the duplicate enum value pattern.While this creates duplicate enum values (similar to the existing "project" member), the comment on line 113 indicates this distinction is needed for different UI contexts (team issues vs my issues), even though they map to the same server value.
🧹 Nitpick comments (15)
apps/space/helpers/string.helper.ts (1)
18-23: Avoid creating an unused_errvariable – prefer a parameter-less catch and document intentSince the error is intentionally ignored, you can rely on the ES2019 / TS4.4+ parameter-less
catch {}syntax and add a short comment to clarify that the failure is non-critical. This removes the extraneous identifier while keeping lint happy.- } catch (_err) {} + } catch { + // Ignored: clipboard copy failure in legacy browsers is non-blocking + }packages/shared-state/package.json (1)
9-11: Raising--max-warningsto 4: make sure this ceiling is tracked in CIAllowing warnings is reasonable for an incremental cleanup, but consider adding a TODO (or tracking issue) so the cap trends back toward zero rather than creeping upward.
packages/types/package.json (1)
20-24: Consider documenting the rationale for--max-warnings 36As with other packages, add a comment in README or
package.jsonexplaining the interim target so future contributors know this is intentional and temporary.apps/space/helpers/date-time.helper.ts (1)
38-38: Silently swallowing errors may hide parsing issuesRenaming the param to
_erris fine for eslint, but the catch block still suppresses all failures.
Consider at least logging (e.g.console.debug) or adding Sentry-style telemetry so bad inputs can be surfaced during QA.- } catch (_err) { - return undefined; + } catch (_err) { + // TODO: decide whether to surface or log the error + return undefined; }apps/space/core/store/instance.store.ts (1)
67-75: Swallowing the real error hinders debuggingRenaming to
_errorkeeps ESLint happy, but the underlying exception is silently discarded. Hydratingthis.errorwith a static message makes post-mortem analysis impossible.Consider logging or attaching the original error for observability, e.g.:
- } catch (_error) { + } catch (error) { runInAction(() => { this.isLoading = false; - this.error = { - status: "error", - message: "Failed to fetch instance info", - }; + console.error("fetchInstanceInfo failed:", error); + this.error = { + status: "error", + message: error instanceof Error ? error.message : "Failed to fetch instance info", + }; }); }apps/space/package.json (1)
11-12: Increasing--max-warningsto 27 risks warning creepRatcheting lint thresholds upward is fine as a temporary measure, but plan to bring the number back down over time; otherwise the codebase will silently accumulate new issues.
packages/utils/package.json (1)
16-17: Same note on relaxed lint threshold
--max-warnings 20is acceptable short-term. Track this number in CI dashboards so it trends downward.package.json (1)
16-16: Use a cross-platform cleaner instead of multiplerm -rfinvocations
rm -rfworks only on POSIX shells; Windows runners (or local contributors on Windows) will break. Considerrimraf, which ships a portable binary and can accept multiple paths in a single call.- "clean": "turbo run clean && rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist", + "clean": "turbo run clean && rimraf .turbo .next node_modules dist",You’ll need a dev-dependency:
"devDependencies": { "prettier": "latest", "prettier-plugin-tailwindcss": "^0.5.4", + "rimraf": "^5.0.5", "turbo": "^2.5.5" },apps/space/core/components/issues/filters/applied-filters/filters-list.tsx (1)
40-44: Avoid the cast by narrowingfilterValueearlierThe assertion to
TFilters["priority"]is harmless but unnecessary.
A small refactor removes the cast and makes the intent clearer:- {filterKey === "priority" && ( - <AppliedPriorityFilters - handleRemove={(val) => handleRemoveFilter("priority", val)} - values={(filterValue ?? []) as TFilters["priority"]} - /> - )} + {filterKey === "priority" && ( + <AppliedPriorityFilters + handleRemove={(val) => handleRemoveFilter("priority", val)} + values={(filterValue ?? [])} + /> + )}Because the branch already guards on
filterKey === "priority", TypeScript narrowsfilterValuetoTFilters["priority"]automatically.apps/admin/package.json (1)
13-13: Raising--max-warningsto 19 only postpones lint debtConsider tracking the existing violations and lowering this threshold over time (or turning specific rules to
warn) rather than broadly allowing 19 new warnings per run. Otherwise the warning count may silently grow.If CI must pass today, create a follow-up ticket to bring the limit back to zero.
.github/workflows/pull-request-build-lint-web-apps.yml (2)
19-21: Consider relaxing the requested reviewers condition.The condition
github.event.pull_request.requested_reviewers != nullmight be too restrictive. This would prevent the workflow from running on PRs that don't have explicitly requested reviewers, even if they're ready for review through other means (like team assignments or automatic reviewer assignment rules).Consider using a condition that focuses on the draft status:
- if: | - github.event.pull_request.draft == false && - github.event.pull_request.requested_reviewers != null + if: github.event.pull_request.draft == false
33-34: Consider adding dependency caching for faster builds.Adding yarn cache could significantly speed up workflow execution by avoiding re-downloading dependencies on every run.
Add caching after the Node.js setup step:
- name: Set up Node.js uses: actions/setup-node@v4 with: node-version-file: ".nvmrc" + cache: "yarn".github/workflows/pull-request-build-lint-api.yml (3)
15-17: Same reviewer condition concern as the web workflow.The condition requiring
requested_reviewers != nullmay be too restrictive and prevent the workflow from running on valid PRs.Consider the same fix as suggested for the web workflow:
- if: | - github.event.pull_request.draft == false && - github.event.pull_request.requested_reviewers != null + if: github.event.pull_request.draft == false
24-25: Fix misleading step name.The step name says "Install Pylint" but actually installs
ruff, which could confuse maintainers.- - name: Install Pylint + - name: Install ruff run: python -m pip install ruff
26-29: Consider adding Python dependency caching and improving ruff output.Two improvements could enhance this workflow:
- Add caching for pip dependencies to speed up builds
- Add flags to ruff for better CI output
- name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.x" + cache: "pip" - name: Install ruff run: python -m pip install ruff - name: Install API Dependencies run: cd apps/api && pip install -r requirements.txt - name: Lint apps/api - run: ruff check --fix apps/api + run: ruff check --fix --show-fixes --diff apps/apiThe additional flags provide better visibility into what changes ruff makes during the CI run.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
yarn.lockis excluded by!**/yarn.lock,!**/*.lock
📒 Files selected for processing (93)
.github/workflows/build-test-pull-request.yml(0 hunks).github/workflows/pull-request-build-lint-api.yml(1 hunks).github/workflows/pull-request-build-lint-web-apps.yml(1 hunks).nvmrc(1 hunks)apps/admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx(1 hunks)apps/admin/app/(all)/(dashboard)/authentication/google/page.tsx(1 hunks)apps/admin/package.json(1 hunks)apps/live/.env.example(1 hunks)apps/live/package.json(2 hunks)apps/live/src/ce/types/common.d.ts(1 hunks)apps/live/src/core/helpers/logger.ts(1 hunks)apps/live/src/core/hocuspocus-server.ts(1 hunks)apps/live/src/core/services/api.service.ts(1 hunks)apps/space/app/[workspaceSlug]/[projectId]/page.ts(2 hunks)apps/space/core/components/account/auth-forms/password.tsx(1 hunks)apps/space/core/components/account/oauth/github-button.tsx(1 hunks)apps/space/core/components/account/oauth/gitlab-button.tsx(1 hunks)apps/space/core/components/account/oauth/google-button.tsx(1 hunks)apps/space/core/components/issues/filters/applied-filters/filters-list.tsx(1 hunks)apps/space/core/components/issues/filters/applied-filters/priority.tsx(2 hunks)apps/space/core/components/issues/filters/applied-filters/root.tsx(2 hunks)apps/space/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx(1 hunks)apps/space/core/components/issues/issue-layouts/list/base-list-root.tsx(1 hunks)apps/space/core/hooks/use-intersection-observer.tsx(1 hunks)apps/space/core/store/instance.store.ts(1 hunks)apps/space/core/store/issue-detail.store.ts(8 hunks)apps/space/core/store/profile.store.ts(2 hunks)apps/space/helpers/date-time.helper.ts(1 hunks)apps/space/helpers/string.helper.ts(1 hunks)apps/space/package.json(2 hunks)apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/mobile-header.tsx(2 hunks)apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx(2 hunks)apps/web/app/(all)/accounts/set-password/page.tsx(1 hunks)apps/web/app/(all)/create-workspace/page.tsx(2 hunks)apps/web/app/(all)/onboarding/page.tsx(1 hunks)apps/web/app/(all)/profile/security/page.tsx(2 hunks)apps/web/core/components/issues/issue-layouts/kanban/kanban-group.tsx(1 hunks)apps/web/core/components/issues/issue-layouts/list/list-group.tsx(1 hunks)apps/web/core/components/issues/issue-layouts/quick-add/root.tsx(1 hunks)apps/web/core/components/workspace/create-workspace-form.tsx(1 hunks)apps/web/core/components/workspace/settings/members-list.tsx(1 hunks)package.json(2 hunks)packages/constants/src/analytics/common.ts(1 hunks)packages/constants/src/auth.ts(3 hunks)packages/constants/src/issue/common.ts(1 hunks)packages/constants/src/issue/layout.ts(1 hunks)packages/constants/src/settings.ts(1 hunks)packages/decorators/src/controller.ts(1 hunks)packages/decorators/src/rest.ts(3 hunks)packages/decorators/src/websocket-controller.ts(2 hunks)packages/decorators/src/websocket.ts(1 hunks)packages/decorators/tsconfig.json(1 hunks)packages/editor/package.json(1 hunks)packages/editor/src/core/components/editors/editor-content.tsx(1 hunks)packages/editor/src/core/components/links/link-edit-view.tsx(3 hunks)packages/editor/src/core/components/links/link-view.tsx(1 hunks)packages/editor/src/core/extensions/code/lowlight-plugin.ts(1 hunks)packages/editor/src/core/extensions/custom-image/components/upload-status.tsx(1 hunks)packages/editor/src/core/extensions/mentions/utils.ts(1 hunks)packages/editor/src/core/extensions/table/table/table-controls.ts(1 hunks)packages/editor/src/core/extensions/table/table/table-view.tsx(3 hunks)packages/editor/src/core/helpers/scroll-to-node.ts(1 hunks)packages/editor/src/core/hooks/use-editor.ts(1 hunks)packages/editor/src/core/types/editor.ts(1 hunks)packages/editor/src/core/types/mention.ts(1 hunks)packages/editor/src/core/types/slash-commands-suggestion.ts(1 hunks)packages/editor/tailwind.config.js(1 hunks)packages/eslint-config/library.js(1 hunks)packages/eslint-config/next.js(1 hunks)packages/eslint-config/server.js(1 hunks)packages/hooks/package.json(1 hunks)packages/i18n/src/hooks/use-translation.ts(1 hunks)packages/i18n/src/store/index.ts(4 hunks)packages/logger/package.json(1 hunks)packages/logger/src/config.ts(1 hunks)packages/propel/package.json(1 hunks)packages/services/package.json(1 hunks)packages/shared-state/package.json(1 hunks)packages/types/package.json(1 hunks)packages/types/src/dashboard.ts(1 hunks)packages/types/src/issues/activity/issue_activity.ts(1 hunks)packages/types/src/issues/activity/issue_comment.ts(1 hunks)packages/types/src/issues/issue.ts(1 hunks)packages/types/src/module/modules.ts(1 hunks)packages/types/src/page/extended.ts(1 hunks)packages/types/src/users.ts(1 hunks)packages/types/src/workspace-notifications.ts(1 hunks)packages/ui/package.json(2 hunks)packages/ui/src/icons/priority-icon.tsx(1 hunks)packages/ui/src/sortable/sortable.stories.tsx(2 hunks)packages/ui/src/sortable/sortable.tsx(1 hunks)packages/utils/package.json(1 hunks)packages/utils/src/string.ts(2 hunks)
🧠 Learnings (33)
packages/logger/src/config.ts (2)
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/read.tsx:11-12
Timestamp: 2024-11-28T07:02:15.514Z
Learning: Some components are still in core and have not been moved yet, so their import paths remain the same.
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in core, it's appropriate for files to import them using @/components/..., and the migration to the new import paths is not necessary in such cases.
apps/space/helpers/date-time.helper.ts (1)
Learnt from: prateekshourya29
PR: #7363
File: apps/web/helpers/react-hook-form.helper.ts:9-19
Timestamp: 2025-07-08T13:41:19.928Z
Learning: In the apps/web/helpers/react-hook-form.helper.ts file, the getNestedError function's FieldError detection logic using "message" property check is sufficient for their use case, and more robust type checking is not required.
packages/editor/src/core/types/slash-commands-suggestion.ts (2)
Learnt from: lifeiscontent
PR: #7164
File: packages/ui/.storybook/main.ts:24-47
Timestamp: 2025-06-04T16:22:44.344Z
Learning: In packages/ui/.storybook/main.ts, the webpackFinal function intentionally overrides the CSS loader strategy by finding and replacing existing CSS rules. This is a temporary workaround for a known upstream issue in Storybook's CSS handling that has been communicated to the Storybook maintainers. The current implementation should not be changed until the upstream issue is resolved.
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in core, it's appropriate for files to import them using @/components/..., and the migration to the new import paths is not necessary in such cases.
packages/ui/package.json (2)
Learnt from: lifeiscontent
PR: #7164
File: packages/ui/.storybook/main.ts:24-47
Timestamp: 2025-06-04T16:22:44.344Z
Learning: In packages/ui/.storybook/main.ts, the webpackFinal function intentionally overrides the CSS loader strategy by finding and replacing existing CSS rules. This is a temporary workaround for a known upstream issue in Storybook's CSS handling that has been communicated to the Storybook maintainers. The current implementation should not be changed until the upstream issue is resolved.
Learnt from: vamsikrishnamathala
PR: #7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias @/plane-web resolves to the ce directory, making imports like @/plane-web/hooks/use-notification-preview correctly resolve to files in web/ce/hooks/.
apps/space/core/components/account/oauth/github-button.tsx (1)
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in core, it's appropriate for files to import them using @/components/..., and the migration to the new import paths is not necessary in such cases.
packages/editor/src/core/components/editors/editor-content.tsx (1)
Learnt from: prateekshourya29
PR: #7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
packages/decorators/tsconfig.json (1)
Learnt from: lifeiscontent
PR: #7164
File: packages/ui/.storybook/main.ts:24-47
Timestamp: 2025-06-04T16:22:44.344Z
Learning: In packages/ui/.storybook/main.ts, the webpackFinal function intentionally overrides the CSS loader strategy by finding and replacing existing CSS rules. This is a temporary workaround for a known upstream issue in Storybook's CSS handling that has been communicated to the Storybook maintainers. The current implementation should not be changed until the upstream issue is resolved.
apps/space/core/components/issues/filters/applied-filters/filters-list.tsx (1)
Learnt from: mathalav55
PR: #6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, ISSUE_DISPLAY_FILTERS_BY_LAYOUT and ISSUE_DISPLAY_FILTERS_BY_PAGE are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.
apps/live/src/core/hocuspocus-server.ts (1)
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/workspace/filter.store.ts:135-177
Timestamp: 2025-06-16T07:21:23.688Z
Learning: Try-catch blocks that only re-throw errors (catch (error) { throw error; }) without any additional processing, logging, cleanup, or error transformation are redundant and can be safely removed as the error will naturally propagate up the call stack.
packages/editor/src/core/extensions/mentions/utils.ts (1)
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in core, it's appropriate for files to import them using @/components/..., and the migration to the new import paths is not necessary in such cases.
packages/types/src/issues/issue.ts (1)
Learnt from: mathalav55
PR: #6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, ISSUE_DISPLAY_FILTERS_BY_LAYOUT and ISSUE_DISPLAY_FILTERS_BY_PAGE are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.
packages/types/src/module/modules.ts (1)
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/read.tsx:11-12
Timestamp: 2024-11-28T07:02:15.514Z
Learning: Some components are still in core and have not been moved yet, so their import paths remain the same.
packages/types/src/issues/activity/issue_activity.ts (1)
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/read.tsx:11-12
Timestamp: 2024-11-28T07:02:15.514Z
Learning: Some components are still in core and have not been moved yet, so their import paths remain the same.
apps/space/core/store/profile.store.ts (1)
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/workspace/filter.store.ts:135-177
Timestamp: 2025-06-16T07:21:23.688Z
Learning: Try-catch blocks that only re-throw errors (catch (error) { throw error; }) without any additional processing, logging, cleanup, or error transformation are redundant and can be safely removed as the error will naturally propagate up the call stack.
apps/web/core/components/issues/issue-layouts/quick-add/root.tsx (1)
Learnt from: vamsikrishnamathala
PR: #7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias @/plane-web resolves to the ce directory, making imports like @/plane-web/hooks/use-notification-preview correctly resolve to files in web/ce/hooks/.
packages/editor/tailwind.config.js (2)
Learnt from: lifeiscontent
PR: #7164
File: packages/ui/.storybook/main.ts:24-47
Timestamp: 2025-06-04T16:22:44.344Z
Learning: In packages/ui/.storybook/main.ts, the webpackFinal function intentionally overrides the CSS loader strategy by finding and replacing existing CSS rules. This is a temporary workaround for a known upstream issue in Storybook's CSS handling that has been communicated to the Storybook maintainers. The current implementation should not be changed until the upstream issue is resolved.
Learnt from: vamsikrishnamathala
PR: #7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias @/plane-web resolves to the ce directory, making imports like @/plane-web/hooks/use-notification-preview correctly resolve to files in web/ce/hooks/.
apps/space/core/components/account/auth-forms/password.tsx (1)
Learnt from: gakshita
PR: #7393
File: apps/admin/app/(all)/(dashboard)/email/email-config-form.tsx:104-104
Timestamp: 2025-07-14T11:22:43.964Z
Learning: In the Plane project's SMTP configuration implementation, the email configuration form (email-config-form.tsx) hardcodes ENABLE_SMTP to "1" in form submission because the form is only rendered when SMTP is enabled. The enable/disable functionality is managed at the page level (page.tsx) with a toggle, and the form only handles configuration details when SMTP is already enabled.
packages/i18n/src/hooks/use-translation.ts (1)
Learnt from: janreges
PR: #6743
File: packages/i18n/src/store/index.ts:160-161
Timestamp: 2025-03-11T19:42:41.769Z
Learning: In the Plane project, the file 'packages/i18n/src/store/index.ts' already includes support for Polish language translations with the case "pl".
apps/admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx (1)
Learnt from: gakshita
PR: #7393
File: apps/admin/app/(all)/(dashboard)/email/email-config-form.tsx:104-104
Timestamp: 2025-07-14T11:22:43.964Z
Learning: In the Plane project's SMTP configuration implementation, the email configuration form (email-config-form.tsx) hardcodes ENABLE_SMTP to "1" in form submission because the form is only rendered when SMTP is enabled. The enable/disable functionality is managed at the page level (page.tsx) with a toggle, and the form only handles configuration details when SMTP is already enabled.
packages/constants/src/issue/common.ts (3)
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
Learnt from: prateekshourya29
PR: #7094
File: web/core/store/user/base-permissions.store.ts:196-201
Timestamp: 2025-05-28T09:53:44.635Z
Learning: All role enums in this codebase (EUserPermissions, EUserWorkspaceRoles, EUserProjectRoles) use the same consistent numeric values: ADMIN = 20, MEMBER = 15, GUEST = 5. None of these enums have a value of 0, so truthy checks work correctly with these enum values.
Learnt from: prateekshourya29
PR: #7094
File: web/core/store/user/base-permissions.store.ts:196-201
Timestamp: 2025-05-28T09:53:44.635Z
Learning: The EUserPermissions enum in this codebase uses numeric values: ADMIN = 20, MEMBER = 15, GUEST = 5. All roles in this enum are always numbers, not string values.
apps/admin/app/(all)/(dashboard)/authentication/google/page.tsx (1)
Learnt from: gakshita
PR: #7393
File: apps/admin/app/(all)/(dashboard)/email/email-config-form.tsx:104-104
Timestamp: 2025-07-14T11:22:43.964Z
Learning: In the Plane project's SMTP configuration implementation, the email configuration form (email-config-form.tsx) hardcodes ENABLE_SMTP to "1" in form submission because the form is only rendered when SMTP is enabled. The enable/disable functionality is managed at the page level (page.tsx) with a toggle, and the form only handles configuration details when SMTP is already enabled.
apps/space/app/[workspaceSlug]/[projectId]/page.ts (2)
Learnt from: prateekshourya29
PR: #7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
packages/ui/src/sortable/sortable.stories.tsx (1)
Learnt from: lifeiscontent
PR: #7164
File: packages/ui/.storybook/main.ts:24-47
Timestamp: 2025-06-04T16:22:44.344Z
Learning: In packages/ui/.storybook/main.ts, the webpackFinal function intentionally overrides the CSS loader strategy by finding and replacing existing CSS rules. This is a temporary workaround for a known upstream issue in Storybook's CSS handling that has been communicated to the Storybook maintainers. The current implementation should not be changed until the upstream issue is resolved.
apps/space/core/store/issue-detail.store.ts (3)
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/workspace/filter.store.ts:135-177
Timestamp: 2025-06-16T07:21:23.688Z
Learning: Try-catch blocks that only re-throw errors (catch (error) { throw error; }) without any additional processing, logging, cleanup, or error transformation are redundant and can be safely removed as the error will naturally propagate up the call stack.
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
Learnt from: prateekshourya29
PR: #7363
File: apps/web/helpers/react-hook-form.helper.ts:9-19
Timestamp: 2025-07-08T13:41:19.928Z
Learning: In the apps/web/helpers/react-hook-form.helper.ts file, the getNestedError function's FieldError detection logic using "message" property check is sufficient for their use case, and more robust type checking is not required.
apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx (1)
Learnt from: prateekshourya29
PR: #7363
File: apps/web/helpers/react-hook-form.helper.ts:9-19
Timestamp: 2025-07-08T13:41:19.928Z
Learning: In the apps/web/helpers/react-hook-form.helper.ts file, the getNestedError function's FieldError detection logic using "message" property check is sufficient for their use case, and more robust type checking is not required.
apps/space/core/components/issues/filters/applied-filters/root.tsx (2)
Learnt from: mathalav55
PR: #6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, ISSUE_DISPLAY_FILTERS_BY_LAYOUT and ISSUE_DISPLAY_FILTERS_BY_PAGE are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
apps/web/app/(all)/accounts/set-password/page.tsx (1)
Learnt from: prateekshourya29
PR: #7363
File: apps/web/helpers/react-hook-form.helper.ts:9-19
Timestamp: 2025-07-08T13:41:19.928Z
Learning: In the apps/web/helpers/react-hook-form.helper.ts file, the getNestedError function's FieldError detection logic using "message" property check is sufficient for their use case, and more robust type checking is not required.
packages/constants/src/issue/layout.ts (1)
Learnt from: mathalav55
PR: #6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, ISSUE_DISPLAY_FILTERS_BY_LAYOUT and ISSUE_DISPLAY_FILTERS_BY_PAGE are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.
apps/web/app/(all)/profile/security/page.tsx (1)
Learnt from: prateekshourya29
PR: #7363
File: apps/web/helpers/react-hook-form.helper.ts:9-19
Timestamp: 2025-07-08T13:41:19.928Z
Learning: In the apps/web/helpers/react-hook-form.helper.ts file, the getNestedError function's FieldError detection logic using "message" property check is sufficient for their use case, and more robust type checking is not required.
packages/constants/src/auth.ts (1)
Learnt from: prateekshourya29
PR: #7363
File: apps/web/helpers/react-hook-form.helper.ts:9-19
Timestamp: 2025-07-08T13:41:19.928Z
Learning: In the apps/web/helpers/react-hook-form.helper.ts file, the getNestedError function's FieldError detection logic using "message" property check is sufficient for their use case, and more robust type checking is not required.
apps/space/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx (1)
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
packages/i18n/src/store/index.ts (1)
Learnt from: janreges
PR: #6743
File: packages/i18n/src/store/index.ts:160-161
Timestamp: 2025-03-11T19:42:41.769Z
Learning: In the Plane project, the file 'packages/i18n/src/store/index.ts' already includes support for Polish language translations with the case "pl".
apps/space/core/components/account/oauth/gitlab-button.tsx (1)
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in core, it's appropriate for files to import them using @/components/..., and the migration to the new import paths is not necessary in such cases.
🧬 Code Graph Analysis (8)
apps/web/app/(all)/create-workspace/page.tsx (1)
packages/types/src/workspace.ts (1)
IWorkspace(14-29)
apps/web/core/components/workspace/create-workspace-form.tsx (1)
packages/types/src/workspace.ts (1)
IWorkspace(14-29)
apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx (1)
packages/utils/src/auth.ts (1)
authErrorHandler(308-369)
apps/space/core/components/issues/filters/applied-filters/root.tsx (1)
packages/constants/src/issue/layout.ts (1)
TIssueLayout(3-3)
apps/web/app/(all)/profile/security/page.tsx (1)
packages/utils/src/auth.ts (1)
authErrorHandler(308-369)
apps/space/core/components/issues/filters/applied-filters/priority.tsx (1)
packages/ui/src/icons/priority-icon.tsx (2)
TIssuePriorities(5-5)PriorityIcon(15-78)
packages/i18n/src/store/index.ts (1)
packages/i18n/src/types/language.ts (1)
TLanguage(1-20)
packages/eslint-config/server.js (2)
packages/eslint-config/next.js (2)
require(1-1)project(2-2)packages/eslint-config/library.js (2)
require(1-1)project(3-3)
💤 Files with no reviewable changes (1)
- .github/workflows/build-test-pull-request.yml
🧰 Additional context used
🧠 Learnings (33)
packages/logger/src/config.ts (2)
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/read.tsx:11-12
Timestamp: 2024-11-28T07:02:15.514Z
Learning: Some components are still in core and have not been moved yet, so their import paths remain the same.
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in core, it's appropriate for files to import them using @/components/..., and the migration to the new import paths is not necessary in such cases.
apps/space/helpers/date-time.helper.ts (1)
Learnt from: prateekshourya29
PR: #7363
File: apps/web/helpers/react-hook-form.helper.ts:9-19
Timestamp: 2025-07-08T13:41:19.928Z
Learning: In the apps/web/helpers/react-hook-form.helper.ts file, the getNestedError function's FieldError detection logic using "message" property check is sufficient for their use case, and more robust type checking is not required.
packages/editor/src/core/types/slash-commands-suggestion.ts (2)
Learnt from: lifeiscontent
PR: #7164
File: packages/ui/.storybook/main.ts:24-47
Timestamp: 2025-06-04T16:22:44.344Z
Learning: In packages/ui/.storybook/main.ts, the webpackFinal function intentionally overrides the CSS loader strategy by finding and replacing existing CSS rules. This is a temporary workaround for a known upstream issue in Storybook's CSS handling that has been communicated to the Storybook maintainers. The current implementation should not be changed until the upstream issue is resolved.
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in core, it's appropriate for files to import them using @/components/..., and the migration to the new import paths is not necessary in such cases.
packages/ui/package.json (2)
Learnt from: lifeiscontent
PR: #7164
File: packages/ui/.storybook/main.ts:24-47
Timestamp: 2025-06-04T16:22:44.344Z
Learning: In packages/ui/.storybook/main.ts, the webpackFinal function intentionally overrides the CSS loader strategy by finding and replacing existing CSS rules. This is a temporary workaround for a known upstream issue in Storybook's CSS handling that has been communicated to the Storybook maintainers. The current implementation should not be changed until the upstream issue is resolved.
Learnt from: vamsikrishnamathala
PR: #7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias @/plane-web resolves to the ce directory, making imports like @/plane-web/hooks/use-notification-preview correctly resolve to files in web/ce/hooks/.
apps/space/core/components/account/oauth/github-button.tsx (1)
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in core, it's appropriate for files to import them using @/components/..., and the migration to the new import paths is not necessary in such cases.
packages/editor/src/core/components/editors/editor-content.tsx (1)
Learnt from: prateekshourya29
PR: #7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
packages/decorators/tsconfig.json (1)
Learnt from: lifeiscontent
PR: #7164
File: packages/ui/.storybook/main.ts:24-47
Timestamp: 2025-06-04T16:22:44.344Z
Learning: In packages/ui/.storybook/main.ts, the webpackFinal function intentionally overrides the CSS loader strategy by finding and replacing existing CSS rules. This is a temporary workaround for a known upstream issue in Storybook's CSS handling that has been communicated to the Storybook maintainers. The current implementation should not be changed until the upstream issue is resolved.
apps/space/core/components/issues/filters/applied-filters/filters-list.tsx (1)
Learnt from: mathalav55
PR: #6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, ISSUE_DISPLAY_FILTERS_BY_LAYOUT and ISSUE_DISPLAY_FILTERS_BY_PAGE are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.
apps/live/src/core/hocuspocus-server.ts (1)
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/workspace/filter.store.ts:135-177
Timestamp: 2025-06-16T07:21:23.688Z
Learning: Try-catch blocks that only re-throw errors (catch (error) { throw error; }) without any additional processing, logging, cleanup, or error transformation are redundant and can be safely removed as the error will naturally propagate up the call stack.
packages/editor/src/core/extensions/mentions/utils.ts (1)
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in core, it's appropriate for files to import them using @/components/..., and the migration to the new import paths is not necessary in such cases.
packages/types/src/issues/issue.ts (1)
Learnt from: mathalav55
PR: #6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, ISSUE_DISPLAY_FILTERS_BY_LAYOUT and ISSUE_DISPLAY_FILTERS_BY_PAGE are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.
packages/types/src/module/modules.ts (1)
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/read.tsx:11-12
Timestamp: 2024-11-28T07:02:15.514Z
Learning: Some components are still in core and have not been moved yet, so their import paths remain the same.
packages/types/src/issues/activity/issue_activity.ts (1)
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/read.tsx:11-12
Timestamp: 2024-11-28T07:02:15.514Z
Learning: Some components are still in core and have not been moved yet, so their import paths remain the same.
apps/space/core/store/profile.store.ts (1)
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/workspace/filter.store.ts:135-177
Timestamp: 2025-06-16T07:21:23.688Z
Learning: Try-catch blocks that only re-throw errors (catch (error) { throw error; }) without any additional processing, logging, cleanup, or error transformation are redundant and can be safely removed as the error will naturally propagate up the call stack.
apps/web/core/components/issues/issue-layouts/quick-add/root.tsx (1)
Learnt from: vamsikrishnamathala
PR: #7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias @/plane-web resolves to the ce directory, making imports like @/plane-web/hooks/use-notification-preview correctly resolve to files in web/ce/hooks/.
packages/editor/tailwind.config.js (2)
Learnt from: lifeiscontent
PR: #7164
File: packages/ui/.storybook/main.ts:24-47
Timestamp: 2025-06-04T16:22:44.344Z
Learning: In packages/ui/.storybook/main.ts, the webpackFinal function intentionally overrides the CSS loader strategy by finding and replacing existing CSS rules. This is a temporary workaround for a known upstream issue in Storybook's CSS handling that has been communicated to the Storybook maintainers. The current implementation should not be changed until the upstream issue is resolved.
Learnt from: vamsikrishnamathala
PR: #7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias @/plane-web resolves to the ce directory, making imports like @/plane-web/hooks/use-notification-preview correctly resolve to files in web/ce/hooks/.
apps/space/core/components/account/auth-forms/password.tsx (1)
Learnt from: gakshita
PR: #7393
File: apps/admin/app/(all)/(dashboard)/email/email-config-form.tsx:104-104
Timestamp: 2025-07-14T11:22:43.964Z
Learning: In the Plane project's SMTP configuration implementation, the email configuration form (email-config-form.tsx) hardcodes ENABLE_SMTP to "1" in form submission because the form is only rendered when SMTP is enabled. The enable/disable functionality is managed at the page level (page.tsx) with a toggle, and the form only handles configuration details when SMTP is already enabled.
packages/i18n/src/hooks/use-translation.ts (1)
Learnt from: janreges
PR: #6743
File: packages/i18n/src/store/index.ts:160-161
Timestamp: 2025-03-11T19:42:41.769Z
Learning: In the Plane project, the file 'packages/i18n/src/store/index.ts' already includes support for Polish language translations with the case "pl".
apps/admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx (1)
Learnt from: gakshita
PR: #7393
File: apps/admin/app/(all)/(dashboard)/email/email-config-form.tsx:104-104
Timestamp: 2025-07-14T11:22:43.964Z
Learning: In the Plane project's SMTP configuration implementation, the email configuration form (email-config-form.tsx) hardcodes ENABLE_SMTP to "1" in form submission because the form is only rendered when SMTP is enabled. The enable/disable functionality is managed at the page level (page.tsx) with a toggle, and the form only handles configuration details when SMTP is already enabled.
packages/constants/src/issue/common.ts (3)
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
Learnt from: prateekshourya29
PR: #7094
File: web/core/store/user/base-permissions.store.ts:196-201
Timestamp: 2025-05-28T09:53:44.635Z
Learning: All role enums in this codebase (EUserPermissions, EUserWorkspaceRoles, EUserProjectRoles) use the same consistent numeric values: ADMIN = 20, MEMBER = 15, GUEST = 5. None of these enums have a value of 0, so truthy checks work correctly with these enum values.
Learnt from: prateekshourya29
PR: #7094
File: web/core/store/user/base-permissions.store.ts:196-201
Timestamp: 2025-05-28T09:53:44.635Z
Learning: The EUserPermissions enum in this codebase uses numeric values: ADMIN = 20, MEMBER = 15, GUEST = 5. All roles in this enum are always numbers, not string values.
apps/admin/app/(all)/(dashboard)/authentication/google/page.tsx (1)
Learnt from: gakshita
PR: #7393
File: apps/admin/app/(all)/(dashboard)/email/email-config-form.tsx:104-104
Timestamp: 2025-07-14T11:22:43.964Z
Learning: In the Plane project's SMTP configuration implementation, the email configuration form (email-config-form.tsx) hardcodes ENABLE_SMTP to "1" in form submission because the form is only rendered when SMTP is enabled. The enable/disable functionality is managed at the page level (page.tsx) with a toggle, and the form only handles configuration details when SMTP is already enabled.
apps/space/app/[workspaceSlug]/[projectId]/page.ts (2)
Learnt from: prateekshourya29
PR: #7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
packages/ui/src/sortable/sortable.stories.tsx (1)
Learnt from: lifeiscontent
PR: #7164
File: packages/ui/.storybook/main.ts:24-47
Timestamp: 2025-06-04T16:22:44.344Z
Learning: In packages/ui/.storybook/main.ts, the webpackFinal function intentionally overrides the CSS loader strategy by finding and replacing existing CSS rules. This is a temporary workaround for a known upstream issue in Storybook's CSS handling that has been communicated to the Storybook maintainers. The current implementation should not be changed until the upstream issue is resolved.
apps/space/core/store/issue-detail.store.ts (3)
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/workspace/filter.store.ts:135-177
Timestamp: 2025-06-16T07:21:23.688Z
Learning: Try-catch blocks that only re-throw errors (catch (error) { throw error; }) without any additional processing, logging, cleanup, or error transformation are redundant and can be safely removed as the error will naturally propagate up the call stack.
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
Learnt from: prateekshourya29
PR: #7363
File: apps/web/helpers/react-hook-form.helper.ts:9-19
Timestamp: 2025-07-08T13:41:19.928Z
Learning: In the apps/web/helpers/react-hook-form.helper.ts file, the getNestedError function's FieldError detection logic using "message" property check is sufficient for their use case, and more robust type checking is not required.
apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx (1)
Learnt from: prateekshourya29
PR: #7363
File: apps/web/helpers/react-hook-form.helper.ts:9-19
Timestamp: 2025-07-08T13:41:19.928Z
Learning: In the apps/web/helpers/react-hook-form.helper.ts file, the getNestedError function's FieldError detection logic using "message" property check is sufficient for their use case, and more robust type checking is not required.
apps/space/core/components/issues/filters/applied-filters/root.tsx (2)
Learnt from: mathalav55
PR: #6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, ISSUE_DISPLAY_FILTERS_BY_LAYOUT and ISSUE_DISPLAY_FILTERS_BY_PAGE are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
apps/web/app/(all)/accounts/set-password/page.tsx (1)
Learnt from: prateekshourya29
PR: #7363
File: apps/web/helpers/react-hook-form.helper.ts:9-19
Timestamp: 2025-07-08T13:41:19.928Z
Learning: In the apps/web/helpers/react-hook-form.helper.ts file, the getNestedError function's FieldError detection logic using "message" property check is sufficient for their use case, and more robust type checking is not required.
packages/constants/src/issue/layout.ts (1)
Learnt from: mathalav55
PR: #6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, ISSUE_DISPLAY_FILTERS_BY_LAYOUT and ISSUE_DISPLAY_FILTERS_BY_PAGE are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.
apps/web/app/(all)/profile/security/page.tsx (1)
Learnt from: prateekshourya29
PR: #7363
File: apps/web/helpers/react-hook-form.helper.ts:9-19
Timestamp: 2025-07-08T13:41:19.928Z
Learning: In the apps/web/helpers/react-hook-form.helper.ts file, the getNestedError function's FieldError detection logic using "message" property check is sufficient for their use case, and more robust type checking is not required.
packages/constants/src/auth.ts (1)
Learnt from: prateekshourya29
PR: #7363
File: apps/web/helpers/react-hook-form.helper.ts:9-19
Timestamp: 2025-07-08T13:41:19.928Z
Learning: In the apps/web/helpers/react-hook-form.helper.ts file, the getNestedError function's FieldError detection logic using "message" property check is sufficient for their use case, and more robust type checking is not required.
apps/space/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx (1)
Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.
packages/i18n/src/store/index.ts (1)
Learnt from: janreges
PR: #6743
File: packages/i18n/src/store/index.ts:160-161
Timestamp: 2025-03-11T19:42:41.769Z
Learning: In the Plane project, the file 'packages/i18n/src/store/index.ts' already includes support for Polish language translations with the case "pl".
apps/space/core/components/account/oauth/gitlab-button.tsx (1)
Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in core, it's appropriate for files to import them using @/components/..., and the migration to the new import paths is not necessary in such cases.
🧬 Code Graph Analysis (8)
apps/web/app/(all)/create-workspace/page.tsx (1)
packages/types/src/workspace.ts (1)
IWorkspace(14-29)
apps/web/core/components/workspace/create-workspace-form.tsx (1)
packages/types/src/workspace.ts (1)
IWorkspace(14-29)
apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx (1)
packages/utils/src/auth.ts (1)
authErrorHandler(308-369)
apps/space/core/components/issues/filters/applied-filters/root.tsx (1)
packages/constants/src/issue/layout.ts (1)
TIssueLayout(3-3)
apps/web/app/(all)/profile/security/page.tsx (1)
packages/utils/src/auth.ts (1)
authErrorHandler(308-369)
apps/space/core/components/issues/filters/applied-filters/priority.tsx (1)
packages/ui/src/icons/priority-icon.tsx (2)
TIssuePriorities(5-5)PriorityIcon(15-78)
packages/i18n/src/store/index.ts (1)
packages/i18n/src/types/language.ts (1)
TLanguage(1-20)
packages/eslint-config/server.js (2)
packages/eslint-config/next.js (2)
require(1-1)project(2-2)packages/eslint-config/library.js (2)
require(1-1)project(3-3)
🔇 Additional comments (104)
packages/editor/src/core/extensions/table/table/table-controls.ts (1)
21-21: LGTM! Unused parameter removal improves code quality.The removal of the unused
directparameter from thehandleTripleClickOnfunction signature aligns with the PR's linting improvements. The function's core logic remains intact and continues to properly handle triple-click events on table cells.apps/space/core/components/issues/issue-layouts/list/base-list-root.tsx (1)
44-44: LGTM! Correct exhaustive-deps fix.Adding
anchorto the dependency array is the right fix since the callback uses this value. This ensures the callback updates whenanchorchanges, preventing stale closure issues.apps/space/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx (1)
40-40: LGTM! Comprehensive exhaustive-deps fix.Adding both
anchorandgetIssueLoaderto the dependency array correctly addresses the ESLint warning. The callback uses both values, so they must be included to prevent stale closure issues.packages/decorators/tsconfig.json (1)
13-13: LGTM! Resolves ESLint/TSConfig configuration conflict.The inclusion of root-level TypeScript files is necessary to resolve the configuration conflict mentioned in previous discussions. This change ensures all relevant TypeScript files are properly included in the compilation scope.
packages/decorators/src/controller.ts (1)
19-19: Excellent type safety improvement.Changing from
any[]tounknown[]in the constructor signature provides better type safety while maintaining compatibility. This aligns with TypeScript best practices by requiring proper type checking before usage.packages/decorators/src/websocket.ts (1)
9-9: Good cleanup - removing unused parameter.Removing the unused
descriptor: PropertyDescriptorparameter simplifies the decorator signature while maintaining full functionality. The decorator correctly sets metadata using onlytargetandpropertyKey.packages/decorators/src/websocket-controller.ts (3)
10-10: Consistent type safety improvement.The constructor signature change from
any[]tounknown[]maintains consistency with the similar improvement incontroller.tsand enhances type safety.
37-38: Improved runtime safety with better method checking.The enhanced check first verifies the existence of the
wsproperty before checking its type. This prevents potential runtime errors ifrouter.wsis undefined and makes the code more defensive.
40-53: Robust WebSocket error handling implementation.The error handling in the WebSocket handler is comprehensive, including proper error logging, graceful WebSocket closure with appropriate error codes, and fallback error messages. This ensures WebSocket connections are properly managed even when handler methods throw exceptions.
packages/decorators/src/rest.ts (3)
13-13: Appropriate ESLint suppression for class decorator context.The ESLint directive suppressing the unsafe function type warning is justified here, as the
Functiontype is appropriate for a class decorator that needs to work with any constructor function.
28-28: Consistent parameter cleanup in method decorators.Removing the unused
PropertyDescriptorparameter aligns with similar cleanups in other decorator files and simplifies the function signature while maintaining full decorator functionality.
48-48: Good cleanup - removing unused parameter in Middleware decorator.The removal of the unused
PropertyDescriptorparameter is consistent with other decorator simplifications in this PR and improves code clarity without affecting functionality.packages/constants/src/settings.ts (1)
1-1: Import-path clarification looks correctPointing explicitly to
"./profile"instead of"."removes any ambiguity and prevents silent resolution toindex.tsshould one appear in the folder later on.packages/logger/src/config.ts (1)
1-1: Import reorder is harmlessBringing the built-in
pathimport to the top complies with our “node-built-ins first” lint rule. No functional impact.packages/editor/src/core/types/slash-commands-suggestion.ts (1)
2-2: OK – style-only changeMoving the
reacttype import below third-party imports is consistent with the updated ESLint ordering rule.apps/space/core/components/account/oauth/gitlab-button.tsx (1)
3-3: Consistent import grouping achievedImport order now matches the sibling OAuth button components – keeps lint happy and improves diff readability.
packages/types/src/issues/activity/issue_activity.ts (1)
1-3: Import reorder looks goodThe re-ordering improves grouping (external vs. local) without changing the public surface. 👍
apps/space/core/components/account/oauth/github-button.tsx (1)
3-3: Import-order change looks goodAlphabetical / framework-first ordering keeps diffs minimal. No other action needed.
apps/web/core/components/workspace/settings/members-list.tsx (1)
50-52: LGTM – indentation tweak onlyIndentation now matches adjacent declarations; no functional impact.
packages/ui/src/sortable/sortable.tsx (1)
2-2: Import re-ordering complies with lint rulesMoving React after third-party import resolves the eslint
import/orderrule. No concerns.packages/editor/package.json (1)
27-27: Raising--max-warningsto 30 risks masking new issuesAccepting 30 warnings unblocks CI, but it also lowers quality gates.
Recommend adding a follow-up ticket to ratchet this value back down incrementally, or enforce@typescript-eslint/no-explicit-any, etc., in new/changed files.apps/space/core/components/account/oauth/google-button.tsx (1)
3-3: Import reordering looks good.The reordering of the
useSearchParamsimport aligns with the broader import organization improvements across the codebase.packages/propel/package.json (1)
7-7: Lint warning threshold adjustment aligns with PR objectives.Increasing the maximum warnings from 0 to 7 follows the stated strategy of setting thresholds to current levels to enable CI lint checks without allowing issues to worsen.
packages/types/src/dashboard.ts (1)
5-5: Import reordering improves code organization.The reordering of the
TStateGroupsimport maintains consistency with the broader import organization improvements across the codebase.packages/types/src/issues/activity/issue_comment.ts (1)
1-4: Excellent cleanup of duplicate imports.Consolidating the duplicate import statements into a single block at the top improves code maintainability and eliminates redundancy without affecting functionality.
packages/editor/src/core/extensions/mentions/utils.ts (1)
6-7: LGTM! Import organization improvement.Moving the helper imports together improves code organization and readability without affecting functionality.
apps/space/core/store/profile.store.ts (1)
94-94: LGTM! Proper handling of unused catch parameters.Renaming catch parameters to
_errorcorrectly indicates they are intentionally unused while preserving meaningful error handling logic.Also applies to: 121-121
packages/hooks/package.json (1)
16-16: LGTM! Pragmatic approach to enable linting in CI.Increasing max-warnings to 6 allows existing lint issues while preventing regression, aligning with the PR's strategy to enable CI linting without blocking development.
apps/space/core/hooks/use-intersection-observer.tsx (1)
21-24: Minor style-only change – looks good
The explicitifcheck is clearer than the short-circuit call; no functional impact.apps/space/package.json (1)
67-68: Confirm plugin ↔ typescript compatibility
@typescript-eslint/eslint-plugin@8.36.0targets TypeScript ≥ 5.3. You’re on TS 5.8.3, which is compatible, but make sure all workspaces use a consistent plugin/runtime pair to avoid parser mismatches.apps/live/src/ce/types/common.d.ts (1)
1-1: TAdditionalDocumentTypes safely restricted to neverI’ve verified all usages of
TAdditionalDocumentTypes—it only feeds intoTDocumentTypes(effectively collapsing to"project_page"), which is consumed in:
apps/live/src/ce/lib/fetch-document.tsapps/live/src/ce/lib/update-document.tsapps/live/src/core/extensions/index.tsNone of these rely on any additional values, so the tighter
neverdefinition won’t break existing behavior. This change is safe to merge.apps/web/app/(all)/onboarding/page.tsx (1)
48-50: Good refactoring for improved readability.Converting the short-circuit evaluation to an explicit
ifstatement improves code clarity without changing the logic. This makes the conditional execution more explicit and easier to understand.packages/editor/src/core/extensions/code/lowlight-plugin.ts (1)
121-133: Excellent TypeScript best practice improvement.Converting
@ts-ignoreto@ts-expect-erroris a good practice that provides better type safety. Unlike@ts-ignore,@ts-expect-errorwill cause a lint error if the underlying type issues are resolved, helping maintain code quality over time.packages/constants/src/issue/layout.ts (2)
17-17: Good type safety improvement.Changing the
iconproperty type fromanytostringimproves type safety and aligns with the broader type refinement efforts across the codebase.
14-29: Removal of non-List/Kanban layouts from SITES_ISSUE_LAYOUTS is safe
Verified thatSITES_ISSUE_LAYOUTSis only imported in
apps/space/core/components/issues/navbar/layout-selection.tsx
and that removing"calendar","spreadsheet", and"gantt"merely hides those buttons in the layout selector. All calendar, spreadsheet, and Gantt view logic (loaders, HOCs, filters) use separate constants and code paths and remain untouched. No other references toSITES_ISSUE_LAYOUTSexist in the codebase.apps/space/core/components/account/auth-forms/password.tsx (1)
112-114: LGTM! Explicit conditional improves clarity.The refactor from short-circuit evaluation to an explicit
ifstatement makes the intent clearer and aligns with the broader linting improvements in this PR.apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/mobile-header.tsx (1)
5-5: Excellent type safety improvement!Replacing the generic
anytype with the specificLucideIcontype provides better type safety and IntelliSense support.Also applies to: 14-14
apps/space/core/store/issue-detail.store.ts (1)
197-197: Consistent error parameter naming follows linting conventions.Renaming catch block error parameters to
_errorclearly indicates these errors are intentionally unused, aligning with ESLint conventions and the broader linting improvements in this PR.Also applies to: 225-225, 291-291, 325-325, 359-359, 379-379, 411-411, 432-432
apps/space/app/[workspaceSlug]/[projectId]/page.ts (2)
13-13: Improved type safety for search parameters.The refined type annotation clearly documents the expected query parameters and provides better type safety compared to the generic
anytype.
26-26: Good addition of error logging for debugging.Adding console.error before
notFound()improves debugging by providing visibility into what errors cause the 404 response.packages/editor/src/core/extensions/table/table/table-view.tsx (2)
149-149: LGTM! Excellent type safety improvement.The change from
(args: any) => {}to(_args: unknown) => {}improves type safety by replacinganywithunknownand uses the underscore prefix to indicate intentional non-use of the parameter, which aligns with the updated ESLint rules.Also applies to: 177-177
218-218: LGTM! Proper handling of unused destructured parameter.The change from
[colorName, colorValue]to[_, colorValue]correctly indicates that the color name is intentionally unused, which aligns with the linting rule updates and improves code clarity.packages/logger/package.json (1)
10-16: LGTM! Modern package configuration improvement.The addition of the
exportsfield is an excellent enhancement that provides explicit control over package entry points for different module systems. This aligns with modern Node.js best practices and ensures proper module resolution for both ESM and CommonJS consumers.packages/editor/src/core/extensions/custom-image/components/upload-status.tsx (1)
55-55: LGTM! Correct dependency array fix.Adding
displayStatusto the dependency array fixes a React Hooks rule violation sincedisplayStatusis used within the effect callback. This ensures the animation effect properly restarts when the display status changes, preventing stale closure issues.apps/live/src/core/services/api.service.ts (1)
39-39: LGTM! Excellent type safety improvement.The type refinement from
anytoRecord<string, unknown> | null | stringsignificantly improves type safety by restricting thedataparameter to specific, meaningful types while maintaining flexibility for common HTTP DELETE request patterns.packages/eslint-config/library.js (1)
43-50: LGTM! Smart ESLint rule enhancement.The enhanced configuration for
@typescript-eslint/no-unused-varsis excellent - it maintains the warning level while providing sensible exceptions for intentionally unused variables, arguments, and caught errors prefixed with_. This supports the common pattern of indicating intentional non-use and aligns perfectly with the code changes throughout this PR.package.json (3)
19-19: Nice targeted CI lint scriptThe
ci:lintcommand cleanly scopes outapps/web, matching the PR narrative. 👍
24-24: Confirm lockfile update after Turbo bumpUpgrading
turbofrom2.5.4→2.5.5is safe, but make sureyarn.lock(orpnpm-lock.yaml) reflects the new version so CI reproduces the change.
35-36: Pinning@types/expressto avoid TS drift looks goodapps/live/.env.example (1)
1-1: Port variable addition looks good
PORT=3100aligns withLIVE_BASE_URLand avoids hard-coding in code. No issues spotted.packages/types/src/issues/issue.ts (1)
2-2: Pure import-order shuffle – no functional impact
Change keeps style linters happy. 👍packages/types/src/module/modules.ts (1)
1-1: Import reorder only — nothing else changed, safe to merge.packages/types/src/workspace-notifications.ts (1)
2-2: Import reorder only — LGTM.packages/types/src/users.ts (1)
1-2: Import-order tweak looks goodThe reorder aligns with the prevailing style in sibling files and keeps enum imports grouped separately. No further action required.
apps/web/core/components/issues/issue-layouts/quick-add/root.tsx (1)
9-10: Whitespace cleanup acknowledgedPure formatting; no functional impact. 👍
packages/ui/package.json (2)
20-20: LGTM: Lint threshold adjustment aligns with PR objectives.The increase to 94 max warnings is consistent with the PR's goal of setting thresholds to current levels to enable CI lint checks without allowing regression.
40-40: Good addition: Enhanced type safety with @plane/types dependency.Adding the @plane/types dependency will improve type consistency across the UI package and support better type safety throughout the codebase.
apps/web/core/components/issues/issue-layouts/list/list-group.tsx (1)
8-8: LGTM: Clean import formatting.Removed extra whitespace in the import statement, improving code consistency.
apps/web/core/components/issues/issue-layouts/kanban/kanban-group.tsx (1)
9-9: LGTM: Consistent import formatting improvement.Removed extra whitespace in the import statement, maintaining consistency with similar fixes across issue layout components.
apps/admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx (1)
69-73: LGTM: Improved readability with explicit conditional logic.Refactoring the ternary operator to an explicit if-else statement makes the toggle logic clearer and more maintainable.
apps/web/app/(all)/create-workspace/page.tsx (2)
33-33: Excellent: Enhanced type safety with explicit generic type annotation.Adding the explicit
Pick<IWorkspace, "name" | "slug" | "organization_size">type annotation improves type safety and clearly documents which workspace properties are managed by this state.
104-104: Good: Removed unsafe type casting.Passing
setDefaultValuesdirectly without casting toanypreserves proper type checking and maintains type safety throughout the component hierarchy.packages/ui/src/icons/priority-icon.tsx (1)
5-5: Good type safety improvement!Exporting
TIssuePrioritiesenables better type consistency across the codebase by allowing other components to import this type instead of duplicating it or using less specific types likestring[].apps/live/package.json (2)
13-13: Lint threshold increase aligns with PR objectives.The change from
--max-warnings 0to--max-warnings 10aligns with the PR's goal of allowing existing lint warnings while preventing the situation from worsening.
62-63: Dependencies are valid
TypeScript 5.8.3 is a published release on npm, and the ws package is actively used in apps/live/src/server.ts and apps/live/src/core/hocuspocus-server.ts. No further action is required.apps/admin/app/(all)/(dashboard)/authentication/google/page.tsx (1)
70-74: Good readability improvement!The refactor from inline ternary to explicit if-else statement improves code readability while maintaining the exact same logic. This change aligns with linting best practices for handling complex conditional operations.
packages/editor/tailwind.config.js (1)
1-6: Good module syntax modernization!The conversion from CommonJS (
require/module.exports) to ES module syntax (import/export default) modernizes the code while preserving the exact same functionality. This aligns with current JavaScript/TypeScript best practices.packages/utils/src/string.ts (3)
251-253: Good error handling variable naming!The rename from
errto_erraligns with the updated ESLint configuration that ignores unused variables prefixed with underscore. This is a best practice when catching errors that aren't actually used in the error handling logic.
280-282: Consistent error variable naming!Same improvement as in the
substringMatchfunction - renaming to_errindicates the error is intentionally unused and aligns with the project's linting standards.
1-349: Removal ofobjToQueryParamsis SafeNo occurrences of
objToQueryParamswere found anywhere in the codebase—including direct usage or imports from@plane/utils/.../string. You can safely remove this function without breaking existing code.apps/web/app/(all)/accounts/set-password/page.tsx (1)
98-99: Excellent type safety improvement in error handling.The change from implicit
anyto explicitunknownwith targeted type casting follows TypeScript best practices for error handling. This maintains the same runtime behavior while enforcing more explicit type handling.packages/i18n/src/hooks/use-translation.ts (1)
8-8: Good type safety improvement for translation parameters.Changing from
Record<string, any>toRecord<string, unknown>improves type safety by removing the overly permissiveanytype while maintaining compatibility.packages/constants/src/analytics/common.ts (1)
9-11: Well-structured interface improvement.Adding explicit optional properties (
prefix,suffix) and changing the index signature fromanytounknownimproves both type safety and API documentation. The interface now clearly indicates expected properties while maintaining flexibility.apps/space/core/components/issues/filters/applied-filters/priority.tsx (3)
4-4: Excellent import of specific priority type.Importing the specific
TIssuePrioritiestype from@plane/uienables stronger typing throughout the component.
8-8: Strong typing improvement for values prop.Changing from generic
string[]to specificTIssuePriorities[]provides better type safety and prevents invalid priority values from being passed.
20-20: Removed unnecessary type assertion.With proper typing in place, the type assertion
as anyis no longer needed. Thepriorityparameter is now correctly typed asTIssuePriorities.packages/editor/src/core/types/editor.ts (1)
114-114: More precise typing for scroll behavior parameter.Narrowing the
behaviorparameter from genericScrollBehaviorto the specific union"auto" | "smooth" | "instant"improves type safety and makes the supported values explicit. This aligns the interface with the actual implementation.apps/web/core/components/workspace/create-workspace-form.tsx (1)
32-32: Excellent type refinement for better type safety.The narrowing of
setDefaultValuesfrom accepting the fullIWorkspaceobject to only the specific properties used in the form ("name" | "slug" | "organization_size") is a great improvement. This change ensures type consistency with thedefaultValuesprop and prevents incorrect usage of the setter with irrelevant properties.packages/constants/src/auth.ts (2)
1-2: Good addition of ReactNode import for improved type safety.Adding the ReactNode import supports the type refinement of the message properties below.
75-75: Excellent type safety improvement.Changing the
messageproperty type fromanytostring | ReactNodein bothTAuthErrorInfoandTAdminAuthErrorInfotypes significantly improves type safety. This allows for both string messages and React elements while eliminating the unsafeanytype.Also applies to: 95-95
apps/web/app/(all)/profile/security/page.tsx (2)
17-17: Good addition of EAuthenticationErrorCodes type import.This supports the improved type safety in the error handling logic below.
90-94: Excellent error handling improvements with better type safety.The changes demonstrate several best practices:
- Using
unknowninstead ofanyfor catch parameters- Explicit and safe type casting to
Error & { error_code?: string }- Conditional error code handling to prevent issues when
error_codeis undefined- Safe property access using optional chaining in the toast notification
These improvements align perfectly with the PR's goal of enhancing type safety across the codebase.
packages/ui/src/sortable/sortable.stories.tsx (3)
12-13: Great type safety improvements with explicit StoryItem type.Defining an explicit
StoryItemtype and making theStorytype generic over it significantly improves type safety and makes the story more self-documenting.
25-25: Good replacement of any type with explicit StoryItem type.Changing the render function parameter from
anyto the explicitStoryItemtype improves type safety and provides better IntelliSense support.
30-31: Excellent removal of unnecessary any type annotations.Removing the explicit
anytype annotations and relying on TypeScript's type inference is a better practice that maintains type safety while reducing code verbosity.apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx (2)
17-17: Good addition of EAuthenticationErrorCodes type import.This supports the improved type safety in the error handling logic below.
90-94: Excellent consistent error handling improvements.The error handling improvements here mirror those in
apps/web/app/(all)/profile/security/page.tsx, demonstrating good consistency across similar components:
- Using
unknowninstead ofanyfor catch parameters- Safe type casting and conditional error code handling
- Proper use of optional chaining for safe property access
This consistency enhances maintainability and aligns with the PR's type safety objectives.
packages/eslint-config/next.js (1)
42-49: LGTM! Good configuration for handling intentionally unused variables.The updated
@typescript-eslint/no-unused-varsrule configuration properly allows unused variables, arguments, and caught errors that start with an underscore while still warning about genuinely unused identifiers. This is a standard pattern for indicating intentionally unused variables and aligns well with the PR's objective of addressing linting issues.packages/editor/src/core/helpers/scroll-to-node.ts (1)
35-39: LGTM! Improved type safety and readability.The function signature refactor provides two improvements:
- Multi-line format enhances readability
- Narrowing the
behaviorparameter type from genericScrollBehaviorto the explicit union"auto" | "smooth" | "instant"improves type safety and prevents potential runtime errors with invalid scroll behavior values.apps/space/core/components/issues/filters/applied-filters/root.tsx (2)
10-10: Good addition of type import for better type safety.Adding the
TIssueLayouttype import enables proper typing of theboardproperty in the query parameters object, improving type safety.
42-56: Excellent refactor improving type safety and readability.The refactoring provides several improvements:
- Type Safety: Replaced the
anytypedparamsvariable with a properly typed object having explicit optional properties- Readability: Direct property assignments are clearer than repeated object spreading operations
- Explicitness: Using native
URLSearchParamsinstead of a utility function makes the query string construction more transparent- Maintainability: The typed structure makes it easier to understand and modify the expected query parameters
The functional behavior remains identical while significantly improving code quality.
.github/workflows/pull-request-build-lint-web-apps.yml (1)
1-14: Well-structured workflow with appropriate triggers.The workflow configuration properly targets web app changes with good file type filters and excludes API files. The trigger conditions are appropriate for the intended scope.
packages/editor/src/core/components/links/link-edit-view.tsx (3)
46-50: Good refactoring to centralize link removal logic.The
removeLinkcallback properly encapsulates the link removal functionality with correct dependencies and clean separation of concerns.
65-65: Correct dependency array for the cleanup effect.The updated dependencies
[removeLink, linkRemoved, initialUrl]properly reflect the values used within the effect callback.
114-114: Improved dependency array addresses previous review concern.The updated dependencies correctly include
positionRefas a stable reference rather than its individual properties, which resolves the previous review comment about potential unnecessary re-renders.packages/i18n/src/store/index.ts (4)
139-139: Good type safety improvement by removing explicitanyannotations.Removing the
Promise<any>return type annotations allows TypeScript to infer the correct types, improving type safety without affecting functionality.Also applies to: 156-156
190-190: Enhanced type safety with precise message validation.The strict string type check
typeof message !== "string"ensures only valid string messages are processed, preventing potential runtime errors with non-string values.
193-193: Excellent removal of unsafe type casting.Removing the
as anycast improves type safety now that the message is guaranteed to be a string through the previous validation check.
210-210: Type safety improvement withunknownoverany.Changing the parameter type to
Record<string, unknown>enhances type safety by requiring explicit type checking, following TypeScript best practices.packages/eslint-config/server.js (5)
1-2: Proper path resolution setup for TypeScript integration.The path resolution using
node:pathand resolving totsconfig.jsonfollows the established pattern in other ESLint configs and correctly supports TypeScript configuration.
5-5: Enhanced linting configuration with TypeScript and Prettier integration.The updated extends configuration properly integrates Prettier formatting and TypeScript-specific linting rules, following modern best practices.
10-17: Correct TypeScript plugin and import resolver configuration.The plugin configuration and TypeScript import resolver setup will properly handle module resolution and enable TypeScript-aware linting rules.
18-18: Appropriate ignore patterns for ESLint.The ignore patterns correctly exclude hidden JavaScript files and node_modules, following ESLint best practices to avoid linting generated or third-party code.
23-33: Well-configured TypeScript linting rules.The TypeScript rules appropriately warn about explicit
anyusage while allowing unused variables prefixed with underscore, which is a common convention for intentionally unused parameters and follows the PR objectives.
| import { observer } from "mobx-react"; | ||
| // ui | ||
| import { GanttChartSquare, LayoutGrid, List } from "lucide-react"; | ||
| import { GanttChartSquare, LayoutGrid, List, type LucideIcon } from "lucide-react"; |
There was a problem hiding this comment.
import type is preferred because type thing can cause module resolution issues and end up creating references to files causing cycles
There was a problem hiding this comment.
i'll address in a follow up PR b/c this needs to be addressed in the eslint rules which will cause hundreds of more changes, too much for this PR.
apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx
Outdated
Show resolved
Hide resolved
de6bd22 to
b414b6e
Compare
Ensure we can build + confirm that lint is not getting worse.
| (step) => | ||
| // eslint-disable-next-line @typescript-eslint/ban-ts-comment | ||
| // @ts-ignore | ||
| // @ts-expect-error |
There was a problem hiding this comment.
@aaryan610 We changed this from ts-expect-error to ts-ignore in the past right?
Please verify if this requires any testing.
| } | ||
| }; | ||
| }, [uploadStatus]); | ||
| }, [displayStatus, uploadStatus]); |
There was a problem hiding this comment.
Change in useEffect Dependencies will have unnecessary rerendering affects. @aaryan610 Please take a look at this.
| }, | ||
| }), | ||
| [editor] | ||
| [editor, provider] |
| onStateChange: (callback: () => void) => () => void; | ||
| // eslint-disable-next-line no-undef | ||
| scrollToNodeViaDOMCoordinates: (behavior?: ScrollBehavior, position?: number) => void; | ||
| scrollToNodeViaDOMCoordinates: (behavior?: "auto" | "smooth" | "instant", position?: number) => void; |
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
apps/web/package.json (1)
11-11: Hard-coding--max-warnings 821effectively disables lint gatingBumping the threshold from 0 to 821 means new warnings can silently creep in until the codebase hits that cap, undermining the whole “fail-fast” intent of the lint stage. Consider an incremental strategy instead:
- "check:lint": "eslint . --max-warnings 821", + # Allow current debt, but fail on *any* new warnings introduced in the diff. + "check:lint": "eslint . --max-warnings $(node scripts/eslint-baseline.js)",where
eslint-baseline.jsoutputs the baseline count captured once in CI. This lets the pipeline block on regressions while giving the team time to pay down the backlog.At minimum, add a TODO with a plan to drive this number back to 0.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
apps/web/.eslintignore(1 hunks)apps/web/package.json(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- apps/web/.eslintignore
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: lifeiscontent
PR: makeplane/plane#7004
File: tests/integration-tests/tests/auth.setup.ts:11-14
Timestamp: 2025-06-06T19:03:04.891Z
Learning: When setting up Playwright authentication for integration tests, use multiple authentication setups (admin.setup.ts, user.setup.ts, logged-out.setup.ts) with separate projects in playwright.config.ts rather than a single shared authentication state. This prevents architectural debt and makes it easier to test different user roles and logged-out scenarios.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: Analyze (javascript)
- GitHub Check: build-and-lint
* chore: fix lint * fix: constants check:lint command * chore(lint): permit unused vars which begin w/ _ * chore: rm dead code * fix(lint): more lint fixes to constants pkg * fix(lint): lint the live server - fix lint issues * chore: improve clean script * fix(lint): more lint * chore: set live server process title * chore(deps): update to turbo@2.5.5 * chore(live): target node22 * fix(dev): add missing ui pkg dependency * fix(dev): lint decorators * fix(dev): lint space app * fix(dev): address lint issues in types pkg * fix(dev): lint editor pkg * chore(dev): moar lint * fix(dev): live server exit code * chore: address PR feedback * fix(lint): better TPageExtended type * chore: refactor * chore: revert most live server changes * fix: few more lint issues * chore: enable ci checks Ensure we can build + confirm that lint is not getting worse. * chore: address PR feedback * fix: web lint warning added to package.json * fix: ci:lint command --------- Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
Description
Why
Spend less time manually fixing builds and bugs by preventing many of those problems from landing in this repository.
What
_liveserver env var--max-warningsto current levels to support running these in CI while preventing these issues from worsening*Due to the large number of lint errors inapps/weband to prevent this PR from becoming too large, I have excludedapps/webfrom these new CI checks. We will need to address those issues in a follow up PR before re-enabling lint for that app during CI. I'm choosing shipping improvements over being perfect.Type of Change
Test Scenarios
yarn clean && yarn install && yarn devsuccessfullySummary by CodeRabbit
New Features
.nvmrc.Bug Fixes
any.Refactor
Chores
Documentation
Style
Summary by CodeRabbit
Chores
Refactor
anywith stricter types, refining prop types, and removing redundant or unused code.Bug Fixes
New Features
.nvmrcfile to specify the Node.js version for development environments.Documentation
Style