-
Notifications
You must be signed in to change notification settings - Fork 2.9k
feat: eslint #8185
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: preview
Are you sure you want to change the base?
feat: eslint #8185
Conversation
|
Note Other AI code review bot(s) detectedCodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review. WalkthroughAdds centralized ESLint v9 config, consolidates Prettier configuration and ignores, migrates package lint/format scripts to pnpm exec, removes many per-package ESLint/Prettier files, normalizes TypeScript path mappings, introduces Husky pre-commit hook to run pnpm lint-staged, and updates root devDependencies and lint-staged config. Changes
Sequence Diagram(s)sequenceDiagram
participant Dev as Developer
participant Git as Git
participant Husky as Husky (pre-commit)
participant LintStaged as lint-staged (pnpm)
participant ESLint as ESLint (eslint.config.mjs)
participant Prettier as Prettier (.prettierrc)
Dev->>Git: git commit (staged files)
Git->>Husky: trigger pre-commit hook
Husky->>LintStaged: run `pnpm lint-staged`
LintStaged->>ESLint: run eslint on staged files
ESLint-->>LintStaged: lint results (pass/fail)
LintStaged->>Prettier: run prettier on staged files
Prettier-->>LintStaged: format results
LintStaged-->>Husky: success / failure
alt success
Husky->>Git: allow commit
else failure
Husky->>Dev: surface errors, block commit
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Focus areas:
Poem
Pre-merge checks and finishing touches❌ Failed checks (2 warnings, 1 inconclusive)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
6944e1c to
c163ad5
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR introduces a comprehensive ESLint setup to the monorepo, migrating from a legacy @plane/eslint-config package to a modern flat config approach with ESLint 9. The changes include adding numerous linting tools, removing outdated configuration files, and setting up git hooks for automated code quality checks.
Key Changes
- Migrated from ESLint 8 (legacy config) to ESLint 9 (flat config) with
eslint.config.mjs - Added comprehensive linting plugins including TypeScript, React, accessibility, and code quality tools
- Removed the
@plane/eslint-configpackage and all local.eslintrc.*files across packages - Introduced Husky and lint-staged for pre-commit hooks
- Centralized Prettier configuration and removed
@prettier/plugin-oxc - Updated all package scripts to use
pnpm execand adjusted max-warnings thresholds
Reviewed changes
Copilot reviewed 108 out of 109 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
eslint.config.mjs |
New root ESLint flat config with comprehensive rules for TypeScript, React, accessibility, and code quality |
prettier.config.cjs |
Centralized Prettier configuration with custom override for codemods |
package.json |
Added ESLint 9, plugins, husky, lint-staged; configured pre-commit hooks |
turbo.json |
Added new lint task and updated check:lint with better file patterns |
pnpm-lock.yaml |
Updated dependencies including ESLint 9 and all related plugins |
packages/*/package.json |
Removed @plane/eslint-config dependency, updated script commands with pnpm exec |
packages/*/.eslintrc.* |
Removed all legacy ESLint config files |
packages/*/.prettierrc |
Removed local Prettier configs in favor of root config |
packages/eslint-config/* |
Removed entire deprecated ESLint config package |
| Various TypeScript configs | Updated paths, removed unnecessary baseUrl, added composite settings |
| Service exports | Added explicit named exports for better compatibility |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review for a chance to win a $100 gift card. Take the survey.
eslint.config.mjs
Outdated
| import reactRefreshPlugin from "eslint-plugin-react-refresh"; | ||
| import unicornPlugin from "eslint-plugin-unicorn"; | ||
| import vitestPlugin from "@vitest/eslint-plugin"; | ||
| import storybookPlugin from "eslint-plugin-storybook"; |
Copilot
AI
Nov 27, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unused import storybookPlugin.
c163ad5 to
951c61d
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 5
♻️ Duplicate comments (4)
packages/propel/package.json (1)
10-14: [DUPLICATE_COMMENT] Inconsistent--max-warningsthresholds continue across packages.This package uses
--max-warnings=1306, the highest threshold seen yet (compared to 1062 in packages/utils and 51 in packages/i18n). The lack of standardization across the monorepo is problematic.See prior comment on packages/i18n/package.json for the full concern and requested documentation.
packages/hooks/package.json (1)
15-23: [DUPLICATE_COMMENT] Inconsistent--max-warningsthresholds continue across packages.This package uses
--max-warnings=60(compared to 51, 1062, and 1306 in other packages). This pattern of inconsistency continues across the PR.See prior comments on packages/i18n/package.json and packages/propel/package.json for the full concern about standardization and plan for post-migration reduction.
packages/editor/package.json (1)
18-26: [DUPLICATE_COMMENT] Inconsistent--max-warningsthresholds continue across packages.This package uses
--max-warnings=1435, the highest threshold in the entire PR (compared to 51, 60, 1062, 1306 in other packages). While the editor package is complex, the lack of standardization is problematic.See prior comments on packages/i18n/package.json and packages/propel/package.json for the full concern. Additionally, document whether the editor package's higher warning count is expected or indicates code quality issues that should be addressed rather than suppressed.
eslint.config.mjs (1)
16-16: Unused import:storybookPlugin.This import is only referenced in commented-out code (line 52). Remove it until Storybook linting is enabled.
-import storybookPlugin from "eslint-plugin-storybook";
🧹 Nitpick comments (3)
apps/web/core/lib/polyfills/index.ts (1)
1-1: Simplify redundant window check.The second
&& windowcheck is redundant sincetypeof window !== "undefined"already ensureswindowexists.Apply this diff:
-if (typeof window !== "undefined" && window) { +if (typeof window !== "undefined") {apps/admin/package.json (1)
14-17: Consider tracking lint warning reduction over time.The
max-warningsthreshold increased significantly (19 → 485). While this is necessary for the migration, consider creating a tracking issue to incrementally reduce this threshold as warnings are addressed.eslint.config.mjs (1)
39-39: Consider disabling jsdoc rules if JSDoc is not enforced project-wide.
jsdoc/flat/recommended-typescriptwill flag missing JSDoc comments across the codebase. If JSDoc documentation isn't a current requirement, this may generate significant noise. Consider starting with a more minimal jsdoc config or disabling noisy rules.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (107)
.github/workflows/pull-request-build-lint-web-apps.yml(1 hunks).husky/pre-commit(1 hunks).npmrc(1 hunks).prettierignore(1 hunks).prettierrc(0 hunks)CONTRIBUTING.md(3 hunks)apps/admin/.eslintignore(0 hunks)apps/admin/.eslintrc.cjs(0 hunks)apps/admin/.prettierrc(0 hunks)apps/admin/package.json(1 hunks)apps/admin/postcss.config.cjs(0 hunks)apps/admin/tailwind.config.cjs(0 hunks)apps/admin/tsconfig.json(1 hunks)apps/live/.eslintignore(0 hunks)apps/live/.eslintrc.cjs(0 hunks)apps/live/.prettierrc(0 hunks)apps/live/package.json(2 hunks)apps/live/tsconfig.json(0 hunks)apps/space/.eslintignore(0 hunks)apps/space/.eslintrc.cjs(0 hunks)apps/space/.prettierrc(0 hunks)apps/space/core/components/issues/peek-overview/comment/comment-detail-card.tsx(0 hunks)apps/space/package.json(1 hunks)apps/space/postcss.config.cjs(0 hunks)apps/space/tailwind.config.cjs(0 hunks)apps/space/tsconfig.json(1 hunks)apps/web/.eslintignore(0 hunks)apps/web/.eslintrc.cjs(0 hunks)apps/web/.prettierignore(1 hunks)apps/web/.prettierrc(0 hunks)apps/web/ce/components/projects/create/attributes.tsx(1 hunks)apps/web/core/components/home/widgets/index.ts(0 hunks)apps/web/core/components/integration/guide.tsx(1 hunks)apps/web/core/components/issues/issue-detail-widgets/sub-issues/index.ts(1 hunks)apps/web/core/lib/polyfills/index.ts(1 hunks)apps/web/core/lib/polyfills/requestIdleCallback.ts(0 hunks)apps/web/package.json(1 hunks)apps/web/postcss.config.cjs(0 hunks)apps/web/tailwind.config.cjs(0 hunks)apps/web/tsconfig.json(1 hunks)eslint.config.mjs(1 hunks)package.json(1 hunks)packages/codemods/.prettierrc(0 hunks)packages/constants/.eslintignore(0 hunks)packages/constants/.eslintrc.cjs(0 hunks)packages/constants/.prettierrc(0 hunks)packages/constants/package.json(1 hunks)packages/decorators/.eslintignore(0 hunks)packages/decorators/.eslintrc.cjs(0 hunks)packages/decorators/.prettierrc(0 hunks)packages/decorators/package.json(1 hunks)packages/decorators/tsconfig.json(1 hunks)packages/editor/.eslintignore(0 hunks)packages/editor/.eslintrc.cjs(0 hunks)packages/editor/.prettierrc(0 hunks)packages/editor/package.json(2 hunks)packages/editor/tsconfig.json(1 hunks)packages/eslint-config/library.js(0 hunks)packages/eslint-config/next.js(0 hunks)packages/eslint-config/package.json(0 hunks)packages/eslint-config/server.js(0 hunks)packages/hooks/.eslintignore(0 hunks)packages/hooks/.eslintrc.cjs(0 hunks)packages/hooks/.prettierrc(0 hunks)packages/hooks/package.json(1 hunks)packages/i18n/.eslintignore(0 hunks)packages/i18n/.eslintrc.cjs(0 hunks)packages/i18n/.prettierrc(0 hunks)packages/i18n/package.json(1 hunks)packages/logger/.eslintignore(0 hunks)packages/logger/.eslintrc.cjs(0 hunks)packages/logger/.prettierrc(0 hunks)packages/logger/package.json(1 hunks)packages/logger/tsconfig.json(0 hunks)packages/propel/.eslintignore(0 hunks)packages/propel/.eslintrc.cjs(0 hunks)packages/propel/.prettierrc(0 hunks)packages/propel/package.json(1 hunks)packages/propel/postcss.config.js(0 hunks)packages/propel/src/icons/cycle/index.ts(1 hunks)packages/propel/src/icons/index.ts(3 hunks)packages/services/.eslintignore(0 hunks)packages/services/.eslintrc.cjs(0 hunks)packages/services/.prettierrc(0 hunks)packages/services/package.json(2 hunks)packages/services/src/dashboard/dashboard.service.ts(1 hunks)packages/services/src/developer/webhook.service.ts(1 hunks)packages/services/src/intake/intake.service.ts(1 hunks)packages/services/src/intake/issue.service.ts(1 hunks)packages/shared-state/.eslintignore(0 hunks)packages/shared-state/.eslintrc.js(0 hunks)packages/shared-state/.prettierrc(0 hunks)packages/shared-state/package.json(2 hunks)packages/types/.eslintrc.cjs(0 hunks)packages/types/.prettierrc(0 hunks)packages/types/package.json(1 hunks)packages/typescript-config/base.json(2 hunks)packages/ui/.eslintignore(0 hunks)packages/ui/.eslintrc.cjs(0 hunks)packages/ui/.prettierrc(0 hunks)packages/ui/package.json(1 hunks)packages/ui/postcss.config.js(0 hunks)packages/ui/tailwind.config.js(0 hunks)packages/utils/.eslintignore(0 hunks)packages/utils/.eslintrc.cjs(0 hunks)packages/utils/.prettierrc(0 hunks)packages/utils/package.json(1 hunks)
⛔ Files not processed due to max files limit (2)
- prettier.config.cjs
- turbo.json
💤 Files with no reviewable changes (67)
- packages/ui/.eslintignore
- packages/constants/.prettierrc
- packages/ui/.prettierrc
- packages/utils/.eslintignore
- apps/admin/tailwind.config.cjs
- apps/live/.prettierrc
- packages/services/.eslintrc.cjs
- apps/space/.eslintignore
- apps/live/.eslintignore
- apps/space/.eslintrc.cjs
- apps/web/core/components/home/widgets/index.ts
- apps/space/postcss.config.cjs
- packages/decorators/.eslintrc.cjs
- apps/space/.prettierrc
- packages/ui/.eslintrc.cjs
- packages/i18n/.eslintignore
- packages/constants/.eslintignore
- packages/shared-state/.eslintrc.js
- packages/eslint-config/library.js
- packages/hooks/.eslintignore
- packages/shared-state/.prettierrc
- packages/ui/tailwind.config.js
- packages/hooks/.eslintrc.cjs
- apps/live/.eslintrc.cjs
- apps/web/tailwind.config.cjs
- packages/utils/.prettierrc
- apps/web/.eslintignore
- packages/propel/.eslintignore
- packages/logger/.eslintignore
- packages/propel/.prettierrc
- packages/editor/.eslintignore
- packages/ui/postcss.config.js
- apps/web/core/lib/polyfills/requestIdleCallback.ts
- packages/codemods/.prettierrc
- packages/editor/.prettierrc
- packages/hooks/.prettierrc
- apps/space/core/components/issues/peek-overview/comment/comment-detail-card.tsx
- packages/types/.prettierrc
- packages/propel/.eslintrc.cjs
- packages/services/.prettierrc
- packages/eslint-config/server.js
- packages/services/.eslintignore
- apps/admin/postcss.config.cjs
- apps/live/tsconfig.json
- packages/decorators/.eslintignore
- packages/shared-state/.eslintignore
- apps/admin/.prettierrc
- packages/constants/.eslintrc.cjs
- packages/propel/postcss.config.js
- packages/eslint-config/next.js
- packages/logger/tsconfig.json
- packages/utils/.eslintrc.cjs
- packages/i18n/.prettierrc
- apps/web/.prettierrc
- packages/editor/.eslintrc.cjs
- apps/admin/.eslintrc.cjs
- apps/space/tailwind.config.cjs
- apps/web/postcss.config.cjs
- packages/types/.eslintrc.cjs
- packages/decorators/.prettierrc
- packages/logger/.eslintrc.cjs
- packages/logger/.prettierrc
- packages/i18n/.eslintrc.cjs
- packages/eslint-config/package.json
- .prettierrc
- apps/web/.eslintrc.cjs
- apps/admin/.eslintignore
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx,mts,cts}
📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)
**/*.{ts,tsx,mts,cts}: Useconsttype parameters for more precise literal inference in TypeScript 5.0+
Use thesatisfiesoperator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicitisreturn types in filter/check functions
UseNoInfer<T>utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing inswitch(true)blocks for control flow analysis (TypeScript 5.3+)
Rely on narrowing from direct boolean comparisons for type guards
Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Use constant indices to narrow object/array properties (TypeScript 5.5+)
Use standard ECMAScript decorators (Stage 3) instead of legacyexperimentalDecorators
Useusingdeclarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Usewith { type: "json" }for import attributes; avoid deprecatedassertsyntax (TypeScript 5.3/5.8+)
Useimport typeexplicitly when importing types to ensure they are erased during compilation, respectingverbatimModuleSyntaxflag
Use.ts,.mts,.ctsextensions inimport typestatements (TypeScript 5.2+)
Useimport type { Type } from "mod" with { "resolution-mode": "import" }for specific module resolution contexts (TypeScript 5.3+)
Use new iterator methods (map, filter, etc.) if targeting modern environments (TypeScript 5.6+)
Utilize newSetmethods likeunion,intersection, etc., when available (TypeScript 5.5+)
UseObject.groupBy/Map.groupBystandard methods for grouping instead of external libraries (TypeScript 5.4+)
UsePromise.withResolvers()for creating promises with exposed resolve/reject functions (TypeScript 5.7+)
Use copying array methods (toSorted,toSpliced,with) for immutable array operations (TypeScript 5.2+)
Avoid accessing instance fields viasuperin classes (TypeScript 5....
Files:
packages/services/src/intake/intake.service.tspackages/services/src/dashboard/dashboard.service.tsapps/web/core/components/integration/guide.tsxpackages/services/src/intake/issue.service.tspackages/services/src/developer/webhook.service.tsapps/web/ce/components/projects/create/attributes.tsxpackages/propel/src/icons/cycle/index.tsapps/web/core/components/issues/issue-detail-widgets/sub-issues/index.tspackages/propel/src/icons/index.tsapps/web/core/lib/polyfills/index.ts
**/*.{js,mjs,cjs}
📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)
Use
@importtags in JSDoc for cleaner type imports in JavaScript files when working in a mixed codebase (TypeScript 5.5+)
Files:
eslint.config.mjs
🧠 Learnings (31)
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `with { type: "json" }` for import attributes; avoid deprecated `assert` syntax (TypeScript 5.3/5.8+)
Applied to files:
packages/typescript-config/base.jsonapps/web/tsconfig.jsonCONTRIBUTING.mdpackages/decorators/tsconfig.jsonpackages/editor/tsconfig.jsonapps/space/tsconfig.jsonapps/admin/tsconfig.jsoneslint.config.mjs
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `const` type parameters for more precise literal inference in TypeScript 5.0+
Applied to files:
packages/typescript-config/base.jsonapps/web/tsconfig.jsonpackages/editor/tsconfig.jsonapps/space/tsconfig.jsonapps/admin/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `Object.groupBy` / `Map.groupBy` standard methods for grouping instead of external libraries (TypeScript 5.4+)
Applied to files:
packages/typescript-config/base.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use copying array methods (`toSorted`, `toSpliced`, `with`) for immutable array operations (TypeScript 5.2+)
Applied to files:
packages/typescript-config/base.jsonapps/web/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Utilize narrowing in `switch(true)` blocks for control flow analysis (TypeScript 5.3+)
Applied to files:
packages/typescript-config/base.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Applied to files:
packages/typescript-config/base.jsonapps/web/tsconfig.jsonpackages/editor/tsconfig.jsonapps/space/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use constant indices to narrow object/array properties (TypeScript 5.5+)
Applied to files:
packages/typescript-config/base.jsonapps/web/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `.ts`, `.mts`, `.cts` extensions in `import type` statements (TypeScript 5.2+)
Applied to files:
packages/typescript-config/base.jsonapps/web/tsconfig.jsonCONTRIBUTING.mdpackages/decorators/tsconfig.jsonpackages/editor/tsconfig.jsonapps/space/tsconfig.jsonapps/admin/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Utilize new `Set` methods like `union`, `intersection`, etc., when available (TypeScript 5.5+)
Applied to files:
packages/typescript-config/base.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Prioritize using modern features and best practices introduced in TypeScript versions 5.0 through 5.8
Applied to files:
packages/typescript-config/base.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use standard ECMAScript decorators (Stage 3) instead of legacy `experimentalDecorators`
Applied to files:
packages/typescript-config/base.jsonapps/web/tsconfig.jsonpackages/decorators/tsconfig.jsonpackages/editor/tsconfig.jsonpackages/decorators/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Assume `--moduleResolution bundler` resolution strategy for modern web projects (Vite, Next.js, etc.)
Applied to files:
packages/typescript-config/base.json
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.json
Applied to files:
packages/typescript-config/base.jsonpackages/utils/package.jsonpackages/logger/package.jsonpackages/hooks/package.jsonapps/live/package.jsonpackages/shared-state/package.jsonpackages/services/package.jsonpackages/types/package.jsonapps/admin/package.json.github/workflows/pull-request-build-lint-web-apps.ymlpackages/i18n/package.jsonpackages/constants/package.jsonpackages/propel/package.jsonpackage.jsonapps/web/package.jsonapps/space/package.jsonpackages/decorators/package.jsonpackages/editor/package.json.npmrc
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Treat legacy `experimentalDecorators`-style behavior as deprecated in favor of standard TC39-compliant decorators
Applied to files:
apps/web/tsconfig.jsonpackages/decorators/tsconfig.jsonpackages/editor/tsconfig.jsonpackages/decorators/package.json
📚 Learning: 2025-10-09T20:42:31.843Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7922
File: apps/admin/app/(all)/(dashboard)/ai/form.tsx:19-19
Timestamp: 2025-10-09T20:42:31.843Z
Learning: In the makeplane/plane repository, React types are globally available through TypeScript configuration. Type annotations like React.FC, React.ReactNode, etc. can be used without explicitly importing the React namespace. The codebase uses the modern JSX transform, so React imports are not required for JSX or type references.
Applied to files:
apps/web/tsconfig.jsonpackages/editor/tsconfig.jsonapps/space/tsconfig.jsonapps/admin/tsconfig.jsonpackages/i18n/package.jsonpackages/editor/package.json
📚 Learning: 2025-10-21T17:22:05.204Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7989
File: apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx:45-46
Timestamp: 2025-10-21T17:22:05.204Z
Learning: In the makeplane/plane repository, the refactor from useParams() to params prop is specifically scoped to page.tsx and layout.tsx files in apps/web/app (Next.js App Router pattern). Other components (hooks, regular client components, utilities) should continue using the useParams() hook as that is the correct pattern for non-route components.
Applied to files:
apps/web/tsconfig.jsonapps/space/tsconfig.jsonapps/admin/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{js,mjs,cjs} : Use `import` tags in JSDoc for cleaner type imports in JavaScript files when working in a mixed codebase (TypeScript 5.5+)
Applied to files:
CONTRIBUTING.mdeslint.config.mjs
📚 Learning: 2025-03-11T19:42:41.769Z
Learnt from: janreges
Repo: makeplane/plane 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".
Applied to files:
CONTRIBUTING.md
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `import type { Type } from "mod" with { "resolution-mode": "import" }` for specific module resolution contexts (TypeScript 5.3+)
Applied to files:
CONTRIBUTING.md
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to **/*.sh : Use pnpm for package management - do not use npm or yarn
Applied to files:
packages/utils/package.jsonpackages/logger/package.jsonpackages/hooks/package.jsonapps/web/.prettierignoreapps/live/package.jsonpackages/shared-state/package.jsonpackages/services/package.jsonpackages/types/package.jsonapps/admin/package.json.prettierignorepackages/i18n/package.jsonpackages/constants/package.jsonpackages/propel/package.json.husky/pre-commitapps/space/package.jsonpackages/decorators/package.jsonpackages/editor/package.json.npmrcpackages/ui/package.json
📚 Learning: 2025-08-29T08:45:15.953Z
Learnt from: sriramveeraghanta
Repo: makeplane/plane PR: 7672
File: pnpm-workspace.yaml:8-9
Timestamp: 2025-08-29T08:45:15.953Z
Learning: The makeplane/plane repository uses pnpm v10.12.1, which supports onlyBuiltDependencies configuration in pnpm-workspace.yaml files.
Applied to files:
packages/utils/package.jsonpackages/logger/package.jsonpackages/hooks/package.jsonapps/live/package.jsonpackages/shared-state/package.jsonpackages/services/package.jsonpackages/types/package.jsonapps/admin/package.json.prettierignorepackages/i18n/package.jsonpackages/constants/package.jsonpackages/propel/package.json.husky/pre-commitapps/web/package.jsonapps/space/package.jsonpackages/decorators/package.jsonpackages/editor/package.json.npmrcpackages/ui/package.json
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to **/*.sh : Run tests in a specific package using pnpm --filter plane/<package_name> run test
Applied to files:
packages/utils/package.jsonpackages/constants/package.jsonpackages/ui/package.json
📚 Learning: 2025-05-14T13:16:23.323Z
Learnt from: vamsikrishnamathala
Repo: makeplane/plane 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/`.
Applied to files:
packages/editor/tsconfig.jsonapps/space/tsconfig.json
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to pnpm-workspace.yaml : Use pnpm-workspace.yaml for monorepo workspace configuration
Applied to files:
packages/logger/package.jsonpackages/hooks/package.jsonpackages/types/package.json.prettierignorepackages/constants/package.json.husky/pre-commitpackages/decorators/package.json.npmrc
📚 Learning: 2025-10-09T22:12:26.424Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7922
File: apps/admin/app/(all)/(dashboard)/ai/form.tsx:19-19
Timestamp: 2025-10-09T22:12:26.424Z
Learning: When `types/react` is installed in a TypeScript project (which is standard for React + TypeScript codebases), React types (React.FC, React.ReactNode, React.ComponentProps, etc.) are globally available by design. These type annotations can and should be used without explicitly importing the React namespace. This is a TypeScript/DefinitelyTyped feature, not codebase-specific configuration.
Applied to files:
apps/space/tsconfig.jsonapps/admin/tsconfig.json
📚 Learning: 2025-10-06T01:44:38.472Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7888
File: packages/propel/src/collapsible/collapsible.stories.tsx:4-4
Timestamp: 2025-10-06T01:44:38.472Z
Learning: In Storybook v9, imports use bare paths instead of scoped packages. For example, `import { useArgs } from "storybook/preview-api"` is correct (not `storybook/preview-api`). This applies to other Storybook modules as well - the scoped storybook/* packages were consolidated into bare "storybook/*" imports.
Applied to files:
eslint.config.mjs
📚 Learning: 2025-10-06T01:45:11.248Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7888
File: packages/propel/src/table/table.stories.tsx:1-1
Timestamp: 2025-10-06T01:45:11.248Z
Learning: When using Storybook with React + Vite framework, Meta and StoryObj types should be imported from "storybook/react-vite", not from "storybook/react". This is the correct pattern per Storybook's official documentation for framework-specific type imports.
Applied to files:
eslint.config.mjspackages/propel/package.json
📚 Learning: 2025-06-04T16:22:44.344Z
Learnt from: lifeiscontent
Repo: makeplane/plane 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.
Applied to files:
eslint.config.mjs
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to pnpm-lock.yaml : Use pnpm-lock.yaml as the lockfile for dependency management
Applied to files:
.prettierignore.husky/pre-commit.npmrc
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Avoid `import ... assert` syntax; use `with` instead for import attributes
Applied to files:
apps/web/ce/components/projects/create/attributes.tsx
📚 Learning: 2025-10-09T20:43:07.762Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7922
File: apps/admin/core/components/new-user-popup.tsx:4-6
Timestamp: 2025-10-09T20:43:07.762Z
Learning: The `next-themes` library is React-compatible and can be used outside of Next.js applications. It's not Next.js-specific despite its name.
Applied to files:
packages/editor/package.json
⏰ 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). (1)
- GitHub Check: Build and lint web apps
🔇 Additional comments (46)
apps/web/core/components/issues/issue-detail-widgets/sub-issues/index.ts (1)
3-5: LGTM! Clean alphabetical ordering.The reordering establishes alphabetical export order and removes the duplicate "./content" export mentioned in the summary, improving maintainability and consistency.
apps/web/core/lib/polyfills/index.ts (2)
24-24: LGTM!The empty export statement correctly signals this is a side-effect-only module, which is the appropriate pattern for polyfill files.
3-15: I'll help you verify the requestIdleCallback polyfill implementation. Let me search for how it's being used in the codebase.
<function_calls>
#!/bin/bashSearch for requestIdleCallback usage across the codebase
rg -n "requestIdleCallback" --type=ts --type=tsx -C3 -g '!/node_modules/' -g '!/polyfills/'
</function_calls>packages/services/src/intake/intake.service.ts (1)
9-10: Named export forIntakeServiceis correct and backward compatibleRe‑exporting the class name as a named export is valid in TS/ES and keeps existing default imports working while enabling
{ IntakeService }imports. This aligns with the broader pattern in the PR.apps/web/core/components/integration/guide.tsx (1)
175-177: Dual default + named export forIntegrationGuidelooks goodKeeping the default export and adding
export { IntegrationGuide };is safe and provides flexibility for consumers to use either default or named imports without behavior changes.apps/web/ce/components/projects/create/attributes.tsx (1)
93-95:ProjectAttributesdefault + named export is safe and consistentExposing
ProjectAttributesas both the default and a named export is backward compatible and matches the export pattern used elsewhere, with no impact on runtime behavior. Based on learnings, there’s noimport ... assertusage here, so TS import guidelines remain satisfied.packages/services/src/dashboard/dashboard.service.ts (1)
80-81: Adding a named export forDashboardServiceis appropriateThe extra
export { DashboardService };cleanly exposes a named export alongside the existing default export and should not introduce breaking changes for current consumers.packages/services/src/developer/webhook.service.ts (1)
105-106:WebhookServicenamed export mirrors other service modulesExposing
WebhookServiceas a named export in addition to the default is a safe, consistent API expansion and doesn’t affect existing imports.packages/services/src/intake/issue.service.ts (1)
19-20: Named export forIntakeIssueServicealigns with the new service export patternAdding
export { IntakeIssueService };cleanly broadens the module’s public API while preserving all existing default‑import call sites.packages/typescript-config/base.json (2)
5-5: Formatting change approved.The
libarray reformatting to a single line with the same values is a minor cleanup. ES2023 target aligns with modern TypeScript best practices.
18-21: Verify and clarify the semantic inconsistency in base tsconfig configuration.The base config combines incompatible patterns that, while functional due to
noEmit, create unnecessary confusion:
Declaration flag contradiction:
declaration: trueanddeclarationMap: truepaired withnoEmit: truemeans declarations are never emitted. TheemitDeclarationOnly: falsesetting is redundant and semantically incorrect here. For a type-checking-only base config, remove the declaration flags or clarify the intent.Unused composite mode:
composite: trueis intended for TypeScript project references, but no"references"field exists anywhere in the codebase. All packages and apps omit project references entirely. Either implement project references across the monorepo (requiring a root tsconfig with references entries) or removecomposite: truefrom the base config to match the actual setup.Build info file path: ✓ Correctly configured. The
.turbo/tsconfig.tsbuildinfopath is consistently managed across all packages, properly ignored in.gitignore, and cleaned uniformly in package.json scripts.Recommendation: Decide whether to:
- Option A: Adopt TypeScript project references (add root tsconfig with references, set
referencesin consuming packages) — then keepcomposite: trueand fix declaration flags- Option B: Remove project references intent — delete
composite: trueand declaration flags from base.json since they serve no purpose withnoEmit: truepackages/propel/src/icons/cycle/index.ts (1)
1-5: Cycle icon barrel exports look consistent and deduplicatedExporting
./double-circle-icononce in this ordered list keeps the barrel clean and consistent with the rest of the icon modules; no issues from a typing or module-resolution perspective.packages/propel/src/icons/index.ts (3)
7-7: Arrows barrel export integrates cleanly into the icon indexAdding
export * from "./arrows";is consistent with how other icon groups are exposed from this index and should be safe as long as the./arrowsbarrel compiles cleanly.
67-68: Workspace exports remain consistent with other icon barrelsRe‑exporting
./workspacealongside./workspace-iconkeeps the workspace-related icons discoverable from a single barrel; ordering change is purely organizational with no behavioral impact.
30-35: Based on my comprehensive verification of the codebase, I have confirmed that there are no circular import issues in the icons barrel. Here are my findings:Verification Results:
- ✅
icon.tsimports only from./registryand./type(no barrel/index imports)- ✅
icon-wrapper.tsximports only from./type(no barrel/index imports)- ✅
helpers.tsimports only from./registry(no barrel/index imports)- ✅
registry.tsimports specific components from subdirectories, not from the barrel- ✅ No files within the icons directory import from
./iconsor./indexThe re-export pattern
export * from "./icon"at line 32 is safe and does not introduce circular dependencies.
No circular dependencies detected. The re-export of
./iconis safe.The
icon.tsfile imports only from local modules (./registry,./type) and does not reference the index barrel, soexport * from "./icon"does not create circular dependencies. Similarly, all other modules in the icons directory use direct imports and avoid barrel re-imports..prettierignore (1)
1-1: LGTM!Adding
pnpm-lock.yamlto.prettierignoreis correct. Lockfiles are auto-generated and should not be formatted to avoid unnecessary diffs and merge conflicts.packages/decorators/tsconfig.json (1)
12-12: LGTM!The
includeconfiguration is correct and properly scoped to thesrcdirectory..husky/pre-commit (1)
1-1: LGTM!The pre-commit hook correctly uses
pnpm lint-staged, aligning with the repository's package manager standard.apps/web/.prettierignore (1)
10-10: LGTM!Adding
public/to.prettierignoreis appropriate, as this directory typically contains static assets and generated files that should not be formatted..github/workflows/pull-request-build-lint-web-apps.yml (1)
46-48: LGTM!Moving the "Build Affected" step earlier in the workflow (after install, before lint/format/type checks) is logical and ensures that generated files and build artifacts are available for subsequent validation steps.
packages/editor/tsconfig.json (1)
5-5: LGTM!Adding the explicit
"src/*": ["./src/*"]path mapping aligns with the project-wide migration to explicit "./"-prefixed path aliases and removal of implicitbaseUrlresolution.apps/admin/tsconfig.json (1)
7-12: LGTM!The path mappings have been correctly updated with explicit "./"-prefixed targets, consistent with the project-wide migration away from implicit
baseUrlresolution.CONTRIBUTING.md (3)
94-94: LGTM!The documentation correctly reflects the migration to ESLint 9 with
eslint.config.mjsand Prettier withprettier.config.cjs, aligning with the PR's tooling modernization objectives.
190-203: LGTM!The code examples have been reformatted for improved readability and consistency. The structure and content remain accurate.
214-223: LGTM!The
importLanguageFileexample has been reformatted for better readability while maintaining correct implementation guidance.packages/i18n/package.json (1)
15-24: Clarify inconsistent--max-warningsthresholds across packages.This package uses
--max-warnings=51, whilepackages/utilsuses--max-warnings=1062. The inconsistency across the monorepo makes it difficult to enforce a standard linting baseline.Document the intended
--max-warningsvalues per package and whether these are:
- Temporary migration values
- Intentionally calibrated to each package's warning baseline
- Planned to converge to a single standard
Additionally, provide the plan for reducing these thresholds post-migration.
packages/logger/package.json (1)
15-19: [APPROVE_CODE_CHANGES] Positive sign:packages/loggermaintains strict linting (--max-warnings=0).Unlike other packages in this PR,
packages/loggermaintains--max-warnings=0, indicating this package is clean and doesn't relax linting enforcement during the migration. This is a positive pattern.However, this highlights the problematic inconsistency across the monorepo. See the consolidated concern comment below.
apps/space/tsconfig.json (1)
1-18: Theadditional.d.tsinclusion is legitimate and not a code smell.The file exists at
apps/space/additional.d.tsand contains only a type reference directive fornext-images:// additional.d.ts /// <reference types="next-images" />This is a standard TypeScript practice for augmenting type definitions (in this case, adding types for image imports). The file's inclusion in the
includearray is appropriate and necessary. The concern raised in the original review comment is unfounded—this is intentional, properly maintained code, not a workaround for module resolution issues.apps/web/tsconfig.json (1)
1-20: The review comment is based on incorrect premises and should be resolved.The git history shows that
apps/web/tsconfig.jsonwas created (not modified) in commit 951c61d as an initial commit with no parent. The file has never contained abaseUrlin the tracked history—it was created with explicit"./"prefixes in all path mappings. Verification of the codebase confirms that all imports actively use the defined path aliases (@/,@/plane-web/,ce/*, etc.) and resolve correctly.There was no
baseUrlremoval in this PR or any recent commit.packages/utils/package.json (2)
15-24: Let me check the actual current state of the config files to fully verify the setup.
<function_calls>
#!/bin/bashVerify eslint.config.mjs exists and check its content
echo "=== Verify root config files exist ==="
ls -lh eslint.config.mjs prettier.config.cjs 2>&1echo ""
echo "=== eslint.config.mjs first 30 lines ==="
head -30 eslint.config.mjs 2>/dev/null || echo "FILE NOT FOUND"echo ""
echo "=== prettier.config.cjs content ==="
cat prettier.config.cjs 2>/dev/null || echo "FILE NOT FOUND"
</function_calls>Perfect. Now I have enough information to provide a verified rewrite of the review comment.
Based on my verification:
- Centralized ESLint/Prettier config exists: Root-level
eslint.config.mjsandprettier.config.cjsare present and properly configured per CONTRIBUTING.md- Removed dependencies verified: Neither
@plane/eslint-confignor@prettier/plugin-oxcare referenced anywhere in the codebase—their removal is intentional- High max-warnings is part of broader pattern: The 1062 threshold in packages/utils is not isolated—it's consistent with a monorepo-wide strategy where the root enforces
--max-warnings=0while individual packages have permissive thresholds (ranging from 29 to 14,367)- Recent ESLint migration: Commit
951c61db5 "feat: eslint"introduced the current state, but lacks documentation about intent or timeline- No documentation about strategy: No comments, migration docs, or PR documentation explain whether these high thresholds are temporary or permanent
The
--max-warnings=1062threshold continues ESLint warning suppression across the monorepo, without documented rationale or timeline for reduction.While this threshold is part of a consistent monorepo pattern (not unique to
packages/utils), and centralized ESLint/Prettier configuration exists at the root level, the lack of clarity on intent remains a concern. Verify whether this permissive threshold during migration is:
- Temporary (document the target reduction timeline)
- Intentional (document the rationale)
The removed dependencies (
@plane/eslint-config,@prettier/plugin-oxc) have no other references and their removal aligns with the centralized root-level configuration setup.⛔ Skipped due to learnings
Learnt from: lifeiscontent Repo: makeplane/plane PR: 7888 File: packages/propel/package.json:74-79 Timestamp: 2025-10-06T14:40:39.253Z Learning: When reviewing package.json dependency version updates, verify each package version individually on the npm registry before claiming a version doesn't exist. Different packages within the same organization may have different latest versions.Learnt from: CR Repo: makeplane/plane PR: 0 File: .github/instructions/bash.instructions.md:0-0 Timestamp: 2025-11-25T10:17:39.709Z Learning: Applies to {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.jsonLearnt from: CR Repo: makeplane/plane PR: 0 File: .github/instructions/bash.instructions.md:0-0 Timestamp: 2025-11-25T10:17:39.709Z Learning: Applies to **/*.sh : Use pnpm for package management - do not use npm or yarn
18-22: ESLint and Prettier config consolidation cannot be verified due to repository access limitations.Unfortunately, I'm unable to access the makeplane/plane repository through automated means to verify the three concerns raised:
- Whether a centralized ESLint config file exists (root
eslint.config.jsor equivalent)- Whether a Prettier config exists (root
.prettierrcor equivalent)- The impact of removing
@prettier/plugin-oxcBoth the repository clone and web-based file access are blocked. A developer with local repository access should manually verify these configurations are properly in place and functional before merging.
packages/types/package.json (1)
14-18: LGTM — Scripts updated to use pnpm exec wrappers.The migration to
pnpm exec eslintandpnpm exec prettieris consistent with the repo-wide tooling standardization. The simplified Prettier glob (.instead of explicit patterns) relies on.prettierignorefor exclusions, which is cleaner.packages/decorators/package.json (1)
15-19: LGTM — Consistent tooling migration.Scripts align with the standardized pnpm wrapper approach across the monorepo.
packages/constants/package.json (1)
10-14: LGTM — Scripts standardized.The migration follows the same pattern as other packages in this PR.
package.json (2)
46-52: Good approach: strict pre-commit with relaxed package thresholds.The
lint-stagedconfiguration enforces--max-warnings=0for new commits, preventing warning accumulation while package-level scripts allow existing warnings. This is a sound incremental improvement strategy.
35-35: eslint-plugin-react-hooks v7 is properly configured.The
eslint.config.mjsloadsreactHooksPlugin.configs.flat.recommended(line 45) and explicitly enables the v7 React Compiler-related rules at warn level, includingreact-hooks/immutability,react-hooks/purity,react-hooks/preserve-manual-memoization,react-hooks/refs,react-hooks/set-state-in-effect, andreact-hooks/static-components(lines 96–102). No alignment issues detected..npmrc (1)
1-59: Well-structured pnpm configuration.The reorganization with clear section headers and sensible defaults (
resolution-mode=highest,prefer-frozen-lockfile=true,node-linker=isolated) improves maintainability and CI reproducibility.apps/live/package.json (1)
18-22: LGTM — Scripts aligned with repo-wide tooling.Consistent migration to pnpm wrappers.
eslint.config.mjs (3)
209-224: Good TypeScript-specific import resolution setup.The import resolver configuration correctly targets the monorepo structure with
{apps,packages}/*/tsconfig.jsonand marks@plane/as internal. The ignore list for Next.js modules handles known resolution quirks.
226-240: Correct handling of JavaScript and CommonJS files.Disabling type-checked rules for JS files and allowing
requirein.cjsfiles are appropriate accommodations for a mixed codebase.
96-102: All specified react-hooks rules are available in [email protected].Verification confirms that the rules in lines 96-102 (
immutability,preserve-manual-memoization,purity,refs,set-state-in-effect, andstatic-components) are all included in v7.0.1 as part of the React Compiler integration rules. The configuration is correct.apps/space/package.json (1)
13-17: Mirror concern: High max-warnings=932 baseline.Like packages/services, the max-warnings threshold here (932) is substantial and reflects ESLint warnings counted but not fixed. Ensure this aligns with the repo's long-term linting strategy.
packages/ui/package.json (1)
27-27: Format script glob pattern broadened from specific extensions to..The
check:formatandfix:formatscripts now target.(all files) instead of the previous specific pattern"**/*.{ts,tsx,md,json,css,scss}". This is broader and may now format additional file types (configs, build artifacts, etc.) unintentionally.Verify this change aligns with the intended Prettier scope, or consider restoring the specific glob pattern in a
.prettierignorefile.Also applies to: 29-29
packages/shared-state/package.json (2)
10-14: Scripts and tooling migration align with repo pattern; baseline warnings are healthy.Lines 10-14 follow the repository-wide migration to
pnpm execeslint/prettier, withmax-warnings=191representing a reasonable baseline for this package. This file demonstrates good linting hygiene compared to other packages in the PR.
33-33: Verify: End-of-file newline removed (line 33).The file now ends with
}without a trailing newline. Confirm this is intentional and aligns with your project's code formatting standards (most Node.js projects and Prettier default to requiring a trailing newline).packages/services/package.json (1)
17-21: Eslint and prettier are properly available in the workspace; central configuration files exist and are correctly configured.The concerns in the original review comment do not reflect the actual repository state:
- eslint and prettier are available: Both are installed in root
devDependenciesand accessible to all workspace packages viapnpm exec.- Central configurations exist:
eslint.config.mjsandprettier.config.cjsare present in the repository root and properly configured.- Migration is sound: The removal of
@plane/eslint-configwas an intentional migration to the flat config approach (now ineslint.config.mjs). The removal of@prettier/plugin-oxcis reflected in the updatedprettier.config.cjs.- pnpm workspace setup is correct: The
pnpm-workspace.yamlincludespackages/*, which allowspackages/servicesto access root tools and configurations.No action is required; the code changes are correctly implemented.
ddbff15 to
dff99b6
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (3)
packages/decorators/.prettierignore (1)
1-11: Duplication: See related concern in packages/constants/.prettierignore.This file is identical to
packages/constants/.prettierignore. The architectural andpnpm-lock.yamlconcerns raised there apply here as well. If the intent is to consolidate Prettier ignores at the root per the PR objective, consider whether these per-package files are necessary.apps/admin/.prettierignore (1)
1-11: Duplication: See related concern in packages/constants/.prettierignore.This file mirrors identical patterns to
packages/constants/.prettierignoreandpackages/decorators/.prettierignore. The architectural mismatch andpnpm-lock.yamlreference concerns apply uniformly across all three. If the PR intends to consolidate Prettier ignores at the root per the stated objective, these per-package files should be evaluated for necessity.eslint.config.mjs (1)
16-16: Unused import:storybookPlugin.This import is currently unused since the storybook linting is commented out at lines 51-52. Consider removing the import until the TODO is resolved, or leave it if you plan to enable it soon.
-import storybookPlugin from "eslint-plugin-storybook"; +// TODO: re-enable once storybook linting issues are resolved +// import storybookPlugin from "eslint-plugin-storybook";
🧹 Nitpick comments (2)
packages/propel/src/icons/index.ts (2)
31-33: Minor ordering inconsistency.The export for
./iconis placed after./icon-wrapper, breaking the alphabetical order maintained throughout the file. Consider reordering for consistency.export * from "./helpers"; -export * from "./icon-wrapper"; export * from "./icon"; +export * from "./icon-wrapper"; export * from "./in-progress-icon";
67-68: Same ordering issue with workspace exports.
./workspaceshould come before./workspace-iconto maintain alphabetical order.export * from "./user-activity-icon"; -export * from "./workspace-icon"; export * from "./workspace"; +export * from "./workspace-icon";
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (107)
.github/workflows/pull-request-build-lint-web-apps.yml(1 hunks).husky/pre-commit(1 hunks).npmrc(1 hunks).prettierignore(1 hunks).prettierrc(1 hunks)CODEOWNERS(1 hunks)CONTRIBUTING.md(3 hunks)apps/admin/.eslintignore(0 hunks)apps/admin/.eslintrc.cjs(0 hunks)apps/admin/.prettierignore(1 hunks)apps/admin/.prettierrc(0 hunks)apps/admin/package.json(1 hunks)apps/admin/postcss.config.cjs(0 hunks)apps/admin/tailwind.config.cjs(0 hunks)apps/admin/tsconfig.json(1 hunks)apps/api/.prettierignore(1 hunks)apps/live/.eslintignore(0 hunks)apps/live/.eslintrc.cjs(0 hunks)apps/live/.prettierignore(1 hunks)apps/live/.prettierrc(0 hunks)apps/live/package.json(1 hunks)apps/live/tsconfig.json(0 hunks)apps/proxy/.prettierignore(1 hunks)apps/space/.eslintignore(0 hunks)apps/space/.eslintrc.cjs(0 hunks)apps/space/.prettierignore(1 hunks)apps/space/.prettierrc(0 hunks)apps/space/core/components/issues/peek-overview/comment/comment-detail-card.tsx(0 hunks)apps/space/package.json(1 hunks)apps/space/postcss.config.cjs(0 hunks)apps/space/tailwind.config.cjs(0 hunks)apps/space/tsconfig.json(1 hunks)apps/web/.eslintignore(0 hunks)apps/web/.eslintrc.cjs(0 hunks)apps/web/.prettierignore(1 hunks)apps/web/.prettierrc(0 hunks)apps/web/ce/components/projects/create/attributes.tsx(1 hunks)apps/web/core/components/home/widgets/index.ts(0 hunks)apps/web/core/components/integration/guide.tsx(1 hunks)apps/web/core/components/issues/issue-detail-widgets/sub-issues/index.ts(1 hunks)apps/web/core/lib/polyfills/index.ts(1 hunks)apps/web/core/lib/polyfills/requestIdleCallback.ts(0 hunks)apps/web/package.json(1 hunks)apps/web/postcss.config.cjs(0 hunks)apps/web/tailwind.config.cjs(0 hunks)apps/web/tsconfig.json(1 hunks)eslint.config.mjs(1 hunks)package.json(1 hunks)packages/codemods/.prettierignore(1 hunks)packages/codemods/.prettierrc(0 hunks)packages/constants/.eslintignore(0 hunks)packages/constants/.eslintrc.cjs(0 hunks)packages/constants/.prettierignore(1 hunks)packages/constants/.prettierrc(0 hunks)packages/constants/package.json(1 hunks)packages/decorators/.eslintignore(0 hunks)packages/decorators/.eslintrc.cjs(0 hunks)packages/decorators/.prettierignore(1 hunks)packages/decorators/.prettierrc(0 hunks)packages/decorators/package.json(1 hunks)packages/decorators/tsconfig.json(1 hunks)packages/editor/.eslintignore(0 hunks)packages/editor/.eslintrc.cjs(0 hunks)packages/editor/.prettierignore(1 hunks)packages/editor/.prettierrc(0 hunks)packages/editor/package.json(1 hunks)packages/editor/tsconfig.json(1 hunks)packages/eslint-config/library.js(0 hunks)packages/eslint-config/next.js(0 hunks)packages/eslint-config/package.json(0 hunks)packages/eslint-config/server.js(0 hunks)packages/hooks/.eslintignore(0 hunks)packages/hooks/.eslintrc.cjs(0 hunks)packages/hooks/.prettierignore(1 hunks)packages/hooks/.prettierrc(0 hunks)packages/hooks/package.json(1 hunks)packages/i18n/.eslintignore(0 hunks)packages/i18n/.eslintrc.cjs(0 hunks)packages/i18n/.prettierignore(1 hunks)packages/i18n/.prettierrc(0 hunks)packages/i18n/package.json(1 hunks)packages/logger/.eslintignore(0 hunks)packages/logger/.eslintrc.cjs(0 hunks)packages/logger/.prettierignore(1 hunks)packages/logger/.prettierrc(0 hunks)packages/logger/package.json(1 hunks)packages/logger/tsconfig.json(0 hunks)packages/propel/.eslintignore(0 hunks)packages/propel/.eslintrc.cjs(0 hunks)packages/propel/.prettierignore(1 hunks)packages/propel/.prettierrc(0 hunks)packages/propel/package.json(1 hunks)packages/propel/postcss.config.js(0 hunks)packages/propel/src/icons/cycle/index.ts(1 hunks)packages/propel/src/icons/index.ts(3 hunks)packages/services/.eslintignore(0 hunks)packages/services/.eslintrc.cjs(0 hunks)packages/services/.prettierignore(1 hunks)packages/services/.prettierrc(0 hunks)packages/services/package.json(1 hunks)packages/services/src/dashboard/dashboard.service.ts(1 hunks)packages/services/src/developer/webhook.service.ts(1 hunks)packages/services/src/intake/intake.service.ts(1 hunks)packages/services/src/intake/issue.service.ts(1 hunks)packages/shared-state/.eslintignore(0 hunks)packages/shared-state/.eslintrc.js(0 hunks)packages/shared-state/.prettierignore(1 hunks)
⛔ Files not processed due to max files limit (22)
- packages/shared-state/.prettierrc
- packages/shared-state/package.json
- packages/tailwind-config/.prettierignore
- packages/types/.eslintrc.cjs
- packages/types/.prettierignore
- packages/types/.prettierrc
- packages/types/package.json
- packages/typescript-config/.prettierignore
- packages/typescript-config/base.json
- packages/ui/.eslintignore
- packages/ui/.eslintrc.cjs
- packages/ui/.prettierignore
- packages/ui/.prettierrc
- packages/ui/package.json
- packages/ui/postcss.config.js
- packages/ui/tailwind.config.js
- packages/utils/.eslintignore
- packages/utils/.eslintrc.cjs
- packages/utils/.prettierignore
- packages/utils/.prettierrc
- packages/utils/package.json
- turbo.json
💤 Files with no reviewable changes (55)
- packages/decorators/.eslintrc.cjs
- packages/decorators/.eslintignore
- apps/space/core/components/issues/peek-overview/comment/comment-detail-card.tsx
- apps/live/.eslintrc.cjs
- apps/web/.prettierrc
- packages/constants/.eslintignore
- apps/live/tsconfig.json
- packages/logger/.eslintrc.cjs
- packages/propel/.eslintignore
- packages/hooks/.prettierrc
- packages/shared-state/.eslintignore
- packages/decorators/.prettierrc
- packages/services/.prettierrc
- apps/web/tailwind.config.cjs
- packages/eslint-config/library.js
- apps/web/.eslintignore
- packages/hooks/.eslintignore
- packages/shared-state/.eslintrc.js
- packages/hooks/.eslintrc.cjs
- apps/admin/tailwind.config.cjs
- apps/live/.prettierrc
- packages/i18n/.eslintignore
- apps/web/core/lib/polyfills/requestIdleCallback.ts
- packages/editor/.eslintignore
- packages/eslint-config/next.js
- apps/admin/.eslintignore
- packages/i18n/.eslintrc.cjs
- apps/space/.eslintrc.cjs
- packages/constants/.eslintrc.cjs
- packages/constants/.prettierrc
- apps/web/postcss.config.cjs
- apps/web/core/components/home/widgets/index.ts
- apps/space/.eslintignore
- packages/propel/.prettierrc
- apps/space/.prettierrc
- apps/space/tailwind.config.cjs
- packages/logger/.prettierrc
- packages/codemods/.prettierrc
- packages/propel/postcss.config.js
- apps/admin/.prettierrc
- apps/live/.eslintignore
- packages/editor/.prettierrc
- packages/eslint-config/package.json
- packages/eslint-config/server.js
- packages/i18n/.prettierrc
- packages/logger/tsconfig.json
- packages/editor/.eslintrc.cjs
- packages/services/.eslintrc.cjs
- apps/admin/.eslintrc.cjs
- apps/web/.eslintrc.cjs
- packages/propel/.eslintrc.cjs
- packages/logger/.eslintignore
- apps/space/postcss.config.cjs
- packages/services/.eslintignore
- apps/admin/postcss.config.cjs
🚧 Files skipped from review as they are similar to previous changes (30)
- packages/codemods/.prettierignore
- packages/services/src/dashboard/dashboard.service.ts
- packages/hooks/.prettierignore
- .husky/pre-commit
- packages/propel/.prettierignore
- apps/web/ce/components/projects/create/attributes.tsx
- apps/web/.prettierignore
- apps/proxy/.prettierignore
- apps/space/.prettierignore
- packages/services/.prettierignore
- apps/live/.prettierignore
- apps/web/core/lib/polyfills/index.ts
- apps/web/core/components/integration/guide.tsx
- packages/shared-state/.prettierignore
- packages/i18n/package.json
- packages/hooks/package.json
- packages/propel/src/icons/cycle/index.ts
- apps/space/tsconfig.json
- .github/workflows/pull-request-build-lint-web-apps.yml
- apps/admin/tsconfig.json
- packages/logger/.prettierignore
- apps/web/core/components/issues/issue-detail-widgets/sub-issues/index.ts
- packages/editor/package.json
- packages/decorators/tsconfig.json
- packages/i18n/.prettierignore
- packages/decorators/package.json
- .prettierrc
- CODEOWNERS
- CONTRIBUTING.md
- .prettierignore
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx,mts,cts}
📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)
**/*.{ts,tsx,mts,cts}: Useconsttype parameters for more precise literal inference in TypeScript 5.0+
Use thesatisfiesoperator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicitisreturn types in filter/check functions
UseNoInfer<T>utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing inswitch(true)blocks for control flow analysis (TypeScript 5.3+)
Rely on narrowing from direct boolean comparisons for type guards
Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Use constant indices to narrow object/array properties (TypeScript 5.5+)
Use standard ECMAScript decorators (Stage 3) instead of legacyexperimentalDecorators
Useusingdeclarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Usewith { type: "json" }for import attributes; avoid deprecatedassertsyntax (TypeScript 5.3/5.8+)
Useimport typeexplicitly when importing types to ensure they are erased during compilation, respectingverbatimModuleSyntaxflag
Use.ts,.mts,.ctsextensions inimport typestatements (TypeScript 5.2+)
Useimport type { Type } from "mod" with { "resolution-mode": "import" }for specific module resolution contexts (TypeScript 5.3+)
Use new iterator methods (map, filter, etc.) if targeting modern environments (TypeScript 5.6+)
Utilize newSetmethods likeunion,intersection, etc., when available (TypeScript 5.5+)
UseObject.groupBy/Map.groupBystandard methods for grouping instead of external libraries (TypeScript 5.4+)
UsePromise.withResolvers()for creating promises with exposed resolve/reject functions (TypeScript 5.7+)
Use copying array methods (toSorted,toSpliced,with) for immutable array operations (TypeScript 5.2+)
Avoid accessing instance fields viasuperin classes (TypeScript 5....
Files:
packages/services/src/intake/issue.service.tspackages/services/src/developer/webhook.service.tspackages/services/src/intake/intake.service.tspackages/propel/src/icons/index.ts
**/*.{js,mjs,cjs}
📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)
Use
@importtags in JSDoc for cleaner type imports in JavaScript files when working in a mixed codebase (TypeScript 5.5+)
Files:
eslint.config.mjs
🧠 Learnings (24)
📓 Common learnings
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{js,mjs,cjs} : Use `import` tags in JSDoc for cleaner type imports in JavaScript files when working in a mixed codebase (TypeScript 5.5+)
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to **/*.sh : Use pnpm for package management - do not use npm or yarn
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use standard ECMAScript decorators (Stage 3) instead of legacy `experimentalDecorators`
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to pnpm-workspace.yaml : Use pnpm-workspace.yaml for monorepo workspace configuration
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to **/*.sh : Use pnpm for package management - do not use npm or yarn
Applied to files:
packages/constants/.prettierignorepackages/constants/package.jsonapps/live/package.jsonpackages/propel/package.jsonapps/api/.prettierignorepackages/services/package.jsonpackages/logger/package.jsonpackages/decorators/.prettierignoreapps/admin/.prettierignorepackages/editor/.prettierignore.npmrc
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to pnpm-workspace.yaml : Use pnpm-workspace.yaml for monorepo workspace configuration
Applied to files:
packages/constants/.prettierignorepackages/constants/package.jsonapps/api/.prettierignorepackages/logger/package.json.npmrc
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.json
Applied to files:
packages/constants/.prettierignorepackages/constants/package.jsonapps/live/package.jsonpackages/propel/package.jsonpackages/services/package.jsonapps/admin/package.jsonpackages/logger/package.json.npmrcpackage.jsonapps/space/package.jsonapps/web/package.json
📚 Learning: 2025-08-29T08:45:15.953Z
Learnt from: sriramveeraghanta
Repo: makeplane/plane PR: 7672
File: pnpm-workspace.yaml:8-9
Timestamp: 2025-08-29T08:45:15.953Z
Learning: The makeplane/plane repository uses pnpm v10.12.1, which supports onlyBuiltDependencies configuration in pnpm-workspace.yaml files.
Applied to files:
packages/constants/.prettierignorepackages/constants/package.jsonapps/live/package.jsonpackages/propel/package.jsonapps/api/.prettierignorepackages/services/package.jsonapps/admin/package.jsonpackages/logger/package.json.npmrcapps/space/package.jsonapps/web/package.json
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to **/*.sh : Run tests in a specific package using pnpm --filter plane/<package_name> run test
Applied to files:
packages/constants/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `.ts`, `.mts`, `.cts` extensions in `import type` statements (TypeScript 5.2+)
Applied to files:
apps/web/tsconfig.jsonpackages/editor/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `with { type: "json" }` for import attributes; avoid deprecated `assert` syntax (TypeScript 5.3/5.8+)
Applied to files:
apps/web/tsconfig.jsoneslint.config.mjspackages/editor/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `const` type parameters for more precise literal inference in TypeScript 5.0+
Applied to files:
apps/web/tsconfig.jsonpackages/editor/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Applied to files:
apps/web/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Treat legacy `experimentalDecorators`-style behavior as deprecated in favor of standard TC39-compliant decorators
Applied to files:
apps/web/tsconfig.jsoneslint.config.mjspackages/decorators/.prettierignorepackages/editor/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use constant indices to narrow object/array properties (TypeScript 5.5+)
Applied to files:
apps/web/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use copying array methods (`toSorted`, `toSpliced`, `with`) for immutable array operations (TypeScript 5.2+)
Applied to files:
apps/web/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use standard ECMAScript decorators (Stage 3) instead of legacy `experimentalDecorators`
Applied to files:
apps/web/tsconfig.jsoneslint.config.mjspackages/decorators/.prettierignorepackages/editor/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Utilize narrowing in `switch(true)` blocks for control flow analysis (TypeScript 5.3+)
Applied to files:
apps/web/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `Object.groupBy` / `Map.groupBy` standard methods for grouping instead of external libraries (TypeScript 5.4+)
Applied to files:
apps/web/tsconfig.json
📚 Learning: 2025-10-09T20:42:31.843Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7922
File: apps/admin/app/(all)/(dashboard)/ai/form.tsx:19-19
Timestamp: 2025-10-09T20:42:31.843Z
Learning: In the makeplane/plane repository, React types are globally available through TypeScript configuration. Type annotations like React.FC, React.ReactNode, etc. can be used without explicitly importing the React namespace. The codebase uses the modern JSX transform, so React imports are not required for JSX or type references.
Applied to files:
apps/web/tsconfig.jsonpackages/editor/tsconfig.json
📚 Learning: 2025-10-21T17:22:05.204Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7989
File: apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx:45-46
Timestamp: 2025-10-21T17:22:05.204Z
Learning: In the makeplane/plane repository, the refactor from useParams() to params prop is specifically scoped to page.tsx and layout.tsx files in apps/web/app (Next.js App Router pattern). Other components (hooks, regular client components, utilities) should continue using the useParams() hook as that is the correct pattern for non-route components.
Applied to files:
apps/web/tsconfig.json
📚 Learning: 2025-10-06T01:45:11.248Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7888
File: packages/propel/src/table/table.stories.tsx:1-1
Timestamp: 2025-10-06T01:45:11.248Z
Learning: When using Storybook with React + Vite framework, Meta and StoryObj types should be imported from "storybook/react-vite", not from "storybook/react". This is the correct pattern per Storybook's official documentation for framework-specific type imports.
Applied to files:
packages/propel/package.jsoneslint.config.mjs
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{js,mjs,cjs} : Use `import` tags in JSDoc for cleaner type imports in JavaScript files when working in a mixed codebase (TypeScript 5.5+)
Applied to files:
eslint.config.mjs
📚 Learning: 2025-10-06T01:44:38.472Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7888
File: packages/propel/src/collapsible/collapsible.stories.tsx:4-4
Timestamp: 2025-10-06T01:44:38.472Z
Learning: In Storybook v9, imports use bare paths instead of scoped packages. For example, `import { useArgs } from "storybook/preview-api"` is correct (not `storybook/preview-api`). This applies to other Storybook modules as well - the scoped storybook/* packages were consolidated into bare "storybook/*" imports.
Applied to files:
eslint.config.mjs
📚 Learning: 2025-06-04T16:22:44.344Z
Learnt from: lifeiscontent
Repo: makeplane/plane 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.
Applied to files:
eslint.config.mjs
📚 Learning: 2025-05-14T13:16:23.323Z
Learnt from: vamsikrishnamathala
Repo: makeplane/plane 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/`.
Applied to files:
packages/editor/tsconfig.json
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to pnpm-lock.yaml : Use pnpm-lock.yaml as the lockfile for dependency management
Applied to files:
.npmrc
⏰ 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). (1)
- GitHub Check: Build and lint web apps
🔇 Additional comments (25)
packages/editor/.prettierignore (1)
1-11: Standardized recursive ignore patterns across the monorepo.The conversion to recursive glob patterns (
**/prefix) ensures consistent Prettier formatting exclusions across all subdirectories and aligns with the monorepo-wide centralization of linting and formatting configuration. The inclusion of framework build directories, build outputs, dependencies, and the pnpm lockfile is comprehensive and appropriate for the project structure.packages/services/src/intake/issue.service.ts (1)
20-20: Named export complements existing default export cleanlyAdding
export { IntakeIssueService };exposes a named export without changing runtime behavior and keeps existing default-import callers working. This is a straightforward API ergonomics improvement and aligns with the pattern used in other services.packages/services/src/developer/webhook.service.ts (1)
106-106: Expanding module API with a namedWebhookServiceexportThe additional
export { WebhookService };cleanly adds a named export while preserving the existing default export contract. This improves flexibility for consumers (especially with eslint rules favoring named imports) without altering behavior.packages/services/src/intake/intake.service.ts (1)
10-10: Consistent named export forIntakeServiceAdding
export { IntakeService };provides a named export alongside the default, matching the pattern in other services and giving consumers the option to prefer named imports. No compatibility or behavioral concerns here.apps/api/.prettierignore (1)
1-11: This file duplicates the root.prettierignoreand contradicts the PR's centralization strategy.A root-level
.prettierignorealready exists at the repository root with identical content. Adding a per-package.prettierignoretoapps/api/directly contradicts the stated PR objective of consolidating Prettier configuration at the root level and removing per-package configurations.Remove
apps/api/.prettierignoreor clarify if per-package overrides are intentional.⛔ Skipped due to learnings
Learnt from: CR Repo: makeplane/plane PR: 0 File: .github/instructions/bash.instructions.md:0-0 Timestamp: 2025-11-25T10:17:39.709Z Learning: Applies to **/*.sh : Use pnpm for package management - do not use npm or yarnLearnt from: CR Repo: makeplane/plane PR: 0 File: .github/instructions/bash.instructions.md:0-0 Timestamp: 2025-11-25T10:17:39.709Z Learning: Applies to pnpm-workspace.yaml : Use pnpm-workspace.yaml for monorepo workspace configurationLearnt from: sriramveeraghanta Repo: makeplane/plane PR: 7672 File: pnpm-workspace.yaml:8-9 Timestamp: 2025-08-29T08:45:15.953Z Learning: The makeplane/plane repository uses pnpm v10.12.1, which supports onlyBuiltDependencies configuration in pnpm-workspace.yaml files.Learnt from: CR Repo: makeplane/plane PR: 0 File: .github/instructions/bash.instructions.md:0-0 Timestamp: 2025-11-25T10:17:39.709Z Learning: Applies to pnpm-lock.yaml : Use pnpm-lock.yaml as the lockfile for dependency managementpackages/editor/tsconfig.json (1)
4-9: LGTM! Path mappings are properly normalized.The explicit
./prefix forsrc/*aligns with the broader tsconfig normalization across the repository, ensuring consistent path resolution behavior.apps/web/tsconfig.json (1)
6-15: LGTM! Path mappings normalized consistently.The explicit
./prefixes for all path mappings ensure predictable resolution behavior without relying onbaseUrl. The structure provides clear aliasing for core modules (@/*), helpers, styles, and the CE edition paths.packages/propel/package.json (1)
10-14: High--max-warningscount warrants a tracking issue.The
pnpm execwrapper usage is correct and aligns with repo conventions. However,--max-warnings=1306is quite high. Consider creating a tracking issue to incrementally reduce this count over time, otherwise warnings may accumulate unnoticed.eslint.config.mjs (3)
209-225: Import plugin configuration looks solid for the monorepo.The TypeScript resolver is correctly configured to find
tsconfig.jsonfiles across apps and packages. Theimport/internal-regexpattern for@plane/properly identifies internal workspace packages, and the ignore list prevents false positives on Next.js modules.
226-241: LGTM! JS/CJS overrides are correctly configured.Disabling type-checked rules for JavaScript files and enabling Node.js globals with
requiresupport for CommonJS files are appropriate overrides. PlacingprettierConfiglast ensures ESLint formatting rules don't conflict with Prettier.
96-102: The React Hooks rules are valid and available in eslint-plugin-react-hooks 7.0.1.The review comment's assertion is incorrect. All the specified rules—
immutability,preserve-manual-memoization,purity,refs,rules-of-hooks,set-state-in-effect, andstatic-components—are part of the standardeslint-plugin-react-hooks(v7.0.1) that is already installed in the project. These are not from a separateeslint-plugin-react-compilerplugin (which is not even a dependency). The configuration is correct and will not cause ESLint errors.Likely an incorrect or invalid review comment.
apps/admin/package.json (1)
14-18: LGTM! Script changes align with the centralized tooling approach.The
pnpm execwrapper ensures ESLint and Prettier resolve from the workspace root. Similar to the propel package, the--max-warnings=485count is high—tracking these for gradual reduction would be beneficial.packages/services/package.json (1)
17-21: Script standardization viapnpm execis consistent with tooling migration.The conversion to
pnpm execwrappers and use of.glob (instead of explicit patterns) aligns with the centralized ESLint/Prettier configuration strategy. Themax-warnings=1131threshold was established as a post-migration baseline in the recent ESLint standardization and remains unchanged, which prevents regression while the codebase quality improves.apps/space/package.json (1)
13-17: Script standardization is consistent.The conversion to
pnpm execwrappers aligns with the tooling centralization. Themax-warnings=932threshold is appropriate for the scope of this application.apps/live/package.json (1)
18-22: Verify the 16× increase inmax-warnings(10 → 160) for apps/live.The max-warnings threshold increased from 10 to 160, which represents a significant loosening of linting strictness. While this aligns with a post-migration baseline approach (as documented in prior commits), clarify whether this jump is intentional or reflects changes in the ESLint configuration applied to this package.
packages/constants/package.json (1)
10-14:max-warningsincreased from 0 to 30 for a constants package—verify this is intentional.This package previously enforced zero warnings (strict linting). The increase to 30 suggests either that new ESLint rules are producing violations or the configuration has changed. For a small constants-only package, maintaining a stricter threshold is preferable. Clarify whether this change is part of the intentional post-migration baseline or warrants immediate reduction.
apps/web/package.json (1)
13-17: Verify that the exceptionalmax-warnings=14367threshold for apps/web has been addressed.A past review flagged this as a critical issue (approximately 75× higher than other packages and 15.4× higher than the previous value of 934). The past comment indicates it was addressed in commit 8434c76, but the current code still shows 14367. Confirm whether that commit actually resolved this or if further action is needed to bring this threshold in line with other packages (e.g., packages/editor at 1435).
packages/logger/package.json (1)
15-19: Maintains strict linting standard withmax-warnings=0.Unlike other packages that have been adjusted to allow baseline warnings, packages/logger retains the strictest linting enforcement. This is appropriate for shared infrastructure and models the desired code quality standard.
package.json (3)
15-21: Root-level script coordination enables centralized tooling.The addition of
fix:lint,prepare(Husky), and delegation via Turbo creates a cohesive workflow. Thepreparescript ensures Husky hooks are installed onpnpm install. However, verify that.npmrcsettings do not interfere with script execution (see related review comment for.npmrc).
23-45: ESLint and Prettier ecosystem consolidation at root is well-structured.Centralizing ESLint plugins, Prettier, and related tooling at the root level (with removal from per-package
devDependencies) streamlines dependency management. The comprehensive plugin set (jsx-a11y, react, react-hooks, storybook, unicorn, etc.) indicates a mature, opinion-driven linting setup. Verify that hoisting rules in.npmrccorrectly expose these tools to all packages.
47-54:lint-stagedconfiguration enforces strict linting on pre-commit.The
lint-stagedrules applypnpm exec prettier --writeandpnpm exec eslint --fix --max-warnings=0to staged files. The zero-warning threshold at the hook level enforces quality before commit, which is a strong practice. This complements per-package relaxed baselines—developers must fix violations before committing but have more lenience in non-commit checks..npmrc (4)
1-15: Core workspace configuration is well-organized and maintains stability.The reorganization with clear section comments improves maintainability. The
save-workspace-protocol = trueensures consistentworkspace:*protocol usage, and the core settings prioritize workspace packages, which is correct for a monorepo.
18-31: Dependency resolution strategy balances peer dependencies and strictness appropriately.The
auto-install-peers = truewithstrict-peer-dependencies = falsereduces friction while still providing safeguards. Theresolution-mode = highestprevents fragmentation. These settings align well with monorepo requirements.
34-47: Performance optimizations are well-chosen for both local and CI environments.The
prefer-offline = true,side-effects-cache = true, andprefer-frozen-lockfile = truesettings optimize for local development caching and CI consistency. Thenode-linker = isolatedensures compatibility with Node ecosystem tooling. These are solid choices.
50-59: Hoisting strategy update is mostly sound, but verify Prettier hoisting.The hoisting pattern now includes
vite,turbo, and*@plane/*namespace (namespace hoisting for all plane packages), which are appropriate. However,prettierwas removed from the hoisting list. Verify that this is intentional and doesn't cause issues with packages that invoke prettier via direct path references rather thanpnpm exec. If prettier is only used viapnpm exec prettier, then removing it from hoisting is acceptable (it will resolve via root node_modules). Consider adding a comment explaining why prettier is not hoisted.As noted in prior review comments,
enable-pre-post-scripts = falsewas flagged as critical in past reviews and has been removed—this is correct and allows theprepare: "husky"script to execute automatically on install.
| **/.next | ||
| **/.react-router | ||
| **/.turbo | ||
| **/.vercel | ||
| **/.vite | ||
| **/build | ||
| **/dist | ||
| **/node_modules | ||
| **/out | ||
| **/public | ||
| pnpm-lock.yaml |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Find all .prettierignore files in the repo
echo "=== All .prettierignore files ==="
find . -name ".prettierignore" -type f 2>/dev/null | sort
# Check if root .prettierignore exists
echo -e "\n=== Root .prettierignore content ==="
if [ -f ".prettierignore" ]; then
cat -n ".prettierignore"
else
echo "No .prettierignore at root"
fi
# List all files in packages directory to see structure
echo -e "\n=== Packages directory structure ==="
ls -la packages/ 2>/dev/null | head -20Repository: makeplane/plane
Length of output: 2069
🏁 Script executed:
# Get PR details if available via GitHub CLI
gh pr view --json title,body,description 2>/dev/null || echo "GitHub CLI not available or not a PR context"Repository: makeplane/plane
Length of output: 103
🏁 Script executed:
#!/bin/bash
# Sample check: compare a few package-level files to root
echo "=== Comparing root .prettierignore with sample packages ==="
# Get content of root
root_content=$(cat .prettierignore)
# Compare with packages/constants/.prettierignore
echo "packages/constants/.prettierignore matches root:"
if diff -q .prettierignore packages/constants/.prettierignore > /dev/null 2>&1; then
echo "YES (identical)"
else
echo "NO (different)"
echo "Diff:"
diff .prettierignore packages/constants/.prettierignore
fi
# Check a couple more
echo -e "\npackages/ui/.prettierignore matches root:"
if diff -q .prettierignore packages/ui/.prettierignore > /dev/null 2>&1; then
echo "YES (identical)"
else
echo "NO (different)"
fi
echo -e "\napps/web/.prettierignore matches root:"
if diff -q .prettierignore apps/web/.prettierignore > /dev/null 2>&1; then
echo "YES (identical)"
else
echo "NO (different)"
fi
# Count how many are identical to root
echo -e "\n=== Total .prettierignore files identical to root ==="
count=0
total=0
for file in $(find . -name ".prettierignore" -type f ! -path "././.prettierignore" 2>/dev/null); do
total=$((total + 1))
if diff -q .prettierignore "$file" > /dev/null 2>&1; then
count=$((count + 1))
fi
done
echo "Identical: $count / $total"Repository: makeplane/plane
Length of output: 372
🏁 Script executed:
#!/bin/bash
# Check git log for recent commits related to .prettierignore
echo "=== Recent commits mentioning prettierignore ==="
git log --oneline -20 --all --grep="prettierignore\|prettier.*ignore" 2>/dev/null || echo "Git history not available"
# Check if there's a prettier config file
echo -e "\n=== Prettier configuration files ==="
find . -maxdepth 2 -type f \( -name ".prettierrc*" -o -name "prettier.config.*" \) 2>/dev/null || echo "No prettier config files found"
# Check git diff or status to see what changed
echo -e "\n=== Check if this is a new PR (git status of .prettierignore files) ==="
git status --short packages/constants/.prettierignore 2>/dev/null || echo "Not a git status context"Repository: makeplane/plane
Length of output: 232
🏁 Script executed:
#!/bin/bash
# Check the prettier configuration to understand how it resolves ignores
echo "=== Root .prettierrc content ==="
cat -n .prettierrc
echo -e "\n=== Searching for prettier documentation or comments about ignore paths ==="
# Check if there are any monorepo-specific prettier configs
find . -maxdepth 3 -type f \( -name "*.md" -o -name "*.json" \) -exec grep -l "prettierignore\|prettier.*ignore" {} \; 2>/dev/null | head -10
# Check package.json files for prettier config
echo -e "\n=== Check root package.json for prettier config ==="
if [ -f "package.json" ]; then
cat package.json | grep -A 5 -B 5 "prettier" || echo "No prettier config in root package.json"
fi
# Look at a package.json in a subpackage
echo -e "\n=== Check packages/constants/package.json for prettier config ==="
if [ -f "packages/constants/package.json" ]; then
cat packages/constants/package.json | grep -A 5 -B 5 "prettier" || echo "No prettier config in package.json"
fiRepository: makeplane/plane
Length of output: 2139
🏁 Script executed:
#!/bin/bash
# Create a test to understand prettier's ignore resolution
cat > /tmp/test_prettier_behavior.md << 'EOF'
Prettier Ignore Path Resolution Analysis:
1. Root .prettierignore with "pnpm-lock.yaml":
- Working directory: repository root
- Pattern "pnpm-lock.yaml" matches: ./pnpm-lock.yaml ✓
2. Package-level .prettierignore (e.g., packages/constants/) with "pnpm-lock.yaml":
- Prettier resolves ignores relative to the current working directory when running
- When prettier runs from root with packages/constants/.prettierignore present:
a) Ignore files are resolved from where prettier is invoked (typically root)
b) "pnpm-lock.yaml" in packages/constants/.prettierignore still matches root pnpm-lock.yaml
c) BUT: package-level ignores have lower precedence than root ignores
d) Duplication is redundant but not necessarily broken
3. The real issue with package-level .prettierignore duplication:
- Maintenance burden: changes must be made in 22 places
- Inconsistency risk: files can diverge
- Ignores patterns like **/.next work same way at any level
Analysis:
- Original review's concern about pnpm-lock.yaml is partially valid:
If prettier is run from packages/constants/, then pnpm-lock.yaml won't match root
If prettier is run from root, package-level ignores are redundant
EOF
cat /tmp/test_prettier_behavior.mdRepository: makeplane/plane
Length of output: 1278
🏁 Script executed:
#!/bin/bash
# Check how prettier is configured to run - look for scripts and configs
echo "=== Root package.json scripts ==="
if [ -f "package.json" ]; then
jq -r '.scripts | to_entries[] | select(.key | contains("prettier")) | "\(.key): \(.value)"' package.json 2>/dev/null || echo "Could not parse scripts"
fi
# Check pnpm-workspace.yaml or similar
echo -e "\n=== Monorepo configuration files ==="
ls -la pnpm-workspace.yaml turbo.json 2>/dev/null | grep -v "cannot access" || echo "Standard monorepo files found or not present"
cat pnpm-workspace.yaml 2>/dev/null || echo "No pnpm-workspace.yaml"Repository: makeplane/plane
Length of output: 1173
Remove pnpm-lock.yaml from all per-package .prettierignore files; it belongs only in root.
Packages run prettier from their own directory (e.g., pnpm exec prettier --write . from packages/constants/), so pnpm-lock.yaml won't be found relative to the package root. The root pnpm-lock.yaml is already excluded by the root .prettierignore, making per-package references redundant and ineffective. Keep the 21 package-level files only for local patterns like **/.next, **/dist, etc., or consolidate entirely at root and remove per-package files.
🤖 Prompt for AI Agents
In packages/constants/.prettierignore lines 1-11, the file currently lists
pnpm-lock.yaml which is unnecessary and ineffective in per-package
.prettierignore files; remove the pnpm-lock.yaml entry so the file only contains
local ignore patterns (e.g., **/.next, **/dist, node_modules, etc.), leaving the
root .prettierignore to manage pnpm-lock.yaml centrally.
dff99b6 to
8369fef
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (3)
packages/propel/src/icons/index.ts (1)
67-68: Reorder exports to maintain alphabetical sorting.The exports are not in alphabetical order.
"./workspace"should come before"./workspace-icon".Apply this diff to fix the ordering:
-export * from "./workspace-icon"; export * from "./workspace"; +export * from "./workspace-icon";packages/decorators/tsconfig.json (1)
3-13: Include restriction looks good; consider future migration off legacy decorators.
"include": ["src"]is a sensible restriction for this package and pairs fine with the existingrootDir/pathssetup. Longer term, it would be good to plan a migration away fromexperimentalDecorators/emitDecoratorMetadatatoward TC39-compliant decorators, since the legacy pipeline is treated as deprecated in the repo guidelines.Based on learnings, this package may eventually want to align with the standard decorators guidance.
.npmrc (1)
1-59: pnpm workspace settings are coherent; just be mindful of frozen lockfile semantics.These
.npmrcsettings are well-aligned with a pnpm monorepo (workspace-preferring resolution, shared lockfile, isolated linker, side-effects cache, targeted public hoisting of toolchain packages). One behavioral change to keep in mind isprefer-frozen-lockfile = true, which will make plainpnpm installfail ifpnpm-lock.yamlis out of sync—developers and CI will need to explicitly opt out when intentionally updating dependencies. If that’s the goal, this looks good; otherwise, consider documenting the workflow or adjusting this flag.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (107)
.github/workflows/pull-request-build-lint-web-apps.yml(1 hunks).husky/pre-commit(1 hunks).npmrc(1 hunks).prettierignore(1 hunks).prettierrc(1 hunks)CODEOWNERS(1 hunks)CONTRIBUTING.md(3 hunks)apps/admin/.eslintignore(0 hunks)apps/admin/.eslintrc.cjs(0 hunks)apps/admin/.prettierignore(1 hunks)apps/admin/.prettierrc(0 hunks)apps/admin/package.json(1 hunks)apps/admin/postcss.config.cjs(0 hunks)apps/admin/tailwind.config.cjs(0 hunks)apps/admin/tsconfig.json(1 hunks)apps/api/.prettierignore(1 hunks)apps/live/.eslintignore(0 hunks)apps/live/.eslintrc.cjs(0 hunks)apps/live/.prettierignore(1 hunks)apps/live/.prettierrc(0 hunks)apps/live/package.json(1 hunks)apps/live/tsconfig.json(0 hunks)apps/proxy/.prettierignore(1 hunks)apps/space/.eslintignore(0 hunks)apps/space/.eslintrc.cjs(0 hunks)apps/space/.prettierignore(1 hunks)apps/space/.prettierrc(0 hunks)apps/space/core/components/issues/peek-overview/comment/comment-detail-card.tsx(0 hunks)apps/space/package.json(1 hunks)apps/space/postcss.config.cjs(0 hunks)apps/space/tailwind.config.cjs(0 hunks)apps/space/tsconfig.json(1 hunks)apps/web/.eslintignore(0 hunks)apps/web/.eslintrc.cjs(0 hunks)apps/web/.prettierignore(1 hunks)apps/web/.prettierrc(0 hunks)apps/web/ce/components/projects/create/attributes.tsx(1 hunks)apps/web/core/components/home/widgets/index.ts(0 hunks)apps/web/core/components/integration/guide.tsx(1 hunks)apps/web/core/components/issues/issue-detail-widgets/sub-issues/index.ts(1 hunks)apps/web/core/lib/polyfills/index.ts(1 hunks)apps/web/core/lib/polyfills/requestIdleCallback.ts(0 hunks)apps/web/package.json(1 hunks)apps/web/postcss.config.cjs(0 hunks)apps/web/tailwind.config.cjs(0 hunks)apps/web/tsconfig.json(1 hunks)eslint.config.mjs(1 hunks)package.json(1 hunks)packages/codemods/.prettierignore(1 hunks)packages/codemods/.prettierrc(0 hunks)packages/constants/.eslintignore(0 hunks)packages/constants/.eslintrc.cjs(0 hunks)packages/constants/.prettierignore(1 hunks)packages/constants/.prettierrc(0 hunks)packages/constants/package.json(1 hunks)packages/decorators/.eslintignore(0 hunks)packages/decorators/.eslintrc.cjs(0 hunks)packages/decorators/.prettierignore(1 hunks)packages/decorators/.prettierrc(0 hunks)packages/decorators/package.json(1 hunks)packages/decorators/tsconfig.json(1 hunks)packages/editor/.eslintignore(0 hunks)packages/editor/.eslintrc.cjs(0 hunks)packages/editor/.prettierignore(1 hunks)packages/editor/.prettierrc(0 hunks)packages/editor/package.json(1 hunks)packages/editor/tsconfig.json(1 hunks)packages/eslint-config/library.js(0 hunks)packages/eslint-config/next.js(0 hunks)packages/eslint-config/package.json(0 hunks)packages/eslint-config/server.js(0 hunks)packages/hooks/.eslintignore(0 hunks)packages/hooks/.eslintrc.cjs(0 hunks)packages/hooks/.prettierignore(1 hunks)packages/hooks/.prettierrc(0 hunks)packages/hooks/package.json(1 hunks)packages/i18n/.eslintignore(0 hunks)packages/i18n/.eslintrc.cjs(0 hunks)packages/i18n/.prettierignore(1 hunks)packages/i18n/.prettierrc(0 hunks)packages/i18n/package.json(1 hunks)packages/logger/.eslintignore(0 hunks)packages/logger/.eslintrc.cjs(0 hunks)packages/logger/.prettierignore(1 hunks)packages/logger/.prettierrc(0 hunks)packages/logger/package.json(1 hunks)packages/logger/tsconfig.json(0 hunks)packages/propel/.eslintignore(0 hunks)packages/propel/.eslintrc.cjs(0 hunks)packages/propel/.prettierignore(1 hunks)packages/propel/.prettierrc(0 hunks)packages/propel/package.json(1 hunks)packages/propel/postcss.config.js(0 hunks)packages/propel/src/icons/cycle/index.ts(1 hunks)packages/propel/src/icons/index.ts(3 hunks)packages/services/.eslintignore(0 hunks)packages/services/.eslintrc.cjs(0 hunks)packages/services/.prettierignore(1 hunks)packages/services/.prettierrc(0 hunks)packages/services/package.json(1 hunks)packages/services/src/dashboard/dashboard.service.ts(1 hunks)packages/services/src/developer/webhook.service.ts(1 hunks)packages/services/src/intake/intake.service.ts(1 hunks)packages/services/src/intake/issue.service.ts(1 hunks)packages/shared-state/.eslintignore(0 hunks)packages/shared-state/.eslintrc.js(0 hunks)packages/shared-state/.prettierignore(1 hunks)
⛔ Files not processed due to max files limit (22)
- packages/shared-state/.prettierrc
- packages/shared-state/package.json
- packages/tailwind-config/.prettierignore
- packages/types/.eslintrc.cjs
- packages/types/.prettierignore
- packages/types/.prettierrc
- packages/types/package.json
- packages/typescript-config/.prettierignore
- packages/typescript-config/base.json
- packages/ui/.eslintignore
- packages/ui/.eslintrc.cjs
- packages/ui/.prettierignore
- packages/ui/.prettierrc
- packages/ui/package.json
- packages/ui/postcss.config.js
- packages/ui/tailwind.config.js
- packages/utils/.eslintignore
- packages/utils/.eslintrc.cjs
- packages/utils/.prettierignore
- packages/utils/.prettierrc
- packages/utils/package.json
- turbo.json
💤 Files with no reviewable changes (55)
- packages/constants/.prettierrc
- packages/propel/postcss.config.js
- apps/live/.prettierrc
- apps/space/.prettierrc
- packages/editor/.eslintrc.cjs
- apps/web/core/components/home/widgets/index.ts
- apps/web/.eslintignore
- packages/i18n/.prettierrc
- packages/eslint-config/library.js
- packages/services/.eslintignore
- packages/propel/.prettierrc
- packages/services/.eslintrc.cjs
- apps/admin/.prettierrc
- apps/admin/.eslintignore
- apps/space/.eslintrc.cjs
- packages/logger/tsconfig.json
- packages/logger/.eslintrc.cjs
- apps/live/.eslintignore
- apps/web/postcss.config.cjs
- packages/constants/.eslintignore
- packages/logger/.prettierrc
- packages/i18n/.eslintrc.cjs
- apps/admin/.eslintrc.cjs
- packages/i18n/.eslintignore
- apps/live/.eslintrc.cjs
- packages/eslint-config/next.js
- apps/web/.eslintrc.cjs
- packages/editor/.prettierrc
- apps/web/core/lib/polyfills/requestIdleCallback.ts
- apps/admin/tailwind.config.cjs
- packages/hooks/.prettierrc
- packages/logger/.eslintignore
- packages/decorators/.eslintrc.cjs
- packages/codemods/.prettierrc
- packages/propel/.eslintignore
- packages/shared-state/.eslintignore
- packages/hooks/.eslintignore
- apps/space/core/components/issues/peek-overview/comment/comment-detail-card.tsx
- packages/decorators/.eslintignore
- apps/live/tsconfig.json
- apps/space/.eslintignore
- packages/shared-state/.eslintrc.js
- apps/admin/postcss.config.cjs
- packages/eslint-config/package.json
- packages/decorators/.prettierrc
- packages/services/.prettierrc
- apps/web/tailwind.config.cjs
- packages/constants/.eslintrc.cjs
- packages/eslint-config/server.js
- apps/web/.prettierrc
- apps/space/tailwind.config.cjs
- packages/editor/.eslintignore
- packages/hooks/.eslintrc.cjs
- packages/propel/.eslintrc.cjs
- apps/space/postcss.config.cjs
✅ Files skipped from review due to trivial changes (3)
- packages/codemods/.prettierignore
- eslint.config.mjs
- apps/proxy/.prettierignore
🚧 Files skipped from review as they are similar to previous changes (28)
- .husky/pre-commit
- CONTRIBUTING.md
- apps/admin/.prettierignore
- apps/web/ce/components/projects/create/attributes.tsx
- apps/web/core/components/integration/guide.tsx
- apps/admin/tsconfig.json
- packages/editor/package.json
- packages/decorators/.prettierignore
- packages/services/src/dashboard/dashboard.service.ts
- packages/propel/.prettierignore
- packages/hooks/.prettierignore
- packages/editor/.prettierignore
- .github/workflows/pull-request-build-lint-web-apps.yml
- packages/hooks/package.json
- apps/space/tsconfig.json
- packages/constants/.prettierignore
- packages/services/.prettierignore
- packages/i18n/package.json
- apps/space/package.json
- packages/services/src/intake/issue.service.ts
- packages/propel/src/icons/cycle/index.ts
- packages/editor/tsconfig.json
- packages/logger/package.json
- apps/web/core/lib/polyfills/index.ts
- packages/logger/.prettierignore
- apps/web/core/components/issues/issue-detail-widgets/sub-issues/index.ts
- .prettierignore
- apps/api/.prettierignore
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,mts,cts}
📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)
**/*.{ts,tsx,mts,cts}: Useconsttype parameters for more precise literal inference in TypeScript 5.0+
Use thesatisfiesoperator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicitisreturn types in filter/check functions
UseNoInfer<T>utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing inswitch(true)blocks for control flow analysis (TypeScript 5.3+)
Rely on narrowing from direct boolean comparisons for type guards
Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Use constant indices to narrow object/array properties (TypeScript 5.5+)
Use standard ECMAScript decorators (Stage 3) instead of legacyexperimentalDecorators
Useusingdeclarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Usewith { type: "json" }for import attributes; avoid deprecatedassertsyntax (TypeScript 5.3/5.8+)
Useimport typeexplicitly when importing types to ensure they are erased during compilation, respectingverbatimModuleSyntaxflag
Use.ts,.mts,.ctsextensions inimport typestatements (TypeScript 5.2+)
Useimport type { Type } from "mod" with { "resolution-mode": "import" }for specific module resolution contexts (TypeScript 5.3+)
Use new iterator methods (map, filter, etc.) if targeting modern environments (TypeScript 5.6+)
Utilize newSetmethods likeunion,intersection, etc., when available (TypeScript 5.5+)
UseObject.groupBy/Map.groupBystandard methods for grouping instead of external libraries (TypeScript 5.4+)
UsePromise.withResolvers()for creating promises with exposed resolve/reject functions (TypeScript 5.7+)
Use copying array methods (toSorted,toSpliced,with) for immutable array operations (TypeScript 5.2+)
Avoid accessing instance fields viasuperin classes (TypeScript 5....
Files:
packages/propel/src/icons/index.tspackages/services/src/developer/webhook.service.tspackages/services/src/intake/intake.service.ts
🧠 Learnings (20)
📓 Common learnings
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to **/*.sh : Use pnpm for package management - do not use npm or yarn
Learnt from: sriramveeraghanta
Repo: makeplane/plane PR: 7672
File: pnpm-workspace.yaml:8-9
Timestamp: 2025-08-29T08:45:15.953Z
Learning: The makeplane/plane repository uses pnpm v10.12.1, which supports onlyBuiltDependencies configuration in pnpm-workspace.yaml files.
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use standard ECMAScript decorators (Stage 3) instead of legacy `experimentalDecorators`
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to **/*.sh : Use pnpm for package management - do not use npm or yarn
Applied to files:
packages/shared-state/.prettierignoreapps/web/.prettierignorepackages/i18n/.prettierignorepackages/propel/package.jsonapps/live/.prettierignorepackages/services/package.jsonpackages/decorators/package.jsonapps/live/package.jsonapps/space/.prettierignorepackages/constants/package.json.npmrc
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to pnpm-workspace.yaml : Use pnpm-workspace.yaml for monorepo workspace configuration
Applied to files:
packages/shared-state/.prettierignoreapps/live/.prettierignorepackages/decorators/package.jsonpackages/constants/package.json.npmrc
📚 Learning: 2025-08-29T08:45:15.953Z
Learnt from: sriramveeraghanta
Repo: makeplane/plane PR: 7672
File: pnpm-workspace.yaml:8-9
Timestamp: 2025-08-29T08:45:15.953Z
Learning: The makeplane/plane repository uses pnpm v10.12.1, which supports onlyBuiltDependencies configuration in pnpm-workspace.yaml files.
Applied to files:
packages/shared-state/.prettierignorepackages/propel/package.jsonapps/web/package.jsonpackages/services/package.jsonapps/admin/package.jsonpackages/decorators/package.jsonapps/live/package.jsonpackages/constants/package.json.npmrc
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use standard ECMAScript decorators (Stage 3) instead of legacy `experimentalDecorators`
Applied to files:
packages/decorators/tsconfig.jsonapps/web/tsconfig.jsonpackages/decorators/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Treat legacy `experimentalDecorators`-style behavior as deprecated in favor of standard TC39-compliant decorators
Applied to files:
packages/decorators/tsconfig.jsonapps/web/tsconfig.jsonpackages/decorators/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `with { type: "json" }` for import attributes; avoid deprecated `assert` syntax (TypeScript 5.3/5.8+)
Applied to files:
packages/decorators/tsconfig.jsonapps/web/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `.ts`, `.mts`, `.cts` extensions in `import type` statements (TypeScript 5.2+)
Applied to files:
packages/decorators/tsconfig.jsonapps/web/tsconfig.json
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.json
Applied to files:
packages/i18n/.prettierignorepackages/propel/package.jsonapps/live/.prettierignoreapps/web/package.jsonpackages/services/package.jsonapps/admin/package.jsonpackage.jsonpackages/decorators/package.jsonapps/live/package.jsonpackages/constants/package.json.npmrc
📚 Learning: 2025-10-06T01:45:11.248Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7888
File: packages/propel/src/table/table.stories.tsx:1-1
Timestamp: 2025-10-06T01:45:11.248Z
Learning: When using Storybook with React + Vite framework, Meta and StoryObj types should be imported from "storybook/react-vite", not from "storybook/react". This is the correct pattern per Storybook's official documentation for framework-specific type imports.
Applied to files:
packages/propel/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Applied to files:
apps/web/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `const` type parameters for more precise literal inference in TypeScript 5.0+
Applied to files:
apps/web/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use copying array methods (`toSorted`, `toSpliced`, `with`) for immutable array operations (TypeScript 5.2+)
Applied to files:
apps/web/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use constant indices to narrow object/array properties (TypeScript 5.5+)
Applied to files:
apps/web/tsconfig.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Utilize narrowing in `switch(true)` blocks for control flow analysis (TypeScript 5.3+)
Applied to files:
apps/web/tsconfig.json
📚 Learning: 2025-05-14T13:16:23.323Z
Learnt from: vamsikrishnamathala
Repo: makeplane/plane 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/`.
Applied to files:
apps/web/tsconfig.json
📚 Learning: 2025-10-09T20:42:31.843Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7922
File: apps/admin/app/(all)/(dashboard)/ai/form.tsx:19-19
Timestamp: 2025-10-09T20:42:31.843Z
Learning: In the makeplane/plane repository, React types are globally available through TypeScript configuration. Type annotations like React.FC, React.ReactNode, etc. can be used without explicitly importing the React namespace. The codebase uses the modern JSX transform, so React imports are not required for JSX or type references.
Applied to files:
apps/web/tsconfig.json
📚 Learning: 2025-10-21T17:22:05.204Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7989
File: apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx:45-46
Timestamp: 2025-10-21T17:22:05.204Z
Learning: In the makeplane/plane repository, the refactor from useParams() to params prop is specifically scoped to page.tsx and layout.tsx files in apps/web/app (Next.js App Router pattern). Other components (hooks, regular client components, utilities) should continue using the useParams() hook as that is the correct pattern for non-route components.
Applied to files:
apps/web/tsconfig.json
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to **/*.sh : Run tests in a specific package using pnpm --filter plane/<package_name> run test
Applied to files:
packages/constants/package.json
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to pnpm-lock.yaml : Use pnpm-lock.yaml as the lockfile for dependency management
Applied to files:
.npmrc
⏰ 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 web apps
🔇 Additional comments (21)
packages/i18n/.prettierignore (1)
1-11: Prettier ignore patterns are consistent and correct.The recursive glob patterns appropriately exclude build outputs, tool caches, dependencies, and lockfiles from formatting across all directory depths. The standardization aligns well with the monorepo structure.
packages/shared-state/.prettierignore (1)
1-11: New .prettierignore file follows consolidation pattern.Adding this Prettier ignore file extends consistent ignore patterns to
packages/shared-state. The patterns match the standardized approach across the monorepo.apps/live/.prettierignore (1)
1-11: Recursive glob patterns improve ignore coverage consistency.The migration to recursive
**/patterns ensures proper exclusion across all nesting levels inapps/live. This aligns the ignore behavior with other apps/packages in the monorepo.apps/web/.prettierignore (1)
1-11: Standardized ignore patterns maintain broad coverage forapps/web.The update to recursive glob patterns ensures consistency across the monorepo while properly excluding build outputs, caches, and dependencies at all directory depths.
apps/space/.prettierignore (1)
1-11: Standardized patterns and typo fix improveapps/spaceignore coverage.The migration to recursive globs and correction of
.turbo(previously.tubro) ensures both consistency and correctness across the monorepo's Prettier ignore configuration.packages/services/src/developer/webhook.service.ts (1)
105-106: LGTM! Named export added for flexibility.The addition of a named export alongside the existing default export is a clean, backward-compatible change that allows consumers to use either import style. This aligns with the pattern applied consistently across other service classes in this PR.
packages/services/src/intake/intake.service.ts (1)
9-10: LGTM! Named export added for flexibility.The addition of a named export alongside the existing default export follows the same backward-compatible pattern applied across service classes in this PR. This allows consumers to choose their preferred import style.
packages/propel/src/icons/index.ts (1)
32-32: The review comment is based on inaccurate information.The AI summary claims
IconPropswas removed, but verification shows:
IconPropsis still defined inpackages/propel/src/icons/icon.tsx(line 7)- It is still exported via
packages/propel/src/icons/index.tsline 32 (export * from "./icon")- Git diff shows no changes to either file in this PR—only the ESLint configuration was modified
- No downstream code in the repository imports or uses
IconProps, so there is no breaking change impactThere is no removal to verify or breaking change to address.
CODEOWNERS (1)
1-1: Explicit ownership for eslint.config.mjs is helpful.Assigning
eslint.config.mjsto@lifeiscontentmakes future changes and reviews for the central ESLint config clearer..prettierrc (1)
2-15: Centralized Prettier config looks consistent; just confirm plugin + override wiring.The root
$schema,@prettier/plugin-oxcplugin entry, and codemods-specificprintWidthoverride are a good consolidation step. Please double-check that:
@prettier/plugin-oxcis declared at the workspace level wherepnpm exec prettierresolves it, andpackages/codemods/**/*matches the actual codemods directory structure you intend to format at width 80.packages/propel/package.json (1)
7-18: Propel lint/format scripts correctly aligned to pnpm exec.Switching
check:lint/fix:lintandcheck:format/fix:formatto usepnpm exec eslint/prettierwith a.target matches the workspace-wide tooling approach and the pnpm recommendation for command execution. The elevated--max-warningsvalue looks consistent with using a baseline during the ESLint migration; you can iterate that down later as warnings are fixed.apps/web/tsconfig.json (1)
3-19: Path aliases look coherent; verify all existing@/…imports still resolve as expected.The updated
pathskeep@/plane-web/*pointing at./ce/*(per prior repo conventions) and add clearer aliases likece/*andapp/*while mapping@/*to./core/*. That’s a sensible structure; just confirm there are no remaining@/…imports that previously relied on@/*resolving to anything outsidecore, and that React Router build/typegen still works with these aliases.packages/services/package.json (1)
14-22: Services lint/format scripts are correctly migrated to pnpm exec.Using
pnpm exec eslintandpnpm exec prettierwith.as the target keeps this package consistent with the repo’s pnpm-based tooling setup and central Prettier/ESLint configs. Behavior should remain the same aside from the standardized execution wrapper.apps/admin/package.json (1)
8-18: Admin lint/format scripts now match the standardized pnpm-based tooling.The move to
pnpm exec eslint/prettierplus the updated--max-warningsthreshold follows the same pattern as other apps/packages in this PR and respects the repo’s pnpm-first convention. No issues from a config perspective.apps/live/package.json (1)
18-18: Script migration to pnpm exec looks good.The migration to
pnpm execfor lint/format commands follows the established pattern and aligns with the monorepo tooling strategy. Themax-warnings=160threshold is reasonable for this package.Also applies to: 20-22
packages/decorators/package.json (1)
15-15: Script migration consistent with monorepo pattern.The pnpm exec migration and
max-warnings=29threshold follow the established pattern. The lower threshold for this decorators package suggests stricter linting requirements, which is appropriate for core utilities.Also applies to: 17-19
apps/web/package.json (1)
13-13:⚠️ Verify max-warnings=14367 — potential regression or inconsistency with past review.The past review (lines 13 noted) flagged
max-warnings=14367as exceptionally high and marked it as "Addressed in commit 8434c76". However, the current code still shows 14367. This represents accepting approximately 14,000+ ESLint violations.Clarify: Has this threshold been properly reduced, or does the current code reflect a pre-fix state? If this is the latest state, the threshold should be significantly lowered (aim for ≤1,435, matching the next-highest package) after fixing auto-correctable issues.
Also applies to: 16-16
packages/constants/package.json (1)
10-10: Script migration aligned with monorepo standards.The pnpm exec migration and
max-warnings=30threshold are consistent with the established pattern. The strict threshold is appropriate for a constants package.Also applies to: 12-14
package.json (3)
20-20: Husky prepare hook and lint-staged configuration look sound.The
preparescript will properly initialize Husky git hooks, and the lint-staged config correctly usespnpm execwith appropriate tool invocations. The strict--max-warnings=0for staged ESLint checks ensures pre-commit linting quality.Also applies to: 45-51
23-43: Centralized ESLint v9 configuration is properly established and discoverable.Verification confirms:
- ✓ Centralized ESLint config file exists at root:
eslint.config.mjs(ESLint v9 flat config format)- ✓ Config is properly exported via
defineConfigand uses correct ESLint v9 syntax- ✓ All ESLint plugins listed in package.json are imported and configured:
@eslint/js,eslint-plugin-import,eslint-plugin-jsx-a11y,eslint-plugin-promise,eslint-plugin-react,eslint-plugin-react-hooks,eslint-plugin-react-refresh,@vitest/eslint-plugineslint-plugin-storybookis commented out (as noted in TODO on line 47)- ✓ TypeScript support via
typescript-eslintis correctly configured:
tseslint.configs.recommendedTypeCheckedappliedprojectService: trueenabled for type checking- TypeScript resolver configured with monorepo support (
{apps,packages}/*/tsconfig.json)The configuration supports multiple file types (.ts, .tsx, .js, .cjs, .jsx) and integrates Prettier via
eslint-config-prettier/flat.
24-24: Line 41 reference in the review comment is incorrect — it points to theprettierdependency, not@prettier/plugin-oxc.The review comment claims "Also applies to: 41-41," but line 41 contains
"prettier": "3.6.2", not@prettier/plugin-oxc. The only occurrence of@prettier/plugin-oxcin the codebase is at line 24 in the rootpackage.json.The root
.prettierrccorrectly references this plugin ("plugins": ["@prettier/plugin-oxc"), and it resides only at the root level—not in any subpackages. This is the expected pattern: a root-level Prettier configuration uses a root-level dev dependency for shared tooling across the monorepo. No subpackages currently have (or had) this dependency.The concern about inconsistency appears to be based on a misunderstanding of the PR changes or incorrect line references. The current state shows proper alignment: root dependency + root config = consistent setup.
Likely an incorrect or invalid review comment.
Description
Type of Change
Screenshots and Media (if applicable)
Test Scenarios
References
Summary by CodeRabbit
Chores
Refactor
New Features
✏️ Tip: You can customize this high-level summary in your review settings.