-
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
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 a centralized ESLint v9 config, wire up Husky + lint-staged, standardize Prettier and .prettierignore files, normalize TypeScript configs and path aliases, remove many per-package ESLint/Prettier files, update pnpm/.npmrc settings, and inline a requestIdleCallback polyfill. 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: lint staged files
ESLint-->>LintStaged: results
LintStaged->>Prettier: format staged files
Prettier-->>LintStaged: results
LintStaged-->>Husky: success / failure
alt success
Husky->>Git: allow commit
else failure
Husky->>Dev: block commit, show errors
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)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (2)
🧰 Additional context used📓 Path-based instructions (1)**/*.{js,mjs,cjs}📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)
Files:
🧠 Learnings (2)📓 Common learnings📚 Learning: 2025-11-25T10:17:39.709ZApplied to files:
⏰ 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)
🔇 Additional comments (3)
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.
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.
8369fef to
25a531b
Compare
25a531b to
8047ebc
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: 8
♻️ Duplicate comments (1)
packages/constants/.prettierignore (1)
9-9: Removepnpm-lock.yaml— regression from prior review.This was previously flagged as a major issue and marked as addressed in prior commits, but the entry persists. Lockfile ignores must be centralized in root
.prettierignoreonly, as per-package entries are ineffective when prettier runs from package directories.node_modules/ out/ - pnpm-lock.yaml storybook-static/Please verify that the prior fix (commits c31a225–25a531b) was completed or explain if this change intentionally reintroduces the entry.
🧹 Nitpick comments (6)
packages/eslint-config/.prettierignore (1)
1-10: Removepnpm-lock.yamlfrom per-package.prettierignorefiles; keep only in root.Including
pnpm-lock.yamlin per-package.prettierignorefiles is redundant. When prettier runs from a package directory (e.g.,prettier --write .frompackages/eslint-config/), the relative pathpnpm-lock.yamlwill not match the root-level lockfile. This entry should be centralized in the root.prettierignoreonly, where it applies to all executed prettier commands via the configuration discovery mechanism. The duplication across all 23.prettierignorefiles appears to be part of a single commit pattern; consolidating to the root version will reduce maintenance burden.apps/admin/tsconfig.json (1)
11-18: Clarify overlapping path mappings and unusual entries.The path mappings include several entries that may warrant review:
- Line 11:
"package.json": ["./package.json"]— This is unusual. Path mappings are typically for code imports. Is this for JSON imports? If so, useimport pkg from "./package.json" with { type: "json" }per TypeScript 5.3+ (as noted in learnings).- Lines 13–14:
"@/app/*"and"@/*"overlap; TypeScript uses the most specific match, so this works, but could be confusing. Document the intent if these are intentionally different (e.g., app-specific vs. core utilities).If
package.jsonimport is needed, consider using import attributes syntax instead of path mapping. Review the semantic distinction between@/app/*and@/*to ensure the mapping aligns with actual directory structure and intended consumption patterns.eslint.config.mjs (2)
1-64: Flat config composition looks aligned with ESLint 9 / TS-ESLint best practicesThe overall structure (globalIgnores,
eslint.configs.recommended,tseslint.configs.recommendedTypeChecked, React/a11y/promise/vitest/react-refresh presets) matches the documented flat-config approach and should give good coverage across apps. One thing to double‑check:tsconfigRootDir: import.meta.dirnamerelies on modern Node ESM support—make sure the Node version used bypnpm lint/CI supportsimport.meta.dirname, or fall back to the classicfileURLToPath(new URL(".", import.meta.url))pattern if you need broader compatibility. Also, since.storybook/**is globally ignored, remember to remove that pattern when you eventually enable Storybook linting so those files actually get checked.
65-130: Remove or properly wire thejsdoc/require-jsdocruleYou’re disabling
jsdoc/require-jsdocwithout importing or configuringeslint-plugin-jsdocanywhere in this flat config. Referencing a plugin rule when the plugin itself isn’t registered can produce “Definition for rule 'jsdoc/…' was not found” noise depending on ESLint version. If you don’t intend to use jsdoc linting, it’s cleaner to drop this rule entry entirely; if you do, explicitly importeslint-plugin-jsdocand include its flat config before overriding this rule.apps/space/package.json (1)
13-17: Confirm intended scope and loosened warning threshold for lint/format scriptsSwitching to
eslint ./prettier --check .expands coverage to everything underapps/space(including config and ancillary files), and raising--max-warningsto932means these scripts are unlikely to fail builds on new warnings. If that’s intentional for this app, it’s fine; if you still want warnings to gate CI, consider a lower, shared threshold or using--max-warnings=0in your central check workflow instead.packages/hooks/package.json (1)
18-22: Script changes broaden coverage; validate the new--max-warnings=60policyRunning ESLint/Prettier over
.will now include any new config or helper files you add underpackages/hooks, which is generally a nice safety net. The jump from 6 to 60 allowed warnings makes the checks less strict but still meaningfully bounded; just confirm this aligns with how you want CI to behave for a shared hooks library (vs. keeping a tighter cap or using--max-warnings=0in a top‑level job).
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 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(1 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/.prettierignore(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(1 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/propel/tsconfig.json(1 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/services/tsconfig.json(1 hunks)
⛔ Files not processed due to max files limit (18)
- packages/shared-state/.eslintignore
- packages/shared-state/.eslintrc.js
- packages/shared-state/.prettierignore
- packages/shared-state/.prettierrc
- packages/shared-state/package.json
- packages/shared-state/tsconfig.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
💤 Files with no reviewable changes (51)
- packages/editor/.prettierrc
- apps/web/.eslintignore
- packages/propel/.prettierrc
- apps/live/.eslintignore
- apps/admin/.prettierrc
- apps/space/.prettierrc
- apps/space/.eslintrc.cjs
- packages/eslint-config/library.js
- packages/codemods/.prettierrc
- packages/eslint-config/server.js
- apps/space/postcss.config.cjs
- apps/live/.eslintrc.cjs
- apps/web/core/components/home/widgets/index.ts
- packages/editor/.eslintignore
- apps/admin/postcss.config.cjs
- packages/services/.eslintrc.cjs
- packages/propel/.eslintrc.cjs
- apps/web/core/lib/polyfills/requestIdleCallback.ts
- packages/eslint-config/package.json
- packages/eslint-config/next.js
- packages/logger/.eslintignore
- apps/space/.eslintignore
- packages/hooks/.eslintrc.cjs
- packages/propel/postcss.config.js
- apps/web/tailwind.config.cjs
- apps/web/.eslintrc.cjs
- packages/hooks/.eslintignore
- packages/i18n/.prettierrc
- apps/web/.prettierrc
- apps/space/core/components/issues/peek-overview/comment/comment-detail-card.tsx
- packages/decorators/.eslintignore
- packages/logger/.eslintrc.cjs
- packages/editor/.eslintrc.cjs
- packages/i18n/.eslintignore
- packages/logger/.prettierrc
- apps/admin/.eslintignore
- packages/i18n/.eslintrc.cjs
- packages/decorators/.eslintrc.cjs
- apps/admin/tailwind.config.cjs
- apps/admin/.eslintrc.cjs
- packages/services/.eslintignore
- packages/constants/.eslintignore
- apps/live/.prettierrc
- packages/constants/.eslintrc.cjs
- packages/decorators/.prettierrc
- apps/web/postcss.config.cjs
- packages/constants/.prettierrc
- packages/services/.prettierrc
- packages/propel/.eslintignore
- packages/hooks/.prettierrc
- apps/space/tailwind.config.cjs
✅ Files skipped from review due to trivial changes (1)
- packages/decorators/.prettierignore
🚧 Files skipped from review as they are similar to previous changes (36)
- .prettierrc
- packages/services/src/intake/issue.service.ts
- packages/i18n/package.json
- apps/web/core/lib/polyfills/index.ts
- apps/web/core/components/integration/guide.tsx
- .husky/pre-commit
- packages/services/package.json
- packages/services/src/intake/intake.service.ts
- apps/admin/package.json
- packages/services/src/dashboard/dashboard.service.ts
- apps/live/tsconfig.json
- packages/logger/.prettierignore
- apps/web/tsconfig.json
- packages/propel/.prettierignore
- apps/space/tsconfig.json
- .prettierignore
- apps/proxy/.prettierignore
- .github/workflows/pull-request-build-lint-web-apps.yml
- packages/decorators/package.json
- apps/web/ce/components/projects/create/attributes.tsx
- packages/decorators/tsconfig.json
- apps/web/core/components/issues/issue-detail-widgets/sub-issues/index.ts
- apps/live/package.json
- packages/codemods/.prettierignore
- packages/propel/src/icons/cycle/index.ts
- CONTRIBUTING.md
- packages/propel/package.json
- CODEOWNERS
- packages/editor/package.json
- apps/web/.prettierignore
- apps/web/package.json
- packages/logger/package.json
- apps/space/.prettierignore
- package.json
- packages/services/.prettierignore
- packages/hooks/.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/developer/webhook.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 (27)
📓 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: Prioritize using modern features and best practices introduced in TypeScript versions 5.0 through 5.8
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: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-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:
eslint.config.mjspackages/services/tsconfig.jsonpackages/propel/tsconfig.jsonpackages/logger/tsconfig.jsonpackages/editor/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 standard ECMAScript decorators (Stage 3) instead of legacy `experimentalDecorators`
Applied to files:
eslint.config.mjspackages/services/tsconfig.jsonpackages/propel/tsconfig.jsonpackages/logger/tsconfig.jsonpackages/editor/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} : Treat legacy `experimentalDecorators`-style behavior as deprecated in favor of standard TC39-compliant decorators
Applied to files:
eslint.config.mjspackages/services/tsconfig.jsonpackages/logger/tsconfig.jsonpackages/hooks/package.jsonpackages/constants/package.jsonpackages/editor/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.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.mjsapps/api/.prettierignore
📚 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/services/tsconfig.jsonpackages/propel/tsconfig.jsonpackages/logger/tsconfig.jsonpackages/editor/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 `.ts`, `.mts`, `.cts` extensions in `import type` statements (TypeScript 5.2+)
Applied to files:
packages/services/tsconfig.jsonpackages/logger/tsconfig.jsonpackages/editor/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} : Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Applied to files:
packages/services/tsconfig.jsonpackages/propel/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 `NoInfer<T>` utility to block inference for specific type arguments when they should be determined by other arguments
Applied to files:
packages/services/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} : Ensure variables are initialized before use to avoid errors with never-initialized variables (TypeScript 5.7+)
Applied to files:
packages/services/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} : Utilize narrowing in `switch(true)` blocks for control flow analysis (TypeScript 5.3+)
Applied to files:
packages/services/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} : Avoid `enum`s if the project prefers erasable syntax, using `const` objects or unions instead (TypeScript 5.8+)
Applied to files:
packages/services/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:
packages/services/tsconfig.jsonpackages/propel/tsconfig.jsonpackages/editor/tsconfig.jsonapps/admin/tsconfig.json
📚 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:
packages/services/tsconfig.jsonpackages/propel/tsconfig.jsonpackages/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 {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.json
Applied to files:
packages/hooks/package.jsonpackages/constants/package.jsonpackages/i18n/.prettierignore.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:
apps/space/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} : Rely on narrowing from direct boolean comparisons for type guards
Applied to files:
packages/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/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 `import type` explicitly when importing types to ensure they are erased during compilation, respecting `verbatimModuleSyntax` flag
Applied to files:
apps/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 copying array methods (`toSorted`, `toSpliced`, `with`) for immutable array operations (TypeScript 5.2+)
Applied to files:
apps/admin/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/admin/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:
.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 **/*.sh : Use pnpm for package management - do not use npm or yarn
Applied to files:
.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-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 (13)
apps/admin/.prettierignore (1)
1-10: Standardization of Prettier ignores looks good.The changes properly normalize directory entries with trailing slashes for recursive matching, fix the
.tubrotypo to.turbo, and add sensible common outputs (dist/,out/), the lock file, and Storybook build artifacts. These additions align well with the PR's objective to centralize and standardize Prettier configuration across the monorepo.packages/constants/package.json (3)
10-10: Verify the max-warnings=30 threshold is intentional.The max-warnings value is being relaxed from
0to30across lint scripts. Confirm this is a deliberate repo-wide policy change rather than an oversight, and ensure it aligns with project linting standards for this package.Also applies to: 13-13
12-12: Ensure root-level .prettierignore is properly configured.The formatting commands now use
.instead of explicit glob patterns. This simplification relies on a root-level.prettierignorefile to exclude unwanted directories (e.g.,node_modules,dist). Verify that the root configuration is in place and will prevent unintended file formatting in this package.Also applies to: 14-14
20-26: Verify that root-level ESLint and Prettier configurations replace removed package-level dependencies.The package-level
@plane/eslint-configand@prettier/plugin-oxcdevDependencies have been removed. Ensure that:
- A root-level ESLint configuration (e.g.,
eslint.config.jsor.eslintrc.*) is present and properly configured for this package.- Removal of the
@prettier/plugin-oxcplugin does not affect formatting behavior (e.g., if it was used for Rust/Oxc-specific transformations).- The package can resolve the centralized ESLint config without these local dependencies.
Verify these assumptions across the PR context to confirm the migration is complete.
packages/i18n/.prettierignore (1)
1-10: Prettier ignore patterns look good.The consolidated patterns appropriately cover build artifacts, cache directories, lock files, and dependencies. Format is correct—directory patterns use trailing slashes consistently, and the file pattern (
pnpm-lock.yaml) correctly omits the trailing slash. This aligns well with the PR's objective to standardize Prettier configuration across the repository.packages/services/src/developer/webhook.service.ts (1)
105-106: LGTM! Dual export pattern aligns with service module conventions.The addition of a named export alongside the existing default export provides flexibility for consumers while maintaining backward compatibility. This matches the pattern established in DashboardService, IntakeService, and IntakeIssueService.
.npmrc (1)
1-47: Configuration reorganization aligns well with pnpm monorepo best practices.The refactored structure with clear sections (Core Workspace Behavior, Dependency Resolution, Performance Optimizations) significantly improves maintainability. The individual settings are sound:
prefer-workspace-packages+link-workspace-packages+shared-workspace-lockfileeliminate node_modules duplication.resolution-mode = highest+auto-install-peers = true+strict-peer-dependencies = falsestrike a reasonable balance for a large monorepo where peer dependency strictness is less critical than installation stability.prefer-frozen-lockfile = truein CI prevents lockfile drift (appropriate for this context).node-linker = isolatedis the modern, recommended linker strategy.packages/editor/tsconfig.json (2)
11-12: Path alias alignment looks good.The reordering and addition of
"./"prefixes to path targets aligns with the repo-wide TypeScript configuration refactoring and the removal ofbaseUrl.
4-7: This is a repo-wide pattern, not an anomaly in packages/editor.All applications (admin, live, space, web) and most packages (editor, propel, services, ui, utils) explicitly override the strict compiler options from the base config to
false. The base config enforcesnoUnusedLocals: true,noUnusedParameters: true,noImplicitReturns: true, andexactOptionalPropertyTypes: true, but every consuming project disables these checks.This appears to be a deliberate, repo-wide strategy rather than a localized issue requiring individual attention. If the intent is to enforce strict checking, this requires a coordinated refactoring across the monorepo, not a fix to packages/editor alone.
Likely an incorrect or invalid review comment.
apps/admin/tsconfig.json (1)
9-9: Verify removal of "node" from types array.Removing
"node"from the types array means Node.js ambient types are no longer included. If this app uses Node globals (e.g.,process,Buffer), type errors may appear.Confirm that:
- This app doesn't rely on Node.js ambient types
- Or if it does, "node" should remain in the types array
packages/propel/tsconfig.json (1)
4-8: This suppression pattern is systematic across the codebase and intentional.Disabling
exactOptionalPropertyTypes,noUnusedLocals, andnoImplicitReturnsinpackages/propel/tsconfig.jsonis not an isolated issue—it's part of a deliberate bulk lint suppression applied to multiple packages (utils, ui, editor, services, shared-state) and apps (web, admin, space, live). The base configuration enables all three flags, but this codebase has standardized on disabling them in these specific packages, likely due to the bulk "fix: lint" commit.The original comparison to
packages/servicesis inaccurate: services does not disablenoImplicitReturns, whereas propel does. The pattern shows this is a team decision, not an oversight or inconsistency.Likely an incorrect or invalid review comment.
packages/propel/src/icons/index.ts (1)
32-32: No action required. The change to useexport * from "./icon"instead of an explicit type export is correct and does not break functionality.IconPropsis defined as anexport interfacein icon.tsx, which means it is included in wildcard exports. Additionally, no code in the codebase importsIconPropsfrom the index file—all icon imports use specific component names (e.g.,ChevronDownIcon,CloseIcon). The change is consistent with the wildcard export pattern used throughout the rest of index.ts.Likely an incorrect or invalid review comment.
eslint.config.mjs (1)
132-165: Per‑file overrides for TS, JS, and CJS look consistent with TS‑ESLint docsThe TypeScript override extending
importPlugin.flatConfigs.recommended+.typescriptwith a workspace‑wideprojectpattern andimport/internal-regexlooks good for multi‑package resolution, and the dedicated JS/JSX override usingtseslint.configs.disableTypeCheckedis exactly how TS‑ESLint recommends avoiding unnecessary type‑checking on plain JS. The CJS‑specific globals and@typescript-eslint/no-require-imports: offfor*.cjsare also appropriate. No changes needed here from my side.
| # ------------------------------ | ||
| # Hoisting Strategy | ||
| # ------------------------------ | ||
|
|
||
| # Hoist commonly used tools to the root to prevent duplicates and speed up resolution | ||
| public-hoist-pattern[] = typescript | ||
| public-hoist-pattern[] = eslint | ||
| public-hoist-pattern[] = *@plane/* | ||
| public-hoist-pattern[] = vite | ||
| public-hoist-pattern[] = turbo |
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
# Description: Verify that hoisted packages are actually installed and used across the monorepo.
echo "=== Checking for presence of hosted tools in package.json files ==="
# Check root and major app/package package.json files for these dependencies
for pattern in typescript eslint vite turbo; do
echo -e "\n--- Searching for $pattern dependency ---"
fd 'package\.json$' -x grep -l "\"$pattern\"" {} \; | head -10
done
echo -e "\n=== Checking for @plane scoped packages ==="
fd 'package\.json$' -x grep -l '"@plane/' {} \; | head -10
echo -e "\n=== Checking if prettier is used anywhere (as potential hoisting candidate) ==="
rg -n 'prettier' --type=json | head -20Repository: makeplane/plane
Length of output: 2550
Confirm prettier should be added to public-hoist-pattern.
The hoisting patterns are mostly appropriate:
- typescript: ✓ Justified – used across 9+ packages for compilation
- vite: ✓ Justified – used in 3 apps (space, web, admin) for dev builds
- @plane/: ✓ Justified – used across 10+ scoped packages
- eslint and turbo: Consider removing – these are root-only devDependencies and workspace tools; hoisting them typically doesn't benefit child packages
- prettier: Add to hoisting patterns – it's actively used across 8+ packages (utils, ui, types, services, propel, shared-state, hooks, i18n) for formatting tasks
Suggested revision:
public-hoist-pattern[] = typescript
public-hoist-pattern[] = *@plane/*
public-hoist-pattern[] = vite
public-hoist-pattern[] = prettier
🤖 Prompt for AI Agents
In .npmrc around lines 50 to 59, update the public-hoist-pattern list: remove
eslint and turbo entries (they are root-only dev tools and need not be hoisted)
and add prettier to the hoist list so formatting dependency is available to
child packages; ensure final patterns include typescript, *@plane/*, vite, and
prettier in that section.
| "noImplicitOverride": false, | ||
| "exactOptionalPropertyTypes": false, | ||
| "noUnusedParameters": false, | ||
| "noUnusedLocals": false, |
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:
cat apps/admin/tsconfig.jsonRepository: makeplane/plane
Length of output: 728
🏁 Script executed:
fd "react-router.json" --type fRepository: makeplane/plane
Length of output: 103
🏁 Script executed:
git diff HEAD~1 apps/admin/tsconfig.json 2>/dev/null || git show HEAD:apps/admin/tsconfig.json 2>/dev/null || echo "Git history unavailable"Repository: makeplane/plane
Length of output: 728
🏁 Script executed:
rg "noImplicitOverride|exactOptionalPropertyTypes|noUnusedParameters|noUnusedLocals" --type json --max-count=10 -B 2 -A 2Repository: makeplane/plane
Length of output: 5262
🏁 Script executed:
cat packages/typescript-config/react-router.jsonRepository: makeplane/plane
Length of output: 483
🏁 Script executed:
cat packages/typescript-config/base.json | head -50Repository: makeplane/plane
Length of output: 909
🏁 Script executed:
rg "noImplicitOverride|noUnusedLocals|noUnusedParameters|exactOptionalPropertyTypes" --type md --max-count=5Repository: makeplane/plane
Length of output: 41
🏁 Script executed:
git log --oneline --all -- apps/admin/tsconfig.json 2>/dev/null | head -5 || echo "Git history unavailable"Repository: makeplane/plane
Length of output: 154
Strictness flags disabled without documented justification.
The four compiler options (noImplicitOverride, exactOptionalPropertyTypes, noUnusedParameters, noUnusedLocals) are explicitly set to false, overriding the strict settings from the base configuration. This pattern is systematic across the codebase (apps/web, apps/space, apps/live, and multiple packages), but lacks documented reasoning.
Clarify:
- Why these flags are disabled across the codebase
- Whether this decision is intentional and permanent, or planned to be addressed
- If code fixes would be preferable to global suppression
🤖 Prompt for AI Agents
In apps/admin/tsconfig.json lines 4-7 the compiler strictness flags
noImplicitOverride, exactOptionalPropertyTypes, noUnusedParameters, and
noUnusedLocals are explicitly set to false without documented justification;
either restore strictness by removing these overrides so the file inherits the
base config or flip each flag to true and fix resulting type/unused issues, and
if disabling is intentional add a short inline comment in this tsconfig (or a
central CONTRIBUTING/TSCONFIG.md entry) stating why each flag is disabled,
whether it’s temporary or permanent, and a planned remediation timeline so
reviewers know this is deliberate and tracked.
| dist/ | ||
| node_modules/ | ||
| out/ | ||
| 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.
Remove pnpm-lock.yaml from per-package .prettierignore.
Same issue as other package-level files in this PR—lockfiles should be ignored centrally from the repository root.
node_modules/
out/
- pnpm-lock.yaml
storybook-static/📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| pnpm-lock.yaml | |
| node_modules/ | |
| out/ | |
| storybook-static/ |
🤖 Prompt for AI Agents
In apps/api/.prettierignore around line 9, remove the line "pnpm-lock.yaml" so
per-package prettier ignores no longer include the lockfile; ensure that
lockfiles are ignored centrally from the repository root .prettierignore (or
.gitignore) instead and do not reintroduce package-level lockfile ignores in
other package .prettierignore files.
| dist/ | ||
| node_modules/ | ||
| out/ | ||
| 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.
Remove pnpm-lock.yaml from per-package .prettierignore.
This entry is ineffective in package-level ignore files when prettier runs from individual package directories. The root .prettierignore should handle this centrally.
.vite/
build/
dist/
node_modules/
out/
- pnpm-lock.yaml
storybook-static/📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| pnpm-lock.yaml | |
| .vite/ | |
| build/ | |
| dist/ | |
| node_modules/ | |
| out/ | |
| storybook-static/ |
🤖 Prompt for AI Agents
In apps/live/.prettierignore around line 9, remove the line "pnpm-lock.yaml"
because package-level .prettierignore entries for lockfiles are ineffective when
prettier runs from package directories; ensure the root .prettierignore contains
"pnpm-lock.yaml" so the lockfile is ignored globally, then save and commit the
change.
| dist/ | ||
| node_modules/ | ||
| out/ | ||
| 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.
Remove pnpm-lock.yaml from per-package .prettierignore.
Lockfile ignores should be centralized in the root .prettierignore, not duplicated across packages.
node_modules/
out/
- pnpm-lock.yaml
storybook-static/📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| pnpm-lock.yaml | |
| node_modules/ | |
| out/ | |
| storybook-static/ |
🤖 Prompt for AI Agents
In packages/editor/.prettierignore around line 9 the file contains
"pnpm-lock.yaml" which should not be ignored per-package; remove that line from
packages/editor/.prettierignore and ensure the root .prettierignore (project
root) contains "pnpm-lock.yaml" so lockfile ignores are centralized; after
removal run prettier check or lint to confirm no other per-package duplicates
remain and commit the change.
| "noUnusedLocals": false, | ||
| "noUnusedParameters": false, | ||
| "paths": { | ||
| "src/*": ["./src/*"], |
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:
cat -n packages/editor/tsconfig.jsonRepository: makeplane/plane
Length of output: 174
🏁 Script executed:
# Search for imports using the src/ prefix in the packages/editor directory
rg 'from\s+["\']src/' packages/editor/ --type ts --type tsx -A 2 -B 2Repository: makeplane/plane
Length of output: 127
🏁 Script executed:
# Also check the root tsconfig if it exists
cat -n tsconfig.json 2>/dev/null || echo "No root tsconfig.json found"Repository: makeplane/plane
Length of output: 86
🏁 Script executed:
# Search for any documentation or comments about this path mapping
rg 'src/\*' . --type json -B 3 -A 3Repository: makeplane/plane
Length of output: 3057
🏁 Script executed:
# Properly search for imports using src/ prefix in the editor package
rg 'import.*from\s+["\']src/' packages/editor --type ts --type tsx -c | head -20Repository: makeplane/plane
Length of output: 127
🏁 Script executed:
# Get actual matches
rg 'import.*from\s+["\']src/' packages/editor --type ts --type tsx | head -20Repository: makeplane/plane
Length of output: 127
🏁 Script executed:
# Check if there are any comments or git history about this mapping
git log --oneline --all -- packages/editor/tsconfig.json | head -10Repository: makeplane/plane
Length of output: 154
🏁 Script executed:
# Also check for re-exports or index files that might use src/ imports
rg 'export.*from\s+["\']src/' packages/editor --type ts --type tsx | head -10Repository: makeplane/plane
Length of output: 127
Remove the redundant "src/*" path mapping from the tsconfig.
The "src/*": ["./src/*"] mapping is redundant—TypeScript can already resolve imports from the src/ directory without an explicit path mapping. Unlike alias-based imports (@/*, @/plane-editor/*, @/styles/*), this mapping points to the actual file system location and enables imports that bypass the intended alias system.
This pattern is inconsistent with other packages in the monorepo, which use only @/* mappings. Remove this line to enforce a consistent import pattern across the project.
🤖 Prompt for AI Agents
In packages/editor/tsconfig.json around line 9, remove the redundant "src/*":
["./src/*"] path mapping entry; this mapping bypasses the intended alias system
and is inconsistent with the monorepo convention, so delete that line from the
"paths" section and ensure only the alias mappings (e.g. "@/*",
"@/plane-editor/*", "@/styles/*") remain, then run a quick build or tsc to
verify no import breakage.
| "@/*": ["./src/*"] | ||
| } | ||
| }, | ||
| "experimentalDecorators": true |
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:
# Search for decorator usage in the logger package
rg -n '@[A-Za-z]' packages/logger/src --type=ts --type=tsx -B1 -A1Repository: makeplane/plane
Length of output: 86
🏁 Script executed:
# Check the full tsconfig.json to understand context
cat -n packages/logger/tsconfig.jsonRepository: makeplane/plane
Length of output: 373
🏁 Script executed:
# Search for decorator usage in the entire repository to understand patterns
rg -n '@[A-Za-z]' --type=ts --type=tsx | grep -E '(class|method|property|parameter)' | head -20Repository: makeplane/plane
Length of output: 86
🏁 Script executed:
# Check if there's a root tsconfig that might have experimentalDecorators
cat -n tsconfig.json 2>/dev/null || echo "No root tsconfig.json"Repository: makeplane/plane
Length of output: 80
🏁 Script executed:
# Search for decorator usage in logger package with correct file type
rg -n '@[A-Za-z]' packages/logger/src --type=ts -B1 -A1Repository: makeplane/plane
Length of output: 41
🏁 Script executed:
# List files in logger src to understand structure
find packages/logger/src -type f -name "*.ts" | head -20Repository: makeplane/plane
Length of output: 151
🏁 Script executed:
# Check the base typescript config
find . -path "*/typescript-config/node-library.json" -o -path "*/typescript-config/*" -type f | head -10Repository: makeplane/plane
Length of output: 367
🏁 Script executed:
# Check the base config that logger tsconfig extends
cat -n packages/typescript-config/node-library.jsonRepository: makeplane/plane
Length of output: 272
🏁 Script executed:
# Also check the base.json
cat -n packages/typescript-config/base.jsonRepository: makeplane/plane
Length of output: 1119
🏁 Script executed:
# Examine all three logger source files
cat -n packages/logger/src/config.tsRepository: makeplane/plane
Length of output: 573
🏁 Script executed:
# Check the other logger source files
cat -n packages/logger/src/index.ts && echo "---" && cat -n packages/logger/src/middleware.tsRepository: makeplane/plane
Length of output: 621
Remove deprecated experimentalDecorators; the logger package does not use decorators.
The experimentalDecorators: true flag contradicts repository TypeScript guidelines and serves no purpose in this package. No decorators are used in any of the logger source files (config.ts, index.ts, middleware.ts), and the flag is not present in the inherited base configuration. Per repository learnings, standard ECMAScript decorators (Stage 3) should be used instead of the legacy experimental flag. Simply remove this line.
🤖 Prompt for AI Agents
packages/logger/tsconfig.json around line 7: the tsconfig sets
"experimentalDecorators": true even though this package does not use decorators
and the flag conflicts with repository TypeScript guidelines; remove the
"experimentalDecorators" entry from this tsconfig so it inherits the base
configuration and relies on standard ECMAScript decorators if/when needed, then
run a quick local TypeScript build to confirm no config regressions.
| "compilerOptions": { | ||
| "exactOptionalPropertyTypes": false, | ||
| "noUnusedLocals": false | ||
| }, |
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:
# First, let's read the full tsconfig.json file to understand the complete context
cat -n packages/services/tsconfig.jsonRepository: makeplane/plane
Length of output: 353
🏁 Script executed:
# Check the parent config to understand what defaults are being overridden
find . -path "*typescript-config/react-library.json" -o -path "*typescript-config*" -name "*.json" | head -20Repository: makeplane/plane
Length of output: 322
🏁 Script executed:
# Search for the actual parent config referenced in the file
rg "@plane/typescript-config" --type json -A 2 -B 2Repository: makeplane/plane
Length of output: 9088
🏁 Script executed:
# Check for unused variables or issues in packages/services that might justify disabling noUnusedLocals
find packages/services -type f \( -name "*.ts" -o -name "*.tsx" \) | wc -lRepository: makeplane/plane
Length of output: 61
🏁 Script executed:
# Look for any comments or documentation about why these flags are disabled
rg "noUnusedLocals|exactOptionalPropertyTypes" --type json -B 5 -A 5Repository: makeplane/plane
Length of output: 7711
🏁 Script executed:
# Read the parent config to understand what's being overridden
cat -n packages/typescript-config/react-library.jsonRepository: makeplane/plane
Length of output: 296
🏁 Script executed:
# Check if these settings are new in this PR or pre-existing
git log --oneline -20 packages/services/tsconfig.json 2>/dev/null || echo "No git history available"Repository: makeplane/plane
Length of output: 78
🏁 Script executed:
# Check if other packages document why they disable these flags
rg "exactOptionalPropertyTypes|noUnusedLocals" --type ts --type tsx -B 3 -A 3 packages/services/src | head -50Repository: makeplane/plane
Length of output: 86
🏁 Script executed:
# Check the git commit for this file more thoroughly
git show 8047ebce9 --stat packages/services/tsconfig.json 2>/dev/null | head -20 || echo "Commit details unavailable"Repository: makeplane/plane
Length of output: 287
🏁 Script executed:
# Check when packages/services tsconfig was last modified before this commit
git log --all --oneline -- packages/services/tsconfig.json 2>/dev/null | head -10 || echo "Extended history unavailable"Repository: makeplane/plane
Length of output: 154
🏁 Script executed:
# Verify this is standard across similar packages - check if services, ui, utils all have same pattern
echo "=== packages/services ===" && grep -A 1 "exactOptionalPropertyTypes\|noUnusedLocals" packages/services/tsconfig.json && \
echo -e "\n=== packages/ui ===" && grep -A 1 "exactOptionalPropertyTypes\|noUnusedLocals" packages/ui/tsconfig.json && \
echo -e "\n=== packages/utils ===" && grep -A 1 "exactOptionalPropertyTypes\|noUnusedLocals" packages/utils/tsconfig.jsonRepository: makeplane/plane
Length of output: 411
Improve PR documentation; align packages/services tsconfig with monorepo patterns.
The tsconfig.json additions disabling noUnusedLocals and exactOptionalPropertyTypes follow a pattern used across the monorepo (packages/ui, packages/utils, packages/editor, etc.). However, the PR message "fix: lint" provides no context for why these settings are necessary in packages/services.
Update the PR description to explain:
- Why these flags need to be disabled for the services package
- Whether this is addressing legitimate code incompatibilities or technical debt
- Any plans to re-enable these checks or refactor the code to satisfy them
Adding inline comments to the tsconfig.json would also help future maintainers understand the rationale.
🤖 Prompt for AI Agents
packages/services/tsconfig.json lines 3-6: the PR currently disables
exactOptionalPropertyTypes and noUnusedLocals without explanation; update the PR
description to state why these flags were turned off for the services package
(e.g., specific type/usage incompatibilities or temporary accommodation for
legacy code), declare whether this change fixes legitimate incompatibilities or
is a stop-gap for technical debt, and add a plan/timeline to re-enable the
checks or refactor the code to comply; also add concise inline comments in the
tsconfig.json next to each disabled option summarizing the rationale and
intended follow-up so future maintainers understand the decision.
Description
Type of Change
Screenshots and Media (if applicable)
Test Scenarios
References
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.