DIGIT-3155 Add cycle KPI page with burndown, label, and status charts#1
Open
gustoliveira wants to merge 75 commits intooxeanbits:previewfrom
Open
DIGIT-3155 Add cycle KPI page with burndown, label, and status charts#1gustoliveira wants to merge 75 commits intooxeanbits:previewfrom
gustoliveira wants to merge 75 commits intooxeanbits:previewfrom
Conversation
EXPLANATION: Investigated the cycle list actions, cycle detail routing, existing burndown chart components, and cycle analytics/progress endpoints. Confirmed the simplest implementation path is a new nested `kpi` page under the existing cycle detail route plus a new button inserted between the favorite star and quick actions; also confirmed the current burndown backend only uses `completed_at`, so cancelled items are not yet reflected in the chart timeline. --- PROMPT: Investigate this project. What would be the simplest possible way to generate a new screen from a button on it? The idea is to have a new button called KPI on the cycles screen within projects, which should be located between the like and three-dot icons. When you press this new button, you should open a new screen with a URL, such as https://plane.oxean.com.br/oxeanbits/projects/PROJECT-ID/cycles/CYCLE-ID/kpi This screen will display new KPI views for the cycle, initially a burndown chart showing the progression of time, the number of points on the x-axis, and the days until the end of the cycle on the y-axis. Points represent the sum of the estimates. Tickets should be considered when they have a status such as Completed or Cancelled.
EXPLANATION: Refined the implementation plan based on the confirmed assumptions: the new KPI screen should use estimate points for burndown, and cancelled items do not need to burn down in this first version. No repository files changed, so this is an allow-empty audit commit for planning. --- PROMPT: The assumptions are correct! But there are two points to reassure in the investigation: - Notice the current burndown chart only count the tickets, the main idea is to use the estimate points of each ticket in the burndown chart - For this first version, it is not necessary to burn the canceled items in the burndown chart With this in mind, think a detailed plan to implement this
EXPLANATION: Added `PLAN.md` as a living implementation checklist for the new cycle KPI feature. The plan captures the confirmed product decisions, exact frontend/backend integration points, the current backend pytest structure, the absence of a frontend test runner in `apps/web`, and a detailed checklist for implementation, automated tests, manual QA, and ongoing plan maintenance. No implementation tests were run for this planning change. --- PROMPT: Now, create a PLAN.md file, with a very detailed checklist to implement this new feature EVERYTIME you implement and change something, you should update the PLAN.md file Investigate the tests structure and make sure to add detailed tests to verify everything is working as expected
EXPLANATION: Updated `PLAN.md` to remove mobile-specific implementation and QA checklist items for the cycle KPI feature. The plan now reflects the clarified product scope that only desktop handling is required. No tests were run for this plan-only change. --- PROMPT: Remove from the plan problems related to the mobile version! IS NOT NECESSARY TO HANDLE MOBILE!
EXPLANATION: Verified the web app import pattern and updated `PLAN.md` to account for edition-specific module resolution. In this repository, `apps/web/tsconfig.json` maps `@/plane-web/*` to `ce/*`, so the KPI implementation must avoid direct `ee/*` imports and prefer local `core/*` modules or CE-safe `@/plane-web/*` exports. Added this constraint and an example CE fallback to the plan. No tests were run for this planning update. --- PROMPT: Are you taking in consideration the plan the import pattern used in this project? Notice that are some files that don't exists at all but are imported, these are files of premium features that are not available in this open source version
EXPLANATION: Implemented the first slice of the KPI feature by adding a desktop-only `KPI` button to the cycle list actions in `apps/web/core/components/cycles/list/cycle-list-item-action.tsx`. The new action is placed between the favorite star and quick actions, routes to `/${workspaceSlug}/projects/${projectId}/cycles/${cycleId}/kpi`, and prevents row/peek navigation side effects. Updated `PLAN.md` to mark the completed part 2 checklist items, record the read-only visibility decision, and log the attempted validations. Validation attempts: `pnpm exec eslint core/components/cycles/list/cycle-list-item-action.tsx` failed because `pnpm` is unavailable; `npm exec pnpm -- exec eslint core/components/cycles/list/cycle-list-item-action.tsx` failed because the workspace ESLint config package is unavailable without installed dependencies; `npm exec pnpm -- check:types` failed because `tsc` and workspace dependencies are not installed.
---
PROMPT: For this first implementation iteration, focus exclusivelly in the part 2, start implementing the KPI button
EXPLANATION: Investigated the repository setup files to answer how to install the missing dependencies. Confirmed that `setup.sh` copies env files and runs `corepack enable pnpm` plus `pnpm install`, that the JS monorepo uses pnpm workspaces from the repo root, and that backend Python test dependencies live under `apps/api/requirements/test.txt`. No repository files changed, so this is an allow-empty audit commit. --- PROMPT: How to install all necessary dependencies?
EXPLANATION: Investigated the `pnpm dev` failure and confirmed it is not a missing external dependency install problem. The immediate failure comes from `@plane/editor` running `tsc` before some internal workspace packages have their generated `dist` type outputs available. Verified this by inspecting `packages/editor/package.json` and manually building `@plane/constants`, `@plane/types`, `@plane/hooks`, `@plane/utils`, and then `@plane/editor`, which made the editor build succeed. No repository files changed, so this is an allow-empty audit commit.
---
PROMPT: @plane/propel:dev: ℹ [CJS] dist/menu/index.js 6.62 kB │ gzip: 1.79 kB
@plane/propel:dev: ℹ [CJS] dist/portal/index.js 6.61 kB │ gzip: 2.12 kB
@plane/propel:dev: ℹ [CJS] dist/charts/pie-chart/index.js 6.42 kB │ gzip: 1.90 kB
@plane/propel:dev: ℹ [CJS] dist/charts/area-chart/index.js 5.72 kB │ gzip: 1.84 kB
@plane/propel:dev: ℹ [CJS] dist/combobox/index.js 5.32 kB │ gzip: 1.64 kB
@plane/propel:dev: ℹ [CJS] dist/charts/line-chart/index.js 4.90 kB │ gzip: 1.60 kB
@plane/propel:dev: ℹ [CJS] dist/charts/scatter-chart/index.js 4.63 kB │ gzip: 1.47 kB
@plane/propel:dev: ℹ [CJS] dist/toolbar/index.js 4.36 kB │ gzip: 1.32 kB
@plane/propel:dev: ℹ [CJS] dist/context-menu/index.js 4.00 kB │ gzip: 1.02 kB
@plane/propel:dev: ℹ [CJS] dist/dialog/index.js 3.66 kB │ gzip: 1.04 kB
@plane/editor:build: src/core/constants/document-collaborative-events.ts:1:29 - error TS2307: Cannot find module '@plane/constants' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 1 import { EPageAccess } from "@plane/constants";
@plane/editor:build: ~~~~~~~~~~~~~~~~~~
@plane/editor:build:
@plane/propel:dev: ℹ [CJS] dist/scrollarea/index.js 3.39 kB │ gzip: 1.02 kB
@plane/propel:dev: ℹ [CJS] dist/charts/radar-chart/index.js 3.05 kB │ gzip: 1.09 kB
@plane/propel:dev: ℹ [CJS] dist/avatar/index.js 3.02 kB │ gzip: 1.03 kB
@plane/propel:dev: ℹ [CJS] dist/table/index.js 2.93 kB │ gzip: 0.73 kB
@plane/propel:dev: ℹ [CJS] dist/tabs/index.js 2.84 kB │ gzip: 0.91 kB
@plane/propel:dev: ℹ [CJS] dist/accordion/index.js 2.41 kB │ gzip: 0.75 kB
@plane/editor:build: src/core/constants/document-collaborative-events.ts:2:23 - error TS2307: Cannot find module '@plane/types' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import { TPage } from "@plane/types";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/mentions/types.ts:2:33 - error TS2307: Cannot find module '@plane/types' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import { TSearchEntities } from "@plane/types";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/helpers/parser.ts:2:98 - error TS2307: Cannot find module '@plane/types' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import { TDocumentPayload, TDuplicateAssetData, TDuplicateAssetResponse, TEditorAssetType } from "@plane/types";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/helpers/yjs-utils.ts:6:34 - error TS2307: Cannot find module '@plane/types' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 6 import { TDocumentPayload } from "@plane/types";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/types/config.ts:2:47 - error TS2307: Cannot find module '@plane/types' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import { TWebhookConnectionQueryParams } from "@plane/types";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/types/mention.ts:2:33 - error TS2307: Cannot find module '@plane/types' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import { TSearchEntities } from "@plane/types";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build:
@plane/editor:build: Found 7 errors in 6 files.
@plane/editor:build:
@plane/editor:build: Errors Files
@plane/editor:build: 2 src/core/constants/document-collaborative-events.ts:1
@plane/editor:build: 1 src/core/extensions/mentions/types.ts:2
@plane/editor:build: 1 src/core/helpers/parser.ts:2
@plane/editor:build: 1 src/core/helpers/yjs-utils.ts:6
@plane/editor:build: 1 src/core/types/config.ts:2
@plane/editor:build: 1 src/core/types/mention.ts:2
@plane/propel:dev: ℹ [CJS] dist/collapsible/index.js 2.39 kB │ gzip: 0.83 kB
@plane/propel:dev: ℹ [CJS] dist/pill/index.js 2.11 kB │ gzip: 0.84 kB
@plane/propel:dev: ℹ [CJS] dist/empty-state/index.js 1.99 kB │ gzip: 0.72 kB
@plane/propel:dev: ℹ [CJS] dist/command/index.js 1.88 kB │ gzip: 0.61 kB
@plane/propel:dev: ℹ [CJS] dist/switch/index.js 1.82 kB │ gzip: 0.74 kB
@plane/propel:dev: ℹ [CJS] dist/input/index.js 1.47 kB │ gzip: 0.67 kB
@plane/propel:dev: ℹ [CJS] dist/calendar/index.js 1.43 kB │ gzip: 0.60 kB
@plane/propel:dev: ℹ [CJS] dist/skeleton/index.js 1.06 kB │ gzip: 0.48 kB
@plane/propel:dev: ℹ [CJS] dist/emoji-icon-picker/index.js 1.02 kB │ gzip: 0.34 kB
@plane/propel:dev: ℹ [CJS] dist/button/index.js 0.37 kB │ gzip: 0.18 kB
@plane/propel:dev: ℹ [CJS] dist/utils/index.js 0.28 kB │ gzip: 0.17 kB
@plane/propel:dev: ℹ [CJS] dist/card/index.js 0.28 kB │ gzip: 0.15 kB
@plane/propel:dev: ℹ [CJS] dist/animated-counter/index.js 0.25 kB │ gzip: 0.16 kB
@plane/propel:dev: ℹ [CJS] dist/tooltip/index.js 0.18 kB │ gzip: 0.13 kB
@plane/propel:dev: ℹ [CJS] dist/popover/index.js 0.14 kB │ gzip: 0.11 kB
@plane/propel:dev: ℹ [CJS] dist/emoji-icon-picker-qFZxM3Wn.js 33.26 kB │ gzip: 7.37 kB
@plane/propel:dev: ℹ [CJS] dist/button-CnImB6YW.js 6.18 kB │ gzip: 1.45 kB
@plane/propel:dev: ℹ [CJS] dist/tooltip--ul_a4We.js 4.26 kB │ gzip: 1.26 kB
@plane/propel:dev: ℹ [CJS] dist/popover-D0wJxXwf.js 2.72 kB │ gzip: 0.81 kB
@plane/propel:dev: ℹ [CJS] dist/animated-counter-DUylUKfd.js 2.59 kB │ gzip: 0.95 kB
@plane/propel:dev: ℹ [CJS] dist/card-BXcdF0I0.js 2.39 kB │ gzip: 0.87 kB
@plane/propel:dev: ℹ [CJS] dist/tooltip-dpiZ-fz5.js 2.36 kB │ gzip: 0.88 kB
@plane/propel:dev: ℹ [CJS] dist/legend-CDTeKN3K.js 2.23 kB │ gzip: 0.97 kB
@plane/propel:dev: ℹ [CJS] dist/placement-BNZhqwdu.js 1.19 kB │ gzip: 0.37 kB
@plane/propel:dev: ℹ [CJS] dist/chunk-nOFOJqeH.js 1.09 kB │ gzip: 0.54 kB
@plane/propel:dev: ℹ [CJS] dist/classname-aVg4WJHY.js 0.41 kB │ gzip: 0.27 kB
@plane/propel:dev: ℹ [CJS] dist/utils-JOhwHn_4.js 0.00 kB │ gzip: 0.02 kB
@plane/propel:dev: ℹ [CJS] 48 files, total: 371.15 kB
@plane/constants:dev: ℹ [CJS] dist/index.d.ts.map 25.66 kB │ gzip: 9.22 kB
@plane/constants:dev: ℹ [CJS] dist/index.d.ts 60.39 kB │ gzip: 12.46 kB
@plane/constants:dev: ℹ [CJS] 2 files, total: 86.05 kB
@plane/constants:dev: ℹ [ESM] dist/index.mjs 111.35 kB │ gzip: 22.84 kB
@plane/services:dev: ✔ Rebuild complete in 2172ms
@plane/constants:dev: ℹ [ESM] dist/index.d.mts 60.39 kB │ gzip: 12.46 kB
@plane/services:dev: ℹ Change detected: /home/gustavo/oxeanbits/devops/makeplane-plane/packages/services/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/services/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/services/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/services/.turbo/turbo-dev.log
@plane/constants:dev: ℹ [ESM] 4 files, total: 360.92 kB
@plane/decorators:dev: ℹ [CJS] dist/index.js 49.85 kB │ gzip: 8.77 kB
@plane/decorators:dev: ℹ [CJS] 1 files, total: 49.85 kB
@plane/services:dev: ℹ Cleaning 8 files
@plane/editor:dev: ℹ Change detected: /home/gustavo/oxeanbits/devops/makeplane-plane/packages/editor/.turbo/turbo-build.log
@plane/constants:dev: ✔ Rebuild complete in 1995ms
@plane/constants:dev: ℹ Change detected: /home/gustavo/oxeanbits/devops/makeplane-plane/packages/constants/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/constants/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/constants/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/constants/.turbo/turbo-dev.log
@plane/constants:dev: ℹ Cleaning 7 files
@plane/editor:dev: ℹ Cleaning 29 files
@plane/types:dev: ℹ [ESM] dist/index.mjs 14.71 kB │ gzip: 3.24 kB
@plane/types:dev: ℹ [ESM] dist/index.d.mts.map 77.57 kB │ gzip: 26.58 kB
@plane/types:dev: ℹ [ESM] dist/index.mjs.map 54.64 kB │ gzip: 11.76 kB
@plane/types:dev: ℹ [ESM] dist/index.d.mts 128.38 kB │ gzip: 25.90 kB
@plane/types:dev: ℹ [ESM] 4 files, total: 275.30 kB
@plane/hooks:dev: ℹ [CJS] dist/index.d.cts.map 0.63 kB │ gzip: 0.38 kB
@plane/hooks:dev: ℹ [CJS] dist/index.d.cts 1.52 kB │ gzip: 0.68 kB
@plane/hooks:dev: ℹ [CJS] 2 files, total: 2.16 kB
@plane/hooks:dev: ✔ Rebuild complete in 744ms
@plane/hooks:dev: ℹ Change detected: /home/gustavo/oxeanbits/devops/makeplane-plane/packages/hooks/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/hooks/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/hooks/.turbo/turbo-dev.log
@plane/hooks:dev: ℹ Cleaning 8 files
@plane/types:dev: ℹ [CJS] dist/index.d.ts.map 77.57 kB │ gzip: 26.57 kB
@plane/types:dev: ℹ [CJS] dist/index.d.ts 128.38 kB │ gzip: 25.90 kB
@plane/types:dev: ℹ [CJS] 2 files, total: 205.95 kB
@plane/editor:build: ELIFECYCLE Command failed with exit code 2.
@plane/i18n:dev: ℹ [CJS] dist/index.d.ts.map 71.92 kB │ gzip: 3.34 kB
@plane/i18n:dev: ℹ [CJS] dist/index.d.ts 2241.50 kB
@plane/i18n:dev: ℹ [CJS] 2 files, total: 2313.42 kB
@plane/i18n:dev: ℹ [ESM] dist/index.mjs 13.79 kB │ gzip: 3.87 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-C87z_9bB.mjs.map 152.24 kB │ gzip: 30.57 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-dL2ymsI5.mjs.map 147.80 kB │ gzip: 30.23 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-dFfYWbSK.mjs.map 136.50 kB │ gzip: 29.02 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-48LmsM3P.mjs.map 133.21 kB │ gzip: 27.98 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-Bvf6lpQb.mjs.map 129.03 kB │ gzip: 28.90 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-Bj4dw8c6.mjs.map 126.46 kB │ gzip: 28.39 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-CzAfnpBR.mjs.map 126.24 kB │ gzip: 27.78 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-PLVih9QF.mjs.map 125.27 kB │ gzip: 28.65 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-D0CUJXW_.mjs.map 124.75 kB │ gzip: 28.16 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-qV84Uxxs.mjs.map 124.70 kB │ gzip: 28.00 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-B7xSmf_x.mjs.map 121.42 kB │ gzip: 27.05 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-DXu79kmE.mjs.map 121.41 kB │ gzip: 27.66 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-M70q66A3.mjs.map 119.88 kB │ gzip: 26.77 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-BX5yspn1.mjs.map 117.41 kB │ gzip: 27.41 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-DO4cA7_a.mjs.map 117.21 kB │ gzip: 27.31 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-BitxSWr5.mjs.map 116.78 kB │ gzip: 27.33 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-C87z_9bB.mjs 115.42 kB │ gzip: 25.36 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-372TspcR.mjs.map 113.38 kB │ gzip: 27.85 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-B7pG1fvb.mjs.map 111.43 kB │ gzip: 25.45 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-CxGUP9C0.mjs.map 111.26 kB │ gzip: 27.39 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-dL2ymsI5.mjs 111.09 kB │ gzip: 25.10 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-dFfYWbSK.mjs 99.59 kB │ gzip: 23.86 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-48LmsM3P.mjs 96.26 kB │ gzip: 22.87 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-Bvf6lpQb.mjs 91.85 kB │ gzip: 23.75 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-CzAfnpBR.mjs 89.45 kB │ gzip: 22.59 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-Bj4dw8c6.mjs 89.25 kB │ gzip: 23.20 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-PLVih9QF.mjs 88.27 kB │ gzip: 23.46 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-D0CUJXW_.mjs 87.67 kB │ gzip: 22.96 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-qV84Uxxs.mjs 87.63 kB │ gzip: 22.81 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-DXu79kmE.mjs 84.73 kB │ gzip: 22.50 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-B7xSmf_x.mjs 84.57 kB │ gzip: 21.94 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-M70q66A3.mjs 82.92 kB │ gzip: 21.64 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-BX5yspn1.mjs 80.77 kB │ gzip: 22.16 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-DO4cA7_a.mjs 80.58 kB │ gzip: 22.10 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-BitxSWr5.mjs 80.12 kB │ gzip: 22.11 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-372TspcR.mjs 76.77 kB │ gzip: 22.46 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-B7pG1fvb.mjs 76.27 kB │ gzip: 20.57 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-CxGUP9C0.mjs 74.98 kB │ gzip: 22.12 kB
@plane/i18n:dev: ℹ [ESM] dist/index.d.mts.map 71.98 kB │ gzip: 3.35 kB
@plane/i18n:dev: ℹ [ESM] dist/index.mjs.map 22.37 kB │ gzip: 5.64 kB
@plane/i18n:dev: ℹ [ESM] dist/core-BRlcPI4C.mjs.map 6.79 kB │ gzip: 1.95 kB
@plane/i18n:dev: ℹ [ESM] dist/core-BRlcPI4C.mjs 4.28 kB │ gzip: 1.46 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-sRGjkIew.mjs.map 2.56 kB │ gzip: 0.96 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-CvNVpiwI.mjs.map 2.54 kB │ gzip: 0.95 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-Q58ZWrjj.mjs.map 2.31 kB │ gzip: 0.93 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-P0V4HPTm.mjs.map 2.13 kB │ gzip: 0.81 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-Ct_7-W0U.mjs.map 2.10 kB │ gzip: 0.83 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-DBtJRmsH.mjs.map 2.10 kB │ gzip: 0.84 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-HCfcuZ5t.mjs.map 2.09 kB │ gzip: 0.81 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-ygNTVGGz.mjs.map 2.08 kB │ gzip: 0.83 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-Bd_PX6fi.mjs.map 2.07 kB │ gzip: 0.79 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-Cv_H0IPA.mjs.map 2.05 kB │ gzip: 0.78 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-BWsLtYO9.mjs.map 2.04 kB │ gzip: 0.88 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-gXpiKTfp.mjs.map 2.04 kB │ gzip: 0.86 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-Cf-GVilZ.mjs.map 2.02 kB │ gzip: 0.80 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-DcsS98lP.mjs.map 2.01 kB │ gzip: 0.78 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-sRGjkIew.mjs 2.01 kB │ gzip: 0.79 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-CvNVpiwI.mjs 1.98 kB │ gzip: 0.78 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-CtSv3cvd.mjs.map 1.98 kB │ gzip: 0.76 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-C3NzZNeU.mjs.map 1.93 kB │ gzip: 0.87 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-MxRuvbUd.mjs.map 1.92 kB │ gzip: 0.86 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-DpfkRYIy.mjs.map 1.91 kB │ gzip: 0.73 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-CxfSSlgc.mjs.map 1.89 kB │ gzip: 0.69 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-Q58ZWrjj.mjs 1.75 kB │ gzip: 0.76 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-P0V4HPTm.mjs 1.57 kB │ gzip: 0.64 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-Ct_7-W0U.mjs 1.54 kB │ gzip: 0.66 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-DBtJRmsH.mjs 1.54 kB │ gzip: 0.67 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-HCfcuZ5t.mjs 1.53 kB │ gzip: 0.64 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-ygNTVGGz.mjs 1.52 kB │ gzip: 0.67 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-Bd_PX6fi.mjs 1.51 kB │ gzip: 0.63 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-Cv_H0IPA.mjs 1.49 kB │ gzip: 0.61 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-BWsLtYO9.mjs 1.48 kB │ gzip: 0.71 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-gXpiKTfp.mjs 1.48 kB │ gzip: 0.69 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-Cf-GVilZ.mjs 1.46 kB │ gzip: 0.63 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-DcsS98lP.mjs 1.45 kB │ gzip: 0.61 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-CtSv3cvd.mjs 1.42 kB │ gzip: 0.60 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-C3NzZNeU.mjs 1.37 kB │ gzip: 0.70 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-MxRuvbUd.mjs 1.36 kB │ gzip: 0.69 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-DpfkRYIy.mjs 1.35 kB │ gzip: 0.57 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-CxfSSlgc.mjs 1.32 kB │ gzip: 0.52 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-Bdr1LuOI.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-Cr1JrBGP.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-DVwrLQOx.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-efFYvH7B.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-twmWcPds.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-2k8sgSQW.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-BT2QDmUP.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-BXy5h1IX.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-C33p7Olv.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-C3nlH4nR.mjs.map 0.17 kB │ gzip: 0.15 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-CJeIWmF-.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-CM6kMl2b.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-CWhmGUKu.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-D5BxOIPX.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-DDo09OWu.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-DQEdYI94.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-XOfuLoqL.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-gC4XylmW.mjs.map 0.17 kB │ gzip: 0.15 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-uFtO2SXS.mjs.map 0.17 kB │ gzip: 0.16 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-Bdr1LuOI.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-Cr1JrBGP.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-DVwrLQOx.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-efFYvH7B.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-twmWcPds.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-2k8sgSQW.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-BT2QDmUP.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-C33p7Olv.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-C3nlH4nR.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-CJeIWmF-.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-CM6kMl2b.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-CWhmGUKu.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-D5BxOIPX.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-DDo09OWu.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-DQEdYI94.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-XOfuLoqL.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-gC4XylmW.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-uFtO2SXS.mjs 0.16 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-BXy5h1IX.mjs 0.14 kB │ gzip: 0.14 kB
@plane/i18n:dev: ℹ [ESM] dist/accessibility-BLTQpuL4.mjs 0.12 kB │ gzip: 0.09 kB
@plane/i18n:dev: ℹ [ESM] dist/translations-CFUC8tKz.mjs 0.11 kB │ gzip: 0.09 kB
@plane/i18n:dev: ℹ [ESM] dist/editor-Cw2lpTqa.mjs 0.09 kB │ gzip: 0.08 kB
@plane/i18n:dev: ℹ [ESM] dist/core-BpaS-n_h.mjs 0.09 kB │ gzip: 0.08 kB
@plane/i18n:dev: ℹ [ESM] dist/index.d.mts 2241.50 kB
@plane/i18n:dev: ℹ [ESM] 124 files, total: 6490.76 kB
@plane/types:dev: ✔ Rebuild complete in 4630ms
@plane/types:dev: ℹ Change detected: /home/gustavo/oxeanbits/devops/makeplane-plane/packages/types/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/types/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/types/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/types/.turbo/turbo-dev.log
@plane/editor:build: ERROR: command finished with error: command (/home/gustavo/oxeanbits/devops/makeplane-plane/packages/editor) /home/gustavo/.local/share/pnpm/.tools/pnpm/10.12.1/bin/pnpm run build exited (2)
admin:dev:
@plane/editor#build: command (/home/gustavo/oxeanbits/devops/makeplane-plane/packages/editor) /home/gustavo/.local/share/pnpm/.tools/pnpm/10.12.1/bin/pnpm run build exited (2)
Tasks: 10 successful, 23 total
Cached: 0 cached, 23 total
Time: 2m37.676s
Failed: @plane/editor#build
ERROR run failed: command exited (2)
ELIFECYCLE Command failed with exit code 2.
gustavo@oxeanbits-notebook:~/oxeanbits/devops/makeplane-plane$ pnpm dev
Ao rodar pnpm dev
EXPLANATION: Investigated the repeated `pnpm dev` failures further and confirmed they are caused by the root Turbo development workflow, not by missing installs. Verified that the root script runs `turbo run dev`, that `dev` depends on `^build`, and that several shared packages use `tsdown` with `clean: true`, which makes their `dist` outputs disappear briefly during watch rebuilds. Also verified that `pnpm --filter web dev` starts successfully, so working on the web app can proceed without the root monorepo dev command. No repository files changed, so this is an allow-empty audit commit.
---
PROMPT: @plane/types:dev: ✔ Rebuild complete in 2071ms
@plane/types:dev: ℹ Change detected: /home/gustavo/oxeanbits/devops/makeplane-plane/packages/types/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/types/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/types/.turbo/turbo-dev.log
@plane/types:dev: ℹ Cleaning 8 files
@plane/editor:build: src/ce/constants/utility.ts:2:56 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import { ADDITIONAL_EXTENSIONS, CORE_EXTENSIONS } from "@plane/utils";
@plane/hooks:dev: ℹ [CJS] dist/index.d.cts.map 0.63 kB │ gzip: 0.38 kB
@plane/hooks:dev: ℹ [CJS] dist/index.d.cts 1.52 kB │ gzip: 0.68 kB
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/hooks:dev: ℹ [CJS] 2 files, total: 2.16 kB
@plane/editor:build: src/core/components/editors/document/collaborative-editor.tsx:3:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 3 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/components/editors/document/editor.tsx:4:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 4 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/components/editors/document/loader.tsx:2:24 - error TS2307: Cannot find module '@plane/ui' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import { Loader } from "@plane/ui";
@plane/editor:build: ~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/components/editors/document/loader.tsx:3:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 3 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/components/editors/document/page-renderer.tsx:3:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 3 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/components/editors/editor-container.tsx:4:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 4 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/components/menus/ai-menu.tsx:4:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 4 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/components/menus/block-menu.tsx:14:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/hooks:dev: ✔ Rebuild complete in 322ms
@plane/editor:build: 14 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/hooks:dev: ℹ Change detected: /home/gustavo/oxeanbits/devops/makeplane-plane/packages/hooks/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/hooks/.turbo/turbo-dev.log
@plane/editor:build: src/core/components/menus/bubble-menu/alignment-selector.tsx:4:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 4 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/components/menus/bubble-menu/color-selector.tsx:5:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 5 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/components/menus/bubble-menu/link-selector.tsx:5:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 5 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/components/menus/bubble-menu/node-selector.tsx:5:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 5 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/components/menus/bubble-menu/root.tsx:5:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 5 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/constants/document-collaborative-events.ts:1:29 - error TS2307: Cannot find module '@plane/constants' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 1 import { EPageAccess } from "@plane/constants";
@plane/editor:build: ~~~~~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/constants/document-collaborative-events.ts:2:23 - error TS2307: Cannot find module '@plane/types' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import { TPage } from "@plane/types";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/callout/color-selector.tsx:3:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 3 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/callout/logo-selector.tsx:2:78 - error TS2307: Cannot find module '@plane/ui' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import { EmojiIconPicker, EmojiIconPickerTypes, Logo, TEmojiLogoProps } from "@plane/ui";
@plane/editor:build: ~~~~~~~~~~~
@plane/editor:build:
@plane/hooks:dev: ℹ Cleaning 8 files
@plane/editor:build: src/core/extensions/callout/logo-selector.tsx:3:46 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 3 import { cn, convertHexEmojiToDecimal } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/callout/logo-selector.tsx:43:20 - error TS7006: Parameter 'val' implicitly has an 'any' type.
@plane/editor:build:
@plane/editor:build: 43 onChange={(val) => {
@plane/editor:build: ~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/callout/utils.ts:2:38 - error TS2307: Cannot find module '@plane/ui' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import type { TEmojiLogoProps } from "@plane/ui";
@plane/editor:build: ~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/callout/utils.ts:3:30 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 3 import { sanitizeHTML } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/code/code-block-node-view.tsx:10:25 - error TS2307: Cannot find module '@plane/ui' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 10 import { Tooltip } from "@plane/ui";
@plane/editor:build: ~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/code/code-block-node-view.tsx:12:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 12 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/custom-image/components/block.tsx:4:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 4 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/custom-image/components/toolbar/alignment.tsx:4:41 - error TS2307: Cannot find module '@plane/hooks' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 4 import { useOutsideClickDetector } from "@plane/hooks";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/custom-image/components/toolbar/alignment.tsx:5:25 - error TS2307: Cannot find module '@plane/ui' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 5 import { Tooltip } from "@plane/ui";
@plane/editor:build: ~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/custom-image/components/toolbar/download.tsx:3:25 - error TS2307: Cannot find module '@plane/ui' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 3 import { Tooltip } from "@plane/ui";
@plane/editor:build: ~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/custom-image/components/toolbar/full-screen/modal.tsx:5:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 5 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/custom-image/components/toolbar/full-screen/root.tsx:4:25 - error TS2307: Cannot find module '@plane/ui' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 4 import { Tooltip } from "@plane/ui";
@plane/editor:build: ~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/custom-image/components/toolbar/root.tsx:4:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 4 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/custom-image/components/uploader.tsx:4:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 4 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/emoji/components/emojis-list.tsx:5:41 - error TS2307: Cannot find module '@plane/hooks' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 5 import { useOutsideClickDetector } from "@plane/hooks";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/emoji/components/emojis-list.tsx:6:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 6 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/mentions/mentions-list-dropdown.tsx:8:41 - error TS2307: Cannot find module '@plane/hooks' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 8 import { useOutsideClickDetector } from "@plane/hooks";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/mentions/mentions-list-dropdown.tsx:9:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 9 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/mentions/types.ts:2:33 - error TS2307: Cannot find module '@plane/types' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import { TSearchEntities } from "@plane/types";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/slash-commands/command-menu-item.tsx:2:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/slash-commands/command-menu.tsx:5:41 - error TS2307: Cannot find module '@plane/hooks' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 5 import { useOutsideClickDetector } from "@plane/hooks";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/table/plugins/drag-handles/color-selector.tsx:5:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 5 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/table/plugins/drag-handles/column/drag-handle.tsx:17:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 17 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/extensions/table/plugins/drag-handles/row/drag-handle.tsx:17:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 17 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/helpers/assets.ts:3:56 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 3 import { ADDITIONAL_EXTENSIONS, CORE_EXTENSIONS } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/helpers/common.ts:4:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 4 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/helpers/parser.ts:2:98 - error TS2307: Cannot find module '@plane/types' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import { TDocumentPayload, TDuplicateAssetData, TDuplicateAssetResponse, TEditorAssetType } from "@plane/types";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/helpers/yjs-utils.ts:6:34 - error TS2307: Cannot find module '@plane/types' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 6 import { TDocumentPayload } from "@plane/types";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/plugins/file/restore.ts:4:33 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 4 import { CORE_EXTENSIONS } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/props.ts:3:20 - error TS2307: Cannot find module '@plane/utils' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 3 import { cn } from "@plane/utils";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build: src/core/types/config.ts:2:47 - error TS2307: Cannot find module '@plane/types' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import { TWebhookConnectionQueryParams } from "@plane/types";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/decorators:dev: ℹ [CJS] dist/index.js 49.85 kB │ gzip: 8.77 kB
@plane/decorators:dev: ℹ [CJS] 1 files, total: 49.85 kB
@plane/editor:build:
@plane/editor:build: src/core/types/mention.ts:2:33 - error TS2307: Cannot find module '@plane/types' or its corresponding type declarations.
@plane/editor:build:
@plane/editor:build: 2 import { TSearchEntities } from "@plane/types";
@plane/editor:build: ~~~~~~~~~~~~~~
@plane/editor:build:
@plane/editor:build:
@plane/editor:build: Found 50 errors in 41 files.
@plane/editor:build:
@plane/editor:build: Errors Files
@plane/editor:build: 1 src/ce/constants/utility.ts:2
@plane/editor:build: 1 src/core/components/editors/document/collaborative-editor.tsx:3
@plane/editor:build: 1 src/core/components/editors/document/editor.tsx:4
@plane/editor:build: 2 src/core/components/editors/document/loader.tsx:2
@plane/editor:build: 1 src/core/components/editors/document/page-renderer.tsx:3
@plane/editor:build: 1 src/core/components/editors/editor-container.tsx:4
@plane/editor:build: 1 src/core/components/menus/ai-menu.tsx:4
@plane/editor:build: 1 src/core/components/menus/block-menu.tsx:14
@plane/editor:build: 1 src/core/components/menus/bubble-menu/alignment-selector.tsx:4
@plane/editor:build: 1 src/core/components/menus/bubble-menu/color-selector.tsx:5
@plane/editor:build: 1 src/core/components/menus/bubble-menu/link-selector.tsx:5
@plane/editor:build: 1 src/core/components/menus/bubble-menu/node-selector.tsx:5
@plane/editor:build: 1 src/core/components/menus/bubble-menu/root.tsx:5
@plane/editor:build: 2 src/core/constants/document-collaborative-events.ts:1
@plane/editor:build: 1 src/core/extensions/callout/color-selector.tsx:3
@plane/editor:build: 3 src/core/extensions/callout/logo-selector.tsx:2
@plane/editor:build: 2 src/core/extensions/callout/utils.ts:2
@plane/editor:build: 2 src/core/extensions/code/code-block-node-view.tsx:10
@plane/editor:build: 1 src/core/extensions/custom-image/components/block.tsx:4
@plane/editor:build: 2 src/core/extensions/custom-image/components/toolbar/alignment.tsx:4
@plane/editor:build: 1 src/core/extensions/custom-image/components/toolbar/download.tsx:3
@plane/editor:build: 1 src/core/extensions/custom-image/components/toolbar/full-screen/modal.tsx:5
@plane/editor:build: 1 src/core/extensions/custom-image/components/toolbar/full-screen/root.tsx:4
@plane/editor:build: 1 src/core/extensions/custom-image/components/toolbar/root.tsx:4
@plane/editor:build: 1 src/core/extensions/custom-image/components/uploader.tsx:4
@plane/editor:build: 2 src/core/extensions/emoji/components/emojis-list.tsx:5
@plane/editor:build: 2 src/core/extensions/mentions/mentions-list-dropdown.tsx:8
@plane/editor:build: 1 src/core/extensions/mentions/types.ts:2
@plane/editor:build: 1 src/core/extensions/slash-commands/command-menu-item.tsx:2
@plane/editor:build: 1 src/core/extensions/slash-commands/command-menu.tsx:5
@plane/editor:build: 1 src/core/extensions/table/plugins/drag-handles/color-selector.tsx:5
@plane/editor:build: 1 src/core/extensions/table/plugins/drag-handles/column/drag-handle.tsx:17
@plane/editor:build: 1 src/core/extensions/table/plugins/drag-handles/row/drag-handle.tsx:17
@plane/editor:build: 1 src/core/helpers/assets.ts:3
@plane/editor:build: 1 src/core/helpers/common.ts:4
@plane/editor:build: 1 src/core/helpers/parser.ts:2
@plane/editor:build: 1 src/core/helpers/yjs-utils.ts:6
@plane/editor:build: 1 src/core/plugins/file/restore.ts:4
@plane/editor:build: 1 src/core/props.ts:3
@plane/editor:build: 1 src/core/types/config.ts:2
@plane/editor:build: 1 src/core/types/mention.ts:2
@plane/hooks:dev: ℹ [CJS] dist/index.cjs 6.67 kB │ gzip: 2.26 kB
@plane/hooks:dev: ℹ [CJS] dist/index.cjs.map 10.03 kB │ gzip: 3.36 kB
@plane/hooks:dev: ℹ [CJS] 2 files, total: 16.70 kB
@plane/editor:dev: ℹ Change detected: /home/gustavo/oxeanbits/devops/makeplane-plane/packages/editor/.turbo/turbo-build.log
@plane/decorators:dev: ℹ [ESM] dist/index.mjs 49.73 kB │ gzip: 8.76 kB
@plane/decorators:dev: ℹ [ESM] dist/index.mjs.map 91.19 kB │ gzip: 15.65 kB
@plane/editor:dev: ℹ Cleaning 29 files
@plane/decorators:dev: ℹ [ESM] dist/index.d.mts.map 0.91 kB │ gzip: 0.45 kB
@plane/decorators:dev: ℹ [ESM] dist/index.d.mts 1.39 kB │ gzip: 0.51 kB
@plane/decorators:dev: ℹ [ESM] 4 files, total: 143.22 kB
@plane/hooks:dev: ℹ [ESM] dist/index.js 5.41 kB │ gzip: 1.83 kB
@plane/hooks:dev: ℹ [ESM] dist/index.js.map 10.04 kB │ gzip: 3.35 kB
@plane/hooks:dev: ℹ [ESM] dist/index.d.ts.map 0.63 kB │ gzip: 0.38 kB
@plane/hooks:dev: ℹ [ESM] dist/index.d.ts 1.52 kB │ gzip: 0.68 kB
@plane/hooks:dev: ℹ [ESM] 4 files, total: 17.61 kB
@plane/decorators:dev: ℹ [CJS] dist/index.d.ts.map 0.91 kB │ gzip: 0.45 kB
@plane/decorators:dev: ℹ [CJS] dist/index.d.ts 1.39 kB │ gzip: 0.51 kB
@plane/decorators:dev: ℹ [CJS] 2 files, total: 2.30 kB
@plane/ui:dev: ℹ [ESM] dist/index.js 176.43 kB │ gzip: 35.41 kB
@plane/ui:dev: ℹ [ESM] dist/index.js.map 313.60 kB │ gzip: 63.30 kB
@plane/ui:dev: ℹ [ESM] dist/index.d.ts.map 18.66 kB │ gzip: 6.19 kB
@plane/ui:dev: ℹ [ESM] dist/index.d.ts 39.31 kB │ gzip: 8.29 kB
@plane/ui:dev: ℹ [ESM] 4 files, total: 547.99 kB
@plane/utils:dev: ℹ [CJS] dist/index.cjs 198.00 kB │ gzip: 47.57 kB
@plane/utils:dev: ℹ [CJS] dist/index.cjs.map 324.00 kB │ gzip: 72.74 kB
@plane/utils:dev: ℹ [CJS] 2 files, total: 521.99 kB
@plane/decorators:dev: ✔ Rebuild complete in 281ms
@plane/decorators:dev: ℹ Change detected: /home/gustavo/oxeanbits/devops/makeplane-plane/packages/decorators/.turbo/turbo-dev.log
@plane/decorators:dev: ℹ Cleaning 7 files
@plane/editor:build: ELIFECYCLE Command failed with exit code 2.
@plane/hooks:dev: ℹ [CJS] dist/index.d.cts.map 0.63 kB │ gzip: 0.38 kB
@plane/hooks:dev: ℹ [CJS] dist/index.d.cts 1.52 kB │ gzip: 0.68 kB
@plane/hooks:dev: ℹ [CJS] 2 files, total: 2.16 kB
@plane/hooks:dev: ✔ Rebuild complete in 227ms
@plane/hooks:dev: ℹ Change detected: /home/gustavo/oxeanbits/devops/makeplane-plane/packages/hooks/.turbo/turbo-dev.log, /home/gustavo/oxeanbits/devops/makeplane-plane/packages/hooks/.turbo/turbo-dev.log
@plane/hooks:dev: ℹ Cleaning 8 files
@plane/decorators:dev: ℹ [CJS] dist/index.js 49.85 kB │ gzip: 8.77 kB
@plane/decorators:dev: ℹ [CJS] 1 files, total: 49.85 kB
@plane/editor:build: ERROR: command finished with error: command (/home/gustavo/oxeanbits/devops/makeplane-plane/packages/editor) /home/gustavo/.local/share/pnpm/.tools/pnpm/10.12.1/bin/pnpm run build exited (2)
admin:dev:
@plane/editor#build: command (/home/gustavo/oxeanbits/devops/makeplane-plane/packages/editor) /home/gustavo/.local/share/pnpm/.tools/pnpm/10.12.1/bin/pnpm run build exited (2)
Tasks: 10 successful, 23 total
Cached: 10 cached, 23 total
Time: 25.193s
Failed: @plane/editor#build
ERROR run failed: command exited (2)
ELIFECYCLE Command failed with exit code 2.
Continua com os mesmos erros!
EXPLANATION: Investigated why `http://localhost:3001/god-mode` was refusing connection. Confirmed the admin app is a separate Next app in `apps/admin` with `dev` script `next dev --port 3001`, and its env expects `NEXT_PUBLIC_ADMIN_BASE_URL=http://localhost:3001` plus `NEXT_PUBLIC_ADMIN_BASE_PATH=/god-mode`. Also verified that `pnpm --filter admin dev` starts successfully, so the refusal happens because the admin app is not running when only the web app is started. No repository files changed, so this is an allow-empty audit commit. --- PROMPT: [Image 1] Not possible to access god-mode
EXPLANATION: Investigated the unstaged phase 3 KPI files, refined the new route shell, and completed the phase 3 implementation. Added the new nested KPI route at `apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/[cycleId]/kpi/page.tsx` and the new shell component at `apps/web/core/components/cycles/kpi/page-shell.tsx`. The shell now lives inside the existing cycle detail layout, fetches cycle details on direct access, reuses `useCyclesDetails` for the existing analytics pipeline, sets the page title, shows a loading state while cycle or analytics data is preparing, and shows a safe empty state when the cycle is missing. Updated `PLAN.md` to mark phase 3 complete and record touched files plus validation results. Validation: `pnpm --filter web exec eslint "app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/[cycleId]/kpi/page.tsx" "core/components/cycles/kpi/page-shell.tsx"` passed; `pnpm --filter web check:types` passed. --- PROMPT: Investigate the existing changes in new files (which are not staged yet), that are related to the phase 3, create new KPI rout and the page shell Continue the implementation!
EXPLANATION: Implemented phase 4 of the cycle KPI feature by wiring the first burndown KPI card to estimate-point analytics in `apps/web/core/components/cycles/kpi/page-shell.tsx`. The KPI page now renders a real burndown chart from `cycle.estimate_distribution.completion_chart`, uses `cycle.total_estimate_points` and related progress fields for summary metrics, shows loading and empty states for missing dates or missing estimates, and explicitly keeps cancelled work items out of the burndown for this version. Extended `apps/web/core/components/core/sidebar/progress-chart.tsx` in a backward-compatible way so the KPI screen can use `Time` and `Remaining points` axis labels, estimate-point legend copy, and preserve null future values from the API payload. Updated `PLAN.md` to mark phase 4-6 progress and log the validation commands. Validation: `pnpm --filter web exec eslint "core/components/core/sidebar/progress-chart.tsx" "core/components/cycles/kpi/page-shell.tsx"` passed; `pnpm --filter web check:types` passed. --- PROMPT: Move to phase 4 and wire the first burndown KPI card with estimate-point data
EXPLANATION: Yes, the previous KPI implementation had changed the shared `apps/web/core/components/core/sidebar/progress-chart.tsx`, which risked affecting the existing burndown shown on the cycle pages. I corrected that by restoring `progress-chart.tsx` to its original shared behavior and creating a KPI-only chart component at `apps/web/core/components/cycles/kpi/burndown-chart.tsx`. The KPI route now uses the new isolated chart, so the existing cycle-page burndown remains untouched while the KPI subroute keeps its estimate-point-specific labels and null-preserving behavior. Updated `PLAN.md` to record the isolation change and validation results. Validation: `pnpm --filter web exec eslint "core/components/core/sidebar/progress-chart.tsx" "core/components/cycles/kpi/burndown-chart.tsx" "core/components/cycles/kpi/page-shell.tsx"` passed; `pnpm --filter web check:types` passed. --- PROMPT: Did you changed the burndown chart that is show in http://localhost:3000/oxeanbits/projects/152163d5-7b66-4a67-a8ed-0025d921424d/cycles/ page? It should remain untouched, only a new one created inside KPIs subroute
EXPLANATION: Investigated the KPI chart bug where the new burndown started at zero and dropped into negative values. The issue is isolated to the KPI-only chart path, not the existing cycle-page burndown. Updated `apps/web/core/components/cycles/kpi/burndown-chart.tsx` to normalize unexpected completed-progress shaped payloads into remaining estimate points, preserve null future values, clamp the chart to the valid `0..totalEstimatePoints` range, and keep the fix scoped to the KPI subroute. Updated `PLAN.md` with the bugfix note and validation results. Validation: `pnpm --filter web exec eslint "core/components/cycles/kpi/burndown-chart.tsx" "core/components/cycles/kpi/page-shell.tsx"` passed; `pnpm --filter web check:types` passed. --- PROMPT: [Image 1] The burndown chart is wrong: starts with 0 and burn to negative!
EXPLANATION: Updated `PLAN.md` to add a new phase 8 dedicated to KPI burndown chart filtering. The new section defines a detailed checklist for label-based filtering, including the example where selecting the `bug` label should scope the chart to work items with that label, plus related UI, data-source, empty-state, and persistence considerations. I also updated the automated test and manual verification sections to include filter coverage and renumbered the later phases accordingly. No tests were run for this plan-only change. --- PROMPT: Add in the PLAN.md file, a new feature to be implemented in phase 8, filter the burndown chart. It should be possible, for example, filter by labels, so if a ticket has a label called "bug", and I select, it should filter only by it.
EXPLANATION: Added a KPI-only tendency line to `apps/web/core/components/cycles/kpi/burndown-chart.tsx` so the new burndown view matches the expected behavior of the existing burndown experience without changing the shared cycle-page chart. The KPI chart now normalizes current values once, computes a projected tendency line from the first and latest known remaining-point values, and renders it as a dashed third series alongside the current and ideal lines. Updated `PLAN.md` to record the enhancement and validation results. Validation: `pnpm --filter web exec eslint "core/components/cycles/kpi/burndown-chart.tsx"` passed; `pnpm --filter web check:types` passed. --- PROMPT: In the burndown chart, it should show a tendency line, similar to the already existent burndown chart
EXPLANATION: Investigated how the existing cycle-page burndown works in the current codebase. Confirmed that the existing chart does not implement a separate tendency/projection series in the cycle feature layer; it renders only the backend-provided `current` remaining values plus a client-computed dashed `ideal` line. Also confirmed that the underlying `AreaChart` component supports an optional `comparisonLine`, but the existing cycle burndown does not use that feature. No repository files changed, so this is an allow-empty audit commit. --- PROMPT: How it worked in the the existing one???
EXPLANATION: Implemented phase 8 of the KPI feature with frontend-only label filtering. The KPI page now fetches all cycle work items, project labels, and project estimates on the client, recomputes the estimate-point burndown locally for the selected labels, and updates the scope/completed/remaining stats from the same filtered dataset. Added a multi-select label filter near the burndown card header, an `All work items` default state, clear filter action, active filter summary, and client-side empty/error states for no labels, no matches, or no estimated work items. The shared cycle-page burndown remains untouched. Added `apps/web/core/components/cycles/kpi/filter-utils.ts` for the client-side burndown math and updated `PLAN.md` to mark phase 8 complete and log the validation results. Validation: `pnpm --filter web exec eslint "core/components/cycles/kpi/filter-utils.ts" "core/components/cycles/kpi/page-shell.tsx" "core/components/cycles/kpi/burndown-chart.tsx"` passed; `pnpm --filter web check:types` passed. --- PROMPT: Okay, now, pass to the phase 8, and allow to filter through labels The filter must be done in on the frontend, client-side filter
EXPLANATION: Investigated whether the production-style docker compose stack can replace `docker-compose-local.yml` for local frontend development with `pnpm --filter web dev`. Confirmed that the local compose is the correct fit for that workflow because it exposes the API on `localhost:8000`, uses the local Django entrypoints/settings, and avoids running containerized frontend apps that would duplicate the local pnpm dev servers. The production/deployment compose can be used to test the full containerized stack by itself, but as written it is not a drop-in companion for `pnpm --filter web dev` because it routes traffic through nginx/local-plane.com and does not expose the API to the host in the same way. No repository files changed, so this is an allow-empty audit commit.
---
PROMPT: x-app-env : &app-env
environment:
- NGINX_PORT=${NGINX_PORT:-80}
- WEB_URL=${WEB_URL:-http://local-plane.com}
- NEXT_PUBLIC_API_BASE_URL=${NEXT_PUBLIC_API_BASE_URL:-http://local-plane.com}
- DEBUG=${DEBUG:-0}
- DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE:-plane.settings.production} # deprecated
- NEXT_PUBLIC_DEPLOY_URL=${NEXT_PUBLIC_DEPLOY_URL:-http://local-plane.com/spaces} # deprecated
- SENTRY_DSN=${SENTRY_DSN:-""}
- SENTRY_ENVIRONMENT=${SENTRY_ENVIRONMENT:-"production"}
- GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID:-""}
- GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID:-""}
- GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET:-""}
- DOCKERIZED=${DOCKERIZED:-1} # deprecated
- CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS:-""}
- CSRF_TRUSTED_ORIGINS=${CSRF_TRUSTED_ORIGINS:-""}
# Gunicorn Workers
- GUNICORN_WORKERS=${GUNICORN_WORKERS:-2}
#DB SETTINGS
- PGHOST=${PGHOST:-plane-db}
- PGDATABASE=${PGDATABASE:-plane}
- POSTGRES_USER=${POSTGRES_USER:-plane}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-plane}
- POSTGRES_DB=${POSTGRES_DB:-plane}
- PGDATA=${PGDATA:-/var/lib/postgresql/data}
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${PGHOST}/${PGDATABASE}
# REDIS SETTINGS
- REDIS_HOST=${REDIS_HOST:-plane-redis}
- REDIS_PORT=${REDIS_PORT:-6379}
- REDIS_URL=redis://${REDIS_HOST}:6379/
# RabbitMQ Settings
- RABBITMQ_HOST=${RABBITMQ_HOST:-plane-mq}
- RABBITMQ_PORT=${RABBITMQ_PORT:-5672}
- RABBITMQ_DEFAULT_USER=${RABBITMQ_USER:-plane}
- RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD:-plane}
- RABBITMQ_DEFAULT_VHOST=${RABBITMQ_VHOST:-plane}
- RABBITMQ_VHOST=${RABBITMQ_VHOST:-plane}
- AMQP_URL=${AMQP_URL:-amqp://plane:plane@plane-mq:5672/plane}
# EMAIL SETTINGS - Deprecated can be configured through admin panel
- EMAIL_HOST=${EMAIL_HOST:-""}
- EMAIL_HOST_USER=${EMAIL_HOST_USER:-""}
- EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD:-""}
- EMAIL_PORT=${EMAIL_PORT:-587}
- EMAIL_FROM=${EMAIL_FROM:-"Team Plane <team@mailer.plane.so>"}
- EMAIL_USE_TLS=${EMAIL_USE_TLS:-1}
- EMAIL_USE_SSL=${EMAIL_USE_SSL:-0}
- DEFAULT_EMAIL=${DEFAULT_EMAIL:-captain@plane.so}
- DEFAULT_PASSWORD=${DEFAULT_PASSWORD:-password123}
# OPENAI SETTINGS - Deprecated can be configured through admin panel
- OPENAI_API_BASE=${OPENAI_API_BASE:-https://api.openai.com/v1}
- OPENAI_API_KEY=${OPENAI_API_KEY:-""}
- GPT_ENGINE=${GPT_ENGINE:-"gpt-3.5-turbo"}
# LOGIN/SIGNUP SETTINGS - Deprecated can be configured through admin panel
- ENABLE_SIGNUP=${ENABLE_SIGNUP:-1}
- ENABLE_EMAIL_PASSWORD=${ENABLE_EMAIL_PASSWORD:-1}
- ENABLE_MAGIC_LINK_LOGIN=${ENABLE_MAGIC_LINK_LOGIN:-0}
# Application secret
- SECRET_KEY=${SECRET_KEY:-60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5}
# DATA STORE SETTINGS
- USE_MINIO=${USE_MINIO:-1}
- AWS_REGION=${AWS_REGION:-}
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-"access-key"}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-"secret-key"}
- AWS_S3_ENDPOINT_URL=${AWS_S3_ENDPOINT_URL:-http://plane-minio:9000}
- AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME:-uploads}
- MINIO_ROOT_USER=${MINIO_ROOT_USER:-"access-key"}
- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD:-"secret-key"}
- BUCKET_NAME=${BUCKET_NAME:-uploads}
- FILE_SIZE_LIMIT=${FILE_SIZE_LIMIT:-5242880}
- LIVE_SERVER_SECRET_KEY=${LIVE_SERVER_SECRET_KEY:-live-server-secret-key}
- API_BASE_URL=${API_BASE_URL:-http://api:8000}
- SIGNED_URL_EXPIRATION=${SIGNED_URL_EXPIRATION:-30}
- API_KEY_RATE_LIMIT=${API_KEY_RATE_LIMIT:-5000}
- SESSION_COOKIE_AGE=${SESSION_COOKIE_AGE:-1296000}
- SESSION_SAVE_EVERY_REQUEST=${SESSION_SAVE_EVERY_REQUEST:-1}
services:
web:
<<: *app-env
platform: linux/amd64
image: makeplane/plane-frontend:${PLANE_VERSION:-v1.1.0}
restart: unless-stopped
deploy:
replicas: ${WEB_REPLICAS:-1}
depends_on:
- api
- worker
space:
<<: *app-env
platform: linux/amd64
image: makeplane/plane-space:${PLANE_VERSION:-v1.1.0}
restart: unless-stopped
deploy:
replicas: ${SPACE_REPLICAS:-1}
depends_on:
- api
- worker
- web
admin:
<<: *app-env
platform: linux/amd64
image: makeplane/plane-admin:${PLANE_VERSION:-v1.1.0}
restart: unless-stopped
deploy:
replicas: ${ADMIN_REPLICAS:-1}
depends_on:
- api
- web
live:
<<: *app-env
profiles:
- live-colaboration
image: makeplane/plane-live:${PLANE_VERSION:-v1.1.0}
platform: linux/amd64
restart: unless-stopped
deploy:
replicas: ${LIVE_REPLICAS:-1}
depends_on:
- api
- web
api:
<<: *app-env
platform: linux/amd64
image: makeplane/plane-backend:${PLANE_VERSION:-v1.1.0}
restart: unless-stopped
command: ./bin/docker-entrypoint-api.sh
deploy:
replicas: ${API_REPLICAS:-1}
volumes:
- logs_api:/code/plane/logs
- ./api/storage.py:/code/plane/settings/storage.py
# <<<<<<< Updated upstream
# - ./api/issue.py:/code/plane/api/views/issue.py
# =======
# - ./api/session.py:/code/plane/authentication/middleware/session.py
# >>>>>>> Stashed changes
depends_on:
- plane-db
- plane-redis
- plane-mq
worker:
<<: *app-env
platform: linux/amd64
image: makeplane/plane-backend:${PLANE_VERSION:-v1.1.0}
restart: unless-stopped
command: ./bin/docker-entrypoint-worker.sh
volumes:
- logs_worker:/code/plane/logs
depends_on:
- api
- plane-db
- plane-redis
- plane-mq
beat-worker:
<<: *app-env
platform: linux/amd64
image: makeplane/plane-backend:${PLANE_VERSION:-v1.1.0}
restart: unless-stopped
command: ./bin/docker-entrypoint-beat.sh
volumes:
- logs_beat-worker:/code/plane/logs
depends_on:
- api
- plane-db
- plane-redis
- plane-mq
migrator:
<<: *app-env
platform: linux/amd64
image: makeplane/plane-backend:${PLANE_VERSION:-v1.1.0}
restart: no
command: ./bin/docker-entrypoint-migrator.sh
volumes:
- logs_migrator:/code/plane/logs
depends_on:
- plane-db
- plane-redis
plane-db:
<<: *app-env
image: postgres:${POSTGRES_VERSION:-15.5-alpine}
restart: unless-stopped
command: postgres -c 'max_connections=1000'
volumes:
- pgdata:/var/lib/postgresql/data
plane-redis:
<<: *app-env
image: valkey/valkey:7.2.11-alpine
restart: unless-stopped
volumes:
- redisdata:/data
plane-mq:
<<: *app-env
image: rabbitmq:${RABBITMQ_VERSION:-3.13.6-management-alpine}
restart: always
volumes:
- rabbitmq_data:/var/lib/rabbitmq
plane-minio:
<<: *app-env
image: minio/minio:${MINIO_VERSION:-latest}
restart: unless-stopped
command: server /export --console-address ":9090"
volumes:
- uploads:/export
nginx:
image: nginx:${NGINX_VERSION:-1.25.3-alpine}
restart: always
ports:
- "80:80"
volumes:
- ./nginx/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/nginx/conf.d:/etc/nginx/conf.d
env_file:
- .env
depends_on:
- web
- api
- space
volumes:
pgdata:
redisdata:
uploads:
logs_api:
logs_worker:
logs_beat-worker:
logs_migrator:
rabbitmq_data:
Can I use this docker compose to test instead of the one used in @docker-compose-local.yml to dev?
It will work with `pnpm --filter web dev`?Called the Read tool with the following input: {"filePath":"/home/gustavo/oxeanbits/devops/makeplane-plane/docker-compose-local.yml"}<path>/home/gustavo/oxeanbits/devops/makeplane-plane/docker-compose-local.yml</path>
<type>file</type>
<content>1: services:
2: plane-redis:
3: image: valkey/valkey:7.2.11-alpine
4: restart: unless-stopped
5: networks:
6: - dev_env
7: volumes:
8: - redisdata:/data
9: ports:
10: - "6379:6379"
11:
12: plane-mq:
13: image: rabbitmq:3.13.6-management-alpine
14: restart: unless-stopped
15: networks:
16: - dev_env
17: volumes:
18: - rabbitmq_data:/var/lib/rabbitmq
19: env_file:
20: - .env
21: environment:
22: RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER}
23: RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD}
24: RABBITMQ_DEFAULT_VHOST: ${RABBITMQ_VHOST}
25:
26: plane-minio:
27: image: minio/minio
28: restart: unless-stopped
29: networks:
30: - dev_env
31: entrypoint: >
32: /bin/sh -c "
33: mkdir -p /export/${AWS_S3_BUCKET_NAME} &&
34: minio server /export --console-address ':9090' &
35: sleep 5 &&
36: mc alias set myminio http://localhost:9000 ${AWS_ACCESS_KEY_ID} ${AWS_SECRET_ACCESS_KEY} &&
37: mc mb myminio/${AWS_S3_BUCKET_NAME} -p || true
38: && tail -f /dev/null
39: "
40: volumes:
41: - uploads:/export
42: env_file:
43: - .env
44: environment:
45: MINIO_ROOT_USER: ${AWS_ACCESS_KEY_ID}
46: MINIO_ROOT_PASSWORD: ${AWS_SECRET_ACCESS_KEY}
47: ports:
48: - "9000:9000"
49: - "9090:9090"
50:
51: plane-db:
52: image: postgres:15.7-alpine
53: restart: unless-stopped
54: networks:
55: - dev_env
56: command: postgres -c 'max_connections=1000'
57: volumes:
58: - pgdata:/var/lib/postgresql/data
59: env_file:
60: - .env
61: environment:
62: PGDATA: /var/lib/postgresql/data
63: ports:
64: - "5432:5432"
65:
66: # web:
67: # build:
68: # context: .
69: # dockerfile: ./web/Dockerfile.dev
70: # restart: unless-stopped
71: # networks:
72: - dev_env
73: # volumes:
74: # - ./web:/app/web
75: # env_file:
76: # - ./web/.env
77: # depends_on:
78: # - api
79: # - worker
80:
81: # space:
82: # build:
83: # context: .
84: # dockerfile: ./space/Dockerfile.dev
85: # restart: unless-stopped
86: # networks:
87: # - dev_env
88: # volumes:
89: # - ./space:/app/space
90: # depends_on:
91: # - api
92: # - worker
93: # - web
94:
95: # admin:
96: # build:
97: # context: .
98: # dockerfile: ./admin/Dockerfile.dev
99: # restart: unless-stopped
100: # networks:
101: # - dev_env
102: # volumes:
103: # - ./admin:/app/admin
104: # depends_on:
105: # - api
106: # - worker
107: # - web
108:
109: # live:
110: # build:
111: # context: .
112: # dockerfile: ./live/Dockerfile.dev
113: # restart: unless-stopped
114: # networks:
115: # - dev_env
116: # volumes:
117: # - ./live:/app/live
118: # depends_on:
119: # - worker
120: # - web
121:
122: api:
123: build:
124: context: ./apps/api
125: dockerfile: Dockerfile.dev
126: args:
127: DOCKER_BUILDKIT: 1
128: restart: unless-stopped
129: networks:
130: - dev_env
131: volumes:
132: - ./apps/api:/code
133: command: ./bin/docker-entrypoint-api-local.sh
134: env_file:
135: - ./apps/api/.env
136: depends_on:
137: - plane-db
138: - plane-redis
139: - plane-mq
140: ports:
141: - "8000:8000"
142:
143: worker:
144: build:
145: context: ./apps/api
146: dockerfile: Dockerfile.dev
147: args:
148: DOCKER_BUILDKIT: 1
149: restart: unless-stopped
150: networks:
151: - dev_env
152: volumes:
153: - ./apps/api:/code
154: command: ./bin/docker-entrypoint-worker.sh
155: env_file:
156: - ./apps/api/.env
157: depends_on:
158: - api
159: - plane-db
160: - plane-redis
161:
162: beat-worker:
163: build:
164: context: ./apps/api
165: dockerfile: Dockerfile.dev
166: args:
167: DOCKER_BUILDKIT: 1
168: restart: unless-stopped
169: networks:
170: - dev_env
171: volumes:
172: - ./apps/api:/code
173: command: ./bin/docker-entrypoint-beat.sh
174: env_file:
175: - ./apps/api/.env
176: depends_on:
177: - api
178: - plane-db
179: - plane-redis
180:
181: migrator:
182: build:
183: context: ./apps/api
184: dockerfile: Dockerfile.dev
185: args:
186: DOCKER_BUILDKIT: 1
187: restart: "no"
188: networks:
189: - dev_env
190: volumes:
191: - ./apps/api:/code
192: command: ./bin/docker-entrypoint-migrator.sh --settings=plane.settings.local
193: env_file:
194: - ./apps/api/.env
195: depends_on:
196: - plane-db
197: - plane-redis
198:
199: # proxy:
200: # build:
201: # context: ./apps/proxy
202: # dockerfile: Dockerfile.ce
203: # restart: unless-stopped
204: # networks:
205: # - dev_env
206: # ports:
207: # - ${LISTEN_HTTP_PORT}:80
208: # - ${LISTEN_HTTPS_PORT}:443
209: # env_file:
210: # - .env
211: # environment:
212: # FILE_SIZE_LIMIT: ${FILE_SIZE_LIMIT:-5242880}
213: # BUCKET_NAME: ${AWS_S3_BUCKET_NAME:-uploads}
214: # depends_on:
215: # - api
216: # - web
217: # - space
218: # - admin
219:
220: volumes:
221: redisdata:
222: uploads:
223: pgdata:
224: rabbitmq_data:
225:
226: networks:
227: dev_env:
228: driver: bridge
(End of file - total 229 lines)
</content>
Can I use this docker compose to test instead of the one used in @docker-compose-local.yml to dev?
It will work with `pnpm --filter web dev`?
EXPLANATION: Investigated what would need to change to use the production-style docker compose as a companion to `pnpm --filter web dev`. Confirmed the main gaps are host port exposure, API runtime mode, and duplicate frontend services: the current production-style compose does not expose `api:8000` to the host, uses the production API entrypoint, and starts containerized `web/admin/space` apps that conflict conceptually with local pnpm dev servers. Also confirmed the web image Dockerfile is a production Next build (`apps/web/Dockerfile.web`), while the local compose uses the Django local entrypoint (`apps/api/bin/docker-entrypoint-api-local.sh`). No repository files changed, so this is an allow-empty audit commit. --- PROMPT: What it would be necessary to be change to allow using this other docker compose?
EXPLANATION: Clarified the previous docker-compose guidance for the case where only the existing backend image needs to be reused with local frontend development. Confirmed that this reduces the required changes to exposing the API on localhost, allowing localhost CORS/CSRF, and disabling the containerized frontend/proxy services while keeping the backend image-based services. No repository files changed, so this is an allow-empty audit commit. --- PROMPT: Actually the only real usage is the existing backend!
EXPLANATION: Investigated the local web development setup to answer how to improve route-change performance. Confirmed that the web app currently runs plain `next dev --port 3000`, that the root Turbo workflow adds extra overhead through `dev -> ^build`, and that `next.config.js` already uses optimized package imports. Provided practical recommendations centered on avoiding the root monorepo dev command, trying Turbopack for the web app only, and limiting extra services during frontend work. No repository files changed, so this is an allow-empty audit commit. --- PROMPT: Is there a way to making the web faster while developing? It always take a lot of time when changing routes
EXPLANATION: Updated the KPI burndown tooltip so hover values only show two decimal places. The change is scoped to the KPI chart path by adding KPI-specific tooltip rendering in `apps/web/core/components/cycles/kpi/burndown-chart.tsx` and enabling `customTooltipContent` in the shared area chart component at `packages/propel/src/charts/area-chart/root.tsx`; existing non-KPI charts keep their default tooltip behavior. I also updated `PLAN.md` to record the change and validation results. Validation: `pnpm exec eslint "apps/web/core/components/cycles/kpi/burndown-chart.tsx" "packages/propel/src/charts/area-chart/root.tsx"` passed; `pnpm --filter web check:types` passed. --- PROMPT: Trucante the values when hovering the the burndown chart, is showing to much numbers after the . Only show 2 digits after .
EXPLANATION: Reverts 4e03f07 ("Format KPI burndown tooltip values"). Restored the previous KPI burndown tooltip behavior so hover values are no longer forced to two decimal places. Original prompt: Trucante the values when hovering the the burndown chart, is showing to much numbers after the . Only show 2 digits after . --- PROMPT: Undo the truncate digits! Revert
EXPLANATION: Investigated the Cycle KPI screen implementation to identify the stat cards shown above the burndown chart. Reviewed `apps/web/core/components/cycles/kpi/page-shell.tsx` and `apps/web/core/components/cycles/kpi/filter-utils.ts` to confirm the cards represent project name, cycle date range, total estimate scope, completed estimate points, and remaining estimate points, including how label filters recalculate the point-based stats. --- PROMPT: Explain to me the cards above the burndown chart on Cycle KPIs screen
EXPLANATION: Investigated the existing unstaged KPI consistency changes, reviewed the mismatch between the top summary cards and the burndown chart, and completed the fix. Updated `apps/web/core/components/cycles/kpi/filter-utils.ts` so the KPI summary cards now use the same effective cutoff date as the chart (`min(today, cycle end)`), which prevents work completed after the cycle end from reducing the top-level remaining points while still not appearing in the chart. Updated `apps/web/core/components/cycles/kpi/page-shell.tsx` to render the top `Completed` and `Remaining` cards from those chart-aligned values, and updated `PLAN.md` with the fix and validation results. Validation: `pnpm --filter web exec eslint "core/components/cycles/kpi/filter-utils.ts" "core/components/cycles/kpi/page-shell.tsx"` passed; `pnpm --filter web check:types` passed. --- PROMPT: In the KPIs screen, the Burndown KPI cards that show the Remaining points and the value of current remaining points are calculated different! The Remaining check if the the card were completed AFTER the end of the cycle while the card only use the completed_at date as a maximum The card should be the same! The cards above should reflect the chart properly Investigate the changes that are already made, review, and continue to apply
EXPLANATION: Updated the KPI summary row in `apps/web/core/components/cycles/kpi/page-shell.tsx` so the first card now shows the number of business days remaining until the end of the cycle instead of the project name. The calculation is done client-side from today's date to the cycle end date and excludes weekends, with safe fallback text when no end date is available. Updated `PLAN.md` to record the change and validation results. Validation: `pnpm --filter web exec eslint "core/components/cycles/kpi/page-shell.tsx"` passed; `pnpm --filter web check:types` passed. --- PROMPT: On the cards above burndown chart, instead of the Project name show the amount of business days until the end of the cycle
EXPLANATION: Investigated wording conventions around cycle completion and updated the KPI business-days card to fit the project context better. In `apps/web/core/components/cycles/kpi/page-shell.tsx`, past cycles now show `Cycle ended` instead of `0 business days`, and same-day zero-business-day cases show `Cycle ends today`; this fits the date-based KPI better than `finished`, while the rest of the product still uses `completed` for cycle workflow/state concepts. Updated `PLAN.md` with the wording decision and validation results. Validation: `pnpm --filter web exec eslint "core/components/cycles/kpi/page-shell.tsx"` passed; `pnpm --filter web check:types` passed. --- PROMPT: When there are 0 days lefts, says the cycle finished/ended, investigate which is the best for the project context
EXPLANATION: Investigated the current KPI burndown implementation and found that the `Tendency remaining points` series was still present in `apps/web/core/components/cycles/kpi/burndown-chart.tsx`. Removed the lingering tendency calculations and chart series so the KPI burndown now shows only current and ideal remaining points. Updated `PLAN.md` to reflect the final chart behavior and validation results. Validation: `pnpm --filter web exec eslint "core/components/cycles/kpi/burndown-chart.tsx"` passed; `pnpm --filter web check:types` passed. --- PROMPT: Remove Tendency remaining points
EXPLANATION: Reviewed the current client-side KPI label filtering logic to answer how it behaves. Confirmed the filter is inclusive, not exclusive: an issue is included when it has at least one of the selected labels, even if it also has other labels. With multiple selected labels, the current behavior is OR/any-match, not AND/all-match. No repository files changed, so this is an allow-empty audit commit. --- PROMPT: Labels filter are excludent? I mean, it will show only the issues WITH ONLY that one label?
EXPLANATION: Added a new KPI section below Burndown KPI that renders a bar chart of estimate points grouped by label. The chart data is computed client-side from cycle issues and is scoped by the same member/assignee filter state used by the burndown chart. Also updated PLAN.md and ran eslint/typecheck for the touched web files. --- PROMPT: Add a new block bellow Burndown KPI In this block should have a bar chart with points by label This bar chart should be filtered by the same members filters that filter the burndown chart
EXPLANATION: This prompt duplicated the immediately previous request and was already fully implemented in commit ff41163. No additional repository changes were necessary, so this commit is intentionally allow-empty to preserve the one-prompt-one-commit audit trail. --- PROMPT: Add a new block bellow Burndown KPI In this block should have a bar chart with points by label This bar chart should be filtered by the same members filters that filter the burndown chart
EXPLANATION: Fixed points-by-label filtering so the label KPI follows the active burndown filters consistently. The label chart now applies selected labels and selected assignees, reacts correctly to label-store updates, and groups missing label metadata into a single Unknown label bucket instead of rendering many indistinguishable unknown bars. Updated PLAN.md and reran eslint/type checks for the changed web files. --- PROMPT: Not filtering properly
EXPLANATION: Added a new Status KPI section with a bar chart that groups estimate points by workflow state names (including custom states), and wired project state fetching so state names/colors resolve correctly. The state chart uses the same active assignee and label filters as burndown/label KPIs, includes empty/error handling, and updates PLAN.md with change and test logs. Ran eslint and typecheck for the updated KPI files. --- PROMPT: Now, create a new block, with a bar chart with points by state, so point in To Do, Done, Blocked, Canceled, etc Notice it can contain custom, such as Backlog, Refinement, In Progress, Acceptance, etc
EXPLANATION: Investigated why Points by label can diverge from Burndown and Points by status under user filtering. No code change was needed for this response: the current implementation attributes full estimate points to every label on an issue, so multi-labeled issues are counted multiple times in label totals while burndown/status count each issue once. --- PROMPT: Why the points of the Points by label doesnt reflect the points that are in the Burndown Chart and Points by status when filtered by user?
EXPLANATION: Investigated why Burndown completed/remaining can differ from Points by status. The current code uses different semantics: burndown is a time-based remaining-points model with cutoff and cancellation burn-down rules, while status is a current-state snapshot by state_id. This can produce mismatches, especially when cancelled items have completed_at or when state__group in issue payload differs from current state mapping. --- PROMPT: Why the points completed and remaing in the burndown chart and the cards of the burndowm block are different than the points by status? The Estimate Points is 73 Done and 10 Canceled in the Points By Status But 83 completed and 14 remaining in Burndown Chart
EXPLANATION: Updated points-by-label and points-by-status builders to follow burndown-style cutoff semantics by applying the same chart cutoff date and excluding issues completed after that cutoff from bar chart totals. Wired cycleEndDate into both KPI bar builders from the page shell and updated KPI copy/logs in PLAN.md to reflect the time-capped behavior. --- PROMPT: Both of the bar chart must follow the same logic as the burn down If a issue is fixed after the cycle ends it should not reflect Must be time capped
EXPLANATION: Investigated the existing local changes and verified the time-capped bar-chart fix is complete in commit a13918c, including burndown-aligned cutoff behavior for both label and status KPI bars. No additional file changes were required after verification, so this is an allow-empty audit commit. --- PROMPT: Both of the bar chart must follow the same logic as the burn down If a issue is completed after the cycle ends it should not reflect Must be time capped Investigate the existing changes and finish the fix
EXPLANATION: Revised the points-by-status and points-by-label aggregation behavior so bar-chart totals reconcile with burndown scope instead of silently dropping post-cutoff completions. Status KPI now keeps full filtered scope and places issues completed after the burndown cutoff into a dedicated "Completed after cycle end" bucket, while label KPI uses the same filtered scope as burndown totals. Updated KPI explanatory text and PLAN.md, then ran eslint and typecheck. --- PROMPT: Ainda nao funcionando corretamente No burndown note que foram completados 69 pontos e ficou 14 remaining [Image 1] Contudo no grafico de barras de pontos por status, ficaram 69 pontos em done e 10 em status cancelado [Image 2] Revise essa implementacao
EXPLANATION: Reworked Points by status to follow burndown completion cutoff without introducing a synthetic "Completed after cycle end" column. Late-completed items are now reassigned to existing in-cycle states (started/unstarted/backlog fallback) so no new status column is created while keeping burndown-aligned completion behavior. Updated KPI copy and PLAN.md, then ran eslint and typecheck. --- PROMPT: It was not supposed to add a new column with status, how it is so difficult to just use the same logic in the Points by status as it is used in Estimate-point burndown
EXPLANATION: Implemented issue-level hover details for KPI bar charts by carrying per-bucket issue summaries through label/state aggregations and rendering custom tooltip content that lists the issues in the hovered bar. Updated PLAN.md and validated with eslint and web typecheck. --- PROMPT: Is it possible to, when the user hover the bar chart, in the popup that appears, show the list of the issues that are in this state?
EXPLANATION: Investigated the repository to find how to build the Docker image exclusively for the `web` component. Found the main Dockerfile at `apps/web/Dockerfile.web` which uses the project root as context. The image can be built via `docker build -f apps/web/Dockerfile.web .` or `docker compose build web`. --- PROMPT: Investigue o projeto, como fazer o build da imagem docker APENAS do web
EXPLANATION: Added a conditional KPI card next to Remaining in the burndown stats row that appears when user filtering is active and shows the count of filtered tickets without estimate points. Updated PLAN.md and ran eslint/type checks for the web app. --- PROMPT: When the view is filtered by users, add a new card next Remaining with the count of tickets without estimate points
EXPLANATION: Updated the burndown KPI stat row so the "Without estimate" card is always shown instead of only appearing in user-filtered mode. Kept the count based on the currently active filter scope and updated PLAN.md with implementation and verification logs. Ran eslint and web typecheck. --- PROMPT: Make this card fixed, always show the count of issues without estimate
EXPLANATION: Investigated how to expose issues without estimate points in the points-by-status visualization. No code changes were made in this step; documented implementation ideas and trade-offs based on current KPI aggregation and tooltip behavior. --- PROMPT: Investigate HOW we could add this count in the points-by-status chart It should be possible to see issues without points somehow and which status they are Think in ideas
EXPLANATION: Explained how points-by-status should behave when an entire status has only unestimated issues. No code changes were required for this clarification-only prompt. --- PROMPT: But what if there's a status where ALL the issues doesnot have estimate? How it would work?
EXPLANATION: Updated points-by-status so statuses with associated issues always appear, even when their estimated-point total is zero. Status labels now append `*` when the bucket has unestimated issues, and the hover tooltip now includes the unestimated issue count. Also removed the no-estimate guard that previously hid the status chart when all issues were unestimated, and updated PLAN.md/test log. --- PROMPT: Okay, so we will implement this way: Show ALL status that have a ticket associated with, even if the sum of estimate points issues is 0 Bellow, in the status title, show a * next to the title if contains unestimated issues When the user hover, show in the popup the count of issues unestimated
EXPLANATION: Added a new KPI section below points-by-status with a stacked bar chart by user that stacks issue counts per status inside each user bar. The implementation uses current filter scope and burndown-aligned state resolution, fetches project members for user labels, marks users with `*` when they have unestimated issues, and shows unestimated counts in the tooltip. Updated PLAN.md and validated with eslint and web typecheck. --- PROMPT: Add a new block bellow points by status chart, with the points by user It should be a bar chart In each bar, should show the count of each status that the issues contains, a sum of everything in the same bar Maintain the logic of showing if the user have unestimated issues
EXPLANATION: Updated the points-by-user chart to improve readability with many members by adding horizontal scrolling and dynamic minimum chart width, and increased visual spacing between columns by reducing bar width. Updated PLAN.md and ran eslint/typecheck. --- PROMPT: There is some way of adding a scroll to avoid not showing all the user names bellow each column Can have a bigger gap between each column
EXPLANATION: Updated the points-by-user chart to tilt member names on the x-axis so labels remain readable and reduced the spacing between columns by tightening chart width scaling and increasing bar width. Kept horizontal scroll behavior and updated PLAN.md with implementation/test log entries. --- PROMPT: Can tilt the member name to show all of them and have a smaller gap
EXPLANATION: Updated the points-by-user chart to render all member names on the x-axis by forcing full tick rendering (interval/minTickGap/ticks support in shared bar chart). Moved status legend labels outside the horizontal scroll region by replacing the in-chart legend with an external legend block, and kept tighter column spacing. Updated PLAN.md and reran eslint/typecheck. --- PROMPT: [Image 1] it MUST show all the users name, it is showing intercaleted names The title stauts name should not be in the scrollable, make it outside the scrollable area
EXPLANATION: Reworked the points-by-user x-axis category strategy to use stable user IDs and render display names through a custom rotated tick mapping, which prevents skipped/interleaved labels and ensures every user tick is rendered. Also removed the x-axis title label (Users) as requested and kept the status legend outside the scrollable chart area. Updated PLAN.md and reran eslint/typecheck. --- PROMPT: [Image 1] Still not showing all the users, investiage properly, review the previous ideas, and implement correctly. IT MUST SHOW ALL THE USERS, WITHOUT EXCEPCTION remove the x axys label, in this case it should not show USERS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description ✍️
This PR adds a new
KPIentry point for each cycle rows and introduces a dedicated cycle KPI page under the cycle detail route.Main changes included:
Added a new
KPIaction in the cycle list row, placed between the favorite star and quick actions menu.Added the new route:
/${workspaceSlug}/projects/${projectId}/cycles/${cycleId}/kpiCreated the cycle KPI page shell and initial KPI experience inside the existing cycle detail layout.
Added an estimate-point burndown chart for cycles, explicitly using estimate points instead of issue count.
Added client-side filtering for the KPI view by:
Added KPI summary cards for:
Added a points-by-label bar chart.
Added a points-by-status bar chart.
Added issue-level tooltip details for label and status charts.
Extended the shared area chart types/component to support explicit x-axis ticks, interval, and tick-gap control needed by the KPI burndown chart.
Behavior details:
Overview 👀
This PR introduces a new KPI screen for cycles with:
How to Smoke? 👷♂️
KPIbutton between the favorite star and the three-dot actions menu.KPIand confirm navigation goes to:/${workspaceSlug}/projects/${projectId}/cycles/${cycleId}/kpiKPIdoes not trigger the parent row click behavior.