24067ec87a
## What Removes `packages/twenty-companion` (package name `twenty-desktop`), the Electron "Twenty Desktop" proof of concept that landed with the Recall.ai call-recording work in #18281. ## Why it's dead code - **Not in the nx graph** — no `project.json`, so no target ever runs against it. - **Not in CI** — no workflow references it. #21327 said as much when bumping its Electron: "there's no CI job that builds/tests twenty-companion, so this isn't exercised by CI". - **No code references** — nothing imports it, and the only path references were the root `workspaces` array, `yarn.lock`, and `.vscode/twenty.code-workspace`. It talks to Twenty over the public REST API from a separate process, so there is no coupling to remove. - **Self-declared POC** — its README opens with "This application is a Proof of Concept (POC) and must NOT be used in production. [...] Security, stability, and performance have not been validated for production use." - **No feature work since it landed** (March 2026). Every commit touching it since has been a dependency or tooling sweep: React 19 migration, ESLint→OxLint, npm→yarn workspaces, and four CVE bumps. - **Docs already stale** — its README points at `packages/twenty-apps/internal/call-recording`, which no longer exists. The shipped app lives at `packages/twenty-apps/public/call-recorder` and does not reference the desktop companion. Meanwhile it pulled a full Electron + electron-forge toolchain into every root install, and kept generating Dependabot noise against a tree nothing builds. ## Changes - Delete `packages/twenty-companion`. - Drop its entry from root `workspaces` and from `.vscode/twenty.code-workspace`. - Drop four root `resolutions` that existed only to evict CVEs from the Electron tree, along with their entries in the `//resolutions` rationale doc: - `@electron/rebuild/tar`, `@electron/node-gyp/tar` - `@electron-forge/plugin-webpack/webpack-dev-server` - `make-fetch-happen` — its only sub-`^15` consumer was the Electron `node-gyp` fork; the remaining consumers (`@sigstore/sign`, `npm-registry-fetch`, `tuf-js`) already declare `^15.x` - Regenerate `yarn.lock`. ## Lockfile impact 469 descriptors removed, **zero version changes for any surviving descriptor** (verified with a descriptor-level diff of old vs new resolutions). Two descriptors show up as new — `make-fetch-happen@npm:^15.0.1` and `@npm:^15.0.4` — only because the global resolution was previously rewriting them; both still resolve to `15.0.6`. Re-running resolution produces a byte-identical lockfile. ## Test plan - [x] Repo-wide grep confirms no remaining references to `twenty-companion` / `twenty-desktop` / the Electron toolchain. - [x] `yarn install --mode=update-lockfile` is stable and idempotent under hardened mode. - [x] Descriptor-level lockfile diff shows no resolution changes outside the removed tree. - [ ] CI green (nothing targets the removed package, so the risk surface is the lockfile). --- _Generated by [Claude Code](https://claude.ai/code/session_019NttPZiJWSJz56RW8pZ5jN)_ <!-- This is an auto-generated description by cubic. --> <a href="https://cubic.dev/pr/twentyhq/twenty/pull/23310?utm_source=github" target="_blank" rel="noopener noreferrer" data-no-image-dialog="true"><picture><source media="(prefers-color-scheme: dark)" srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img alt="Review in cubic" src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a> <!-- End of auto-generated description by cubic. -->
151 lines
3.6 KiB
Plaintext
151 lines
3.6 KiB
Plaintext
{
|
|
"folders": [
|
|
{
|
|
"name": "ROOT",
|
|
"path": "../"
|
|
},
|
|
{
|
|
"name": "packages/twenty-docker",
|
|
"path": "../packages/twenty-docker"
|
|
},
|
|
{
|
|
"name": "packages/twenty-front",
|
|
"path": "../packages/twenty-front"
|
|
},
|
|
{
|
|
"name": "packages/twenty-ui",
|
|
"path": "../packages/twenty-ui"
|
|
},
|
|
{
|
|
"name": "packages/twenty-emails",
|
|
"path": "../packages/twenty-emails"
|
|
},
|
|
{
|
|
"name": "packages/twenty-shared",
|
|
"path": "../packages/twenty-shared"
|
|
},
|
|
{
|
|
"name": "packages/twenty-server",
|
|
"path": "../packages/twenty-server"
|
|
},
|
|
{
|
|
"name": "packages/twenty-utils",
|
|
"path": "../packages/twenty-utils"
|
|
},
|
|
{
|
|
"name": "packages/twenty-zapier",
|
|
"path": "../packages/twenty-zapier"
|
|
},
|
|
{
|
|
"name": "packages/twenty-oxlint-rules",
|
|
"path": "../packages/twenty-oxlint-rules"
|
|
},
|
|
{
|
|
"name": "packages/twenty-e2e-testing",
|
|
"path": "../packages/twenty-e2e-testing"
|
|
},
|
|
{
|
|
"name": "packages/twenty-docs",
|
|
"path": "../packages/twenty-docs"
|
|
},
|
|
{
|
|
"name": "packages/create-twenty-app",
|
|
"path": "../packages/create-twenty-app"
|
|
},
|
|
{
|
|
"name": "packages/twenty-apps",
|
|
"path": "../packages/twenty-apps"
|
|
},
|
|
{
|
|
"name": "packages/twenty-claude-skills",
|
|
"path": "../packages/twenty-claude-skills"
|
|
},
|
|
{
|
|
"name": "packages/twenty-cli",
|
|
"path": "../packages/twenty-cli"
|
|
},
|
|
{
|
|
"name": "packages/twenty-client-sdk",
|
|
"path": "../packages/twenty-client-sdk"
|
|
},
|
|
{
|
|
"name": "packages/twenty-front-component-renderer",
|
|
"path": "../packages/twenty-front-component-renderer"
|
|
},
|
|
{
|
|
"name": "packages/twenty-sdk",
|
|
"path": "../packages/twenty-sdk"
|
|
},
|
|
{
|
|
"name": "packages/twenty-website",
|
|
"path": "../packages/twenty-website"
|
|
}
|
|
],
|
|
"settings": {
|
|
"editor.formatOnSave": false,
|
|
"files.eol": "auto",
|
|
"[typescript]": {
|
|
"editor.formatOnSave": true,
|
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
"editor.codeActionsOnSave": {
|
|
"source.fixAll.oxc": "explicit",
|
|
"source.addMissingImports": "always"
|
|
}
|
|
},
|
|
"[javascript]": {
|
|
"editor.formatOnSave": true,
|
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
"editor.codeActionsOnSave": {
|
|
"source.fixAll.oxc": "explicit",
|
|
"source.addMissingImports": "always"
|
|
}
|
|
},
|
|
"[typescriptreact]": {
|
|
"editor.formatOnSave": true,
|
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
"editor.codeActionsOnSave": {
|
|
"source.fixAll.oxc": "explicit",
|
|
"source.addMissingImports": "always"
|
|
}
|
|
},
|
|
"[json]": {
|
|
"editor.formatOnSave": true
|
|
},
|
|
"javascript.format.enable": false,
|
|
"typescript.format.enable": false,
|
|
"cSpell.enableFiletypes": [
|
|
"!javascript",
|
|
"!json",
|
|
"!typescript",
|
|
"!typescriptreact",
|
|
"md",
|
|
"mdx"
|
|
],
|
|
"cSpell.words": [
|
|
"twentyhq"
|
|
],
|
|
"typescript.preferences.importModuleSpecifier": "non-relative",
|
|
"[javascript][typescript][typescriptreact]": {
|
|
"editor.codeActionsOnSave": {
|
|
"source.fixAll.oxc": "explicit",
|
|
"source.addMissingImports": "always"
|
|
}
|
|
},
|
|
"search.exclude": {
|
|
"**/.yarn": true,
|
|
},
|
|
"files.exclude": {
|
|
"packages/": true
|
|
},
|
|
"oxc.lint.enable": true,
|
|
"jest.runMode": "on-demand",
|
|
"jest.disabledWorkspaceFolders": [
|
|
"ROOT",
|
|
"packages/twenty-zapier",
|
|
"packages/twenty-docker",
|
|
"packages/twenty-utils",
|
|
"packages/twenty-postgres"
|
|
]
|
|
}
|
|
}
|