Skip to content

Upgrade ESLint to 9 and migrate to flat config - #2432

Merged
MarceloRGonc merged 10 commits into
mainfrom
chore/eslint-9-flat-config
Aug 12, 2026
Merged

Upgrade ESLint to 9 and migrate to flat config#2432
MarceloRGonc merged 10 commits into
mainfrom
chore/eslint-9-flat-config

Conversation

@MarceloRGonc

@MarceloRGonc MarceloRGonc commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Part of OPS-4714

Copilot AI lite review requested due to automatic review settings August 11, 2026 10:57

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR upgrades the monorepo from ESLint 8.57.1 to ESLint 9.39.5 and migrates the workspace from legacy .eslintrc* configs to ESLint flat config (eslint.config.mjs). It also includes the necessary ecosystem bumps (TypeScript ESLint, Prettier 3, related plugins) and applies formatting/cleanup changes required by the stricter linting setup.

Changes:

  • Upgrade ESLint + TypeScript ESLint + related lint/format tooling and migrate to workspace/project flat configs.
  • Remove legacy .eslintrc.json files across projects and adjust Nx lint cache inputs to track flat config files.
  • Apply mechanical formatting and a few targeted cleanups/fixes surfaced by the new lint rules (plus CLI generator adjustment to remove generated ESLint configs).

Blocking

  • tools/scripts/validate-publishable-packages.ts starts Promise.all() without awaiting it (script can finish before validations complete).
  • packages/server/api/src/app/workers/worker-controller.ts returns success for /save-payloads without awaiting persistence, so failures can be silently logged while the caller receives {}.

Non-blocking

  • None.

Merge recommendation

Do not merge

Reviewed changes

Copilot reviewed 274 out of 289 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
tools/scripts/validate-publishable-packages.ts Fix formatting, but still needs awaiting validation promises (blocking).
tools/scripts/utils/publish-nx-project.ts Formatting-only updates to publish helper script.
tools/scripts/utils/files.ts Removes legacy .eslintrc.json read/write helpers.
tools/scripts/utils/exec.ts Formatting-only updates.
tools/scripts/publish.mjs Import/order + formatting changes in Nx publish script.
tools/licenses/.generatelicensefile.json JSON formatting normalization.
packages/ui-kit/eslint.config.mjs Adds flat ESLint config for ui-kit.
packages/ui-kit/.eslintrc.json Removes legacy ESLint config.
packages/ui-components/tailwind.config.cjs Minor formatting update (trailing comma).
packages/ui-components/src/ui/use-toast.tsx Refactors action type representation (lint-driven).
packages/ui-components/src/ui/tree-view.tsx Formatting-only ternary indentation.
packages/ui-components/src/ui/status-icon-with-text.tsx Type formatting change for interface extension.
packages/ui-components/src/ui/sortable.tsx Type formatting change for generic interfaces.
packages/ui-components/src/ui/select-all-checkbox/select-all-checkbox.tsx Formatting-only interface extends wrapping.
packages/ui-components/src/ui/numeric-input.tsx Formatting-only interface type wrapping.
packages/ui-components/src/ui/multi-step-form/multi-step-form-header.tsx Formatting-only interface declaration line wrap.
packages/ui-components/src/ui/image-with-fallback.tsx Formatting-only interface declaration line wrap.
packages/ui-components/src/ui/dot.tsx Formatting-only interface extends wrapping.
packages/ui-components/src/ui/data-table.tsx Formatting-only reduce/meta union formatting changes.
packages/ui-components/src/ui/data-table-column-header.tsx Formatting-only generic interface wrapping.
packages/ui-components/src/ui/button.tsx Formatting-only interface extends wrapping.
packages/ui-components/src/ui/badge.tsx Formatting-only interface extends wrapping.
packages/ui-components/src/tailwind.css CSS formatting (multi-line font-feature-settings).
packages/ui-components/src/stories/sidebar/sidebar.stories.tsx Formatting-only ternary indentation.
packages/ui-components/src/stories/select-all-checkbox.stories.tsx Formatting-only interface extends wrapping.
packages/ui-components/src/lib/types.ts Formatting-only union type compaction.
packages/ui-components/src/components/flow-canvas/edges/utils.ts Formatting-only union type compaction.
packages/ui-components/src/components/assistant-ui/tooltip-copy-button/tooltip-copy-button.tsx Formatting-only union type compaction.
packages/ui-components/eslint.config.mjs Adds flat ESLint config for ui-components (incl. Storybook).
packages/ui-components/.storybook/preview-head.html HTML formatting normalization for preload links.
packages/ui-components/.eslintrc.json Removes legacy ESLint config.
packages/tests-e2e/README.md Formatting-only change.
packages/tests-e2e/.eslintrc.json Removes legacy ESLint config.
packages/shared/src/lib/flow-run/execution/step-output.ts Formatting-only union type compaction.
packages/shared/src/lib/engine/engine-operation.ts Formatting-only union/conditional type indentation.
packages/shared/src/lib/common/application-error.ts Formatting-only constructor wrapping.
packages/shared/src/lib/app-connection/app-connection.ts Formatting-only conditional type indentation.
packages/shared/src/index.ts Removes redundant top-level re-exports (stale reference cleanup).
packages/shared/eslint.config.mjs Adds flat ESLint config for shared.
packages/shared/.eslintrc.json Removes legacy ESLint config.
packages/server/worker/src/lib/engine/flow-enginer-util.ts Formatting-only union type compaction.
packages/server/worker/src/lib/engine/engine-runner.ts Formatting-only union type compaction.
packages/server/worker/src/lib/engine/call-engine.ts Formatting-only line wrapping.
packages/server/worker/src/lib/api/axios-client.ts Formatting-only constructor wrapping.
packages/server/worker/eslint.config.mjs Adds flat ESLint config for server/worker.
packages/server/worker/.eslintrc.json Removes legacy ESLint config.
packages/server/shared/test/cache/memory-wrapper.test.ts Formatting-only wrapping for long await line.
packages/server/shared/src/lib/blocks/file-blocks-utils.ts Formatting-only wrapping for long await line.
packages/server/shared/eslint.config.mjs Adds flat ESLint config for server/shared.
packages/server/shared/.eslintrc.json Removes legacy ESLint config.
packages/server/api/test/unit/flow-template/flow-template.service.test.ts Formatting-only wrapping for long await line.
packages/server/api/test/unit/benchmark/benchmark-feature-guard.test.ts Simplifies cast formatting.
packages/server/api/test/unit/authentication/authentication.controller.test.ts Formatting-only wrapping for dynamic import line.
packages/server/api/test/integration/cloud/project/project.service.test.ts Formatting-only wrapping for long await line.
packages/server/api/test/integration/ce/flows/test-run-action-limits-calculator.test.ts Formatting-only wrapping for long generic cast.
packages/server/api/src/assets/azure-benchmark-dashboard/datasets/openops_tables_connection/Azure_Benchmark_KPI_efficiency.yaml YAML formatting normalization.
packages/server/api/src/assets/azure-benchmark-dashboard/charts/Azure_Total_Opportunities_16.yaml YAML formatting normalization.
packages/server/api/src/assets/azure-benchmark-dashboard/charts/Azure_Top_opportunities_to_address_15.yaml YAML formatting normalization.
packages/server/api/src/assets/azure-benchmark-dashboard/charts/Azure_Monthly_Amortized_Cost_Over_Time_12.yaml YAML formatting normalization.
packages/server/api/src/assets/azure-benchmark-dashboard/charts/Azure_Estimated_Monthly_Savings_13.yaml YAML formatting normalization.
packages/server/api/src/assets/aws-benchmark-dashboard/charts/Unified_Cost_Efficiency_Metric_8.yaml YAML formatting normalization.
packages/server/api/src/app/workers/worker-controller.ts Fixes Promise.all() inputs; still should await for correctness (blocking).
packages/server/api/src/app/workers/redis/redis-migration.ts Formatting-only wrapping for long await line.
packages/server/api/src/app/workers/redis/flow-run-cleaner.ts Formatting-only wrapping for long await line.
packages/server/api/src/app/workers/queue/queue-manager.ts Formatting-only conditional type indentation.
packages/server/api/src/app/wizard/resolvers/aws/aws-option-resolver.ts Formatting-only union type compaction.
packages/server/api/src/app/openops-analytics/benchmark/create-azure-benchmark-dashboard.ts Formatting-only wrapping for long await line.
packages/server/api/src/app/openops-analytics/benchmark/create-aws-benchmark-dashboard.ts Formatting-only wrapping for long await line.
packages/server/api/src/app/openops-analytics/analytics-seeding-service.ts Formatting-only wrapping for long await line.
packages/server/api/src/app/flows/flow/resolve-manual-run-payload.ts Parentheses tweak (lint-driven) in conditional expression.
packages/server/api/src/app/flows/flow/flow-version.controller.ts Formatting-only wrapping for long await line.
packages/server/api/src/app/flows/flow-run/flow-run-service.ts Parentheses tweak (lint-driven) in ternary/nullish chain.
packages/server/api/src/app/database/seeds/seed-admin.ts Formatting-only union type compaction.
packages/server/api/src/app/database/seeds/ensure-tables-mcp-endpoint-exists.ts Formatting-only wrapping for long await line.
packages/server/api/src/app/database/migrations/1776097737024-FixFolderUniqueConstraint.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1773046640936-AddIsCleanupToBenchmarkFlow.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1772449919844-DropLastRunIdFromBenchmark.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1770297289194-AddBenchmarkAndBenchmarkFlowTables.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1763755045436-MigrateTablesUserPassword.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1763394159990-AddTablesTokenToProject.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1763131154284-AddTablesTokenToProject.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1760500000000-MoveTablesWorkspaceIdFromOrganizationToProject.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1760429290001-AddTestRunActionLimitsToFlowVersion.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1759242268873-MigrateAiConfigToAppConnection.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1756377588949-RenameIsWorkflowToIsInternal.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1756298583000-AddIsWorkflowToFlowTable.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1755942417309-MigrateStepTestOutputToNewCompressionAlgorithm.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1754489349007-AddTriggerSourceToFlowRun.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1752758891771-UpdateUmbrellaRecommendationTypesAcrossFlowVersions.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1752487641303-AddSuccessToFlowStepTestOutputTable.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1751282188913-AddInputToTriggerEventTable.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1750933522145-AddInputToTestOutputTable.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1750161024797-RemoveBlockNameFromConnectionsTable.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1749809813762-SetBlockNameAsNullableInConnectionsTable.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1749644220381-AddStepIdToExistingFlowVersions.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1749111073431-AddAuthProviderKeyToExistingAppConnections.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1749066895522-AddAuthProviderKeyToAppConnectionTable.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1748356358053-AddProviderToAppConnectionTable.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1746618034190-AddStepIdToExistingFlowVersionsAndInsertOutputInTestOutputTable.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1746454781866-AddFlowStepTestOutputTable.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1745309649736-AddProviderSettingsAndConstraintForAiConfig.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1741945618000-ReplaceSelectOptionsIdsWithNames.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1741475952000-RenamePieceToBlock.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1741016911542-AddColumnForStartupTemplates.ts Formatting-only class declaration wrap.
packages/server/api/src/app/database/migrations/1740463047000-InitializePostgresSchema.ts Formatting-only class declaration wrap.
packages/server/api/src/app/benchmark/attach-benchmark-flows.service.ts Formatting-only wrapping for long await line.
packages/server/api/src/app/ai/mcp/openops-tools.ts Formatting-only wrapping for long await line.
packages/server/api/eslint.config.mjs Adds flat ESLint config for server/api.
packages/server/api/.eslintrc.json Removes legacy ESLint config.
packages/server/api/mocks/isolated-vm.js Formatting-only comment spacing.
packages/react-ui/tailwind.config.cjs Minor formatting update (trailing comma).
packages/react-ui/src/app/routes/settings/ai/index.tsx Formatting-only union type compaction in casts.
packages/react-ui/src/app/routes/openops-analytics/openops-analytics.css CSS indentation normalization.
packages/react-ui/src/app/features/templates/components/public-flow-template-filter-sidebar-wrapper.tsx Formatting-only wrapping for reduce call.
packages/react-ui/src/app/features/templates/components/connections-picker/connections-picker.tsx Parentheses tweak (lint-driven) in conditional expression.
packages/react-ui/src/app/features/navigation/side-menu/left-sidebar.tsx Formatting-only generic interface wrapping.
packages/react-ui/src/app/features/folders/component/move-subfolder-dialog.tsx Formatting-only generic type wrapping.
packages/react-ui/src/app/features/flows/components/move-flow-dialog.tsx Formatting-only generic type wrapping.
packages/react-ui/src/app/features/connections/lib/connections-utils.ts Formatting-only wrapping for reduce call.
packages/react-ui/src/app/features/connections/components/secret-text-connection-settings.tsx Removes runtime Type.Object usage; uses static request type for form.
packages/react-ui/src/app/features/connections/components/oauth2-connection-settings.tsx Parentheses tweak (lint-driven) in nullish coalescing.
packages/react-ui/src/app/features/connections/components/basic-secret-connection-settings.tsx Removes runtime Type.Object usage; uses static request type for form.
packages/react-ui/src/app/features/builder/hooks/tests/should-resync-step-settings.test.ts Simplifies cast formatting.
packages/react-ui/src/app/features/builder/flow-version-undo-redo/hooks/utils.ts Formatting-only wrapping for long await line.
packages/react-ui/src/app/features/builder/flow-version-undo-redo/hooks/flow-version-undo-redo.ts Removes unused catch binding (lint-driven).
packages/react-ui/src/app/features/builder/data-selector/index.tsx Formatting-only ternary indentation.
packages/react-ui/src/app/features/builder/builder-header/builder-publish-button.tsx Formatting-only wrapping for long i18n string.
packages/react-ui/src/app/features/builder/block-properties/text-input-with-mentions/tip-tap.css CSS indentation normalization.
packages/react-ui/src/app/features/builder/block-properties/form-utils.tsx Parentheses tweaks (lint-driven) for nullish coalescing.
packages/react-ui/src/app/features/builder/block-properties/dynamic-array/utils.ts Formatting-only wrapping for reduce call.
packages/react-ui/src/app/features/benchmark/use-provider-connections.ts Formatting-only union type compaction.
packages/react-ui/src/app/common/components/multi-select.tsx Formatting-only generic interface wrapping + boolean expression indentation.
packages/react-ui/public/html/collect_input.html HTML doctype normalization.
packages/react-ui/index.html HTML formatting normalization + doctype normalization.
packages/react-ui/eslint.config.mjs Adds flat ESLint config for react-ui.
packages/react-ui/.eslintrc.json Removes legacy ESLint config.
packages/openops/tsconfig.spec.json JSON formatting normalization.
packages/openops/tsconfig.lib.json JSON formatting normalization.
packages/openops/test/azure/auth.test.ts Formatting-only wrapping for dynamic import line.
packages/openops/test/aws/ssm/get-ssm-documents.test.ts Formatting-only wrapping for mock implementation signature.
packages/openops/test/aws/ssm/get-ssm-document-versions.test.ts Formatting-only wrapping for mock implementation signature.
packages/openops/test/aws/ssm/get-ssm-describe-document-info.test.ts Formatting-only wrapping for mock implementation signature.
packages/openops/test/aws/auth.test.ts Formatting-only wrapping for dynamic import line.
packages/openops/src/lib/servicenow/get-tables.ts Formatting-only wrapping for queryParams assignment.
packages/openops/src/lib/servicenow/get-state-fields.ts Parentheses tweak (lint-driven) in nullish coalescing.
packages/openops/src/lib/promise-pool.ts Formatting-only union type compaction.
packages/openops/src/lib/aws/pricing.ts Formatting-only union type compaction.
packages/openops/src/lib/aws/azure-aws-federation.ts Formatting-only wrapping for long await line.
packages/openops/src/lib/aws/arn-handler.ts Formatting-only wrapping for reduce call.
packages/openops/src/lib/ai/ai-auth.ts Formatting-only union type compaction.
packages/openops/project.json JSON formatting normalization.
packages/openops/eslint.config.mjs Adds flat ESLint config for openops.
packages/openops/.eslintrc.json Removes legacy ESLint config.
packages/engine/src/lib/variables/props-resolver.ts Removes a no-longer-needed eslint-disable comment.
packages/engine/src/lib/variables/processors/array-zipper.ts Formatting-only wrapping for reduce call.
packages/engine/src/lib/operations.ts Formatting-only union type compaction.
packages/engine/src/lib/handler/branch-executor.ts Formatting-only ternary indentation.
packages/engine/src/lib/engine-ipc.ts Formatting-only union type compaction.
packages/engine/src/lib/core/code/v8-isolate-code-sandbox.ts Adds eslint-disable for lazy require (lint-driven).
packages/engine/src/lib/cancellation-request-validator.ts Formatting-only wrapping for long await line.
packages/engine/src/get-feature-flag.ts Formatting-only wrapping for generic type arg line.
packages/engine/project.json Removes legacy ignorePath (flat-config migration).
packages/engine/eslint.config.mjs Adds flat ESLint config for engine, including ignore replacement.
packages/engine/.eslintrc.json Removes legacy ESLint config.
packages/engine/.eslintignore Removes legacy ignore file (flat config now handles ignores).
packages/cli/src/lib/utils/files.ts Removes legacy .eslintrc.json read/write helpers.
packages/cli/src/lib/utils/block-generators.ts Removes ESLint-config mutation; now deletes generated configs for blocks.
packages/cli/src/lib/commands/create-block.ts Updates generator to remove generated ESLint config file(s).
packages/cli/package.json JSON formatting normalization.
packages/cli/.eslintrc.json Removes legacy ESLint config.
packages/blocks/zendesk/.eslintrc.json Removes legacy ESLint config.
packages/blocks/webhook/.eslintrc.json Removes legacy ESLint config.
packages/blocks/vegacloud/src/lib/actions/get-anomalies-action.ts Formatting-only union type compaction.
packages/blocks/vegacloud/.eslintrc.json Removes legacy ESLint config.
packages/blocks/vantage/.eslintrc.json Removes legacy ESLint config.
packages/blocks/text-helper/.eslintrc.json Removes legacy ESLint config.
packages/blocks/terraform/src/lib/tfvars-parser.ts Formatting-only union type compaction.
packages/blocks/terraform/.eslintrc.json Removes legacy ESLint config.
packages/blocks/ternary/.eslintrc.json Removes legacy ESLint config.
packages/blocks/store/package.json Removes trailing newline/whitespace at EOF.
packages/blocks/store/.eslintrc.json Removes legacy ESLint config.
packages/blocks/snowflake/.eslintrc.json Removes legacy ESLint config.
packages/blocks/smtp/.eslintrc.json Removes legacy ESLint config.
packages/blocks/slack/.eslintrc.json Removes legacy ESLint config.
packages/blocks/sftp/.eslintrc.json Removes legacy ESLint config.
packages/blocks/servicenow/.eslintrc.json Removes legacy ESLint config.
packages/blocks/schedule/.eslintrc.json Removes legacy ESLint config.
packages/blocks/openops-tables/.eslintrc.json Removes legacy ESLint config.
packages/blocks/nops/.eslintrc.json Removes legacy ESLint config.
packages/blocks/monday/src/lib/common/helper.ts Fixes NaN fallback behavior for hour/minute parsing.
packages/blocks/monday/.eslintrc.json Removes legacy ESLint config.
packages/blocks/microsoft-teams/src/lib/common/on-action-received.ts Formatting-only union type compaction.
packages/blocks/microsoft-teams/src/lib/actions/request-action-message.ts Formatting-only union type compaction.
packages/blocks/microsoft-teams/.eslintrc.json Removes legacy ESLint config.
packages/blocks/microsoft-outlook/src/lib/actions/forward-email.ts Formatting-only union type compaction.
packages/blocks/microsoft-outlook/.eslintrc.json Removes legacy ESLint config.
packages/blocks/math-helper/.eslintrc.json Removes legacy ESLint config.
packages/blocks/list-operations/src/lib/actions/group-by-action.ts Formatting-only wrapping for reduce call.
packages/blocks/list-operations/project.json JSON formatting normalization.
packages/blocks/list-operations/.eslintrc.json Removes legacy ESLint config.
packages/blocks/linear/src/lib/triggers/new-issue.ts Formatting-only wrapping for long await line.
packages/blocks/linear/.eslintrc.json Removes legacy ESLint config.
packages/blocks/kion/.eslintrc.json Removes legacy ESLint config.
packages/blocks/jira-cloud/.eslintrc.json Removes legacy ESLint config.
packages/blocks/imap/.eslintrc.json Removes legacy ESLint config.
packages/blocks/hyperglance/.eslintrc.json Removes legacy ESLint config.
packages/blocks/http/src/lib/actions/send-http-request-action.ts Formatting-only union type compaction.
packages/blocks/http/package.json Removes trailing newline/whitespace at EOF.
packages/blocks/http/.eslintrc.json Removes legacy ESLint config.
packages/blocks/google-cloud/.eslintrc.json Removes legacy ESLint config.
packages/blocks/github/.eslintrc.json Removes legacy ESLint config.
packages/blocks/framework/src/lib/trigger/trigger.ts Formatting-only class declaration wrap.
packages/blocks/framework/src/lib/property/input/common.ts Formatting-only conditional type indentation.
packages/blocks/framework/src/lib/property/index.ts Formatting-only conditional type indentation.
packages/blocks/framework/src/lib/context.ts Formatting-only conditional type indentation.
packages/blocks/framework/src/lib/block.ts Formatting-only generic class declaration wrap.
packages/blocks/framework/src/lib/action/action.ts Formatting-only class declaration wrap.
packages/blocks/framework/.eslintrc.json Removes legacy ESLint config.
packages/blocks/flexera/.eslintrc.json Removes legacy ESLint config.
packages/blocks/flexera-one/.eslintrc.json Removes legacy ESLint config.
packages/blocks/finout/.eslintrc.json Removes legacy ESLint config.
packages/blocks/file-helper/.eslintrc.json Removes legacy ESLint config.
packages/blocks/end-flow/.eslintrc.json Removes legacy ESLint config.
packages/blocks/delay/.eslintrc.json Removes legacy ESLint config.
packages/blocks/date-helper/.eslintrc.json Removes legacy ESLint config.
packages/blocks/databricks/.eslintrc.json Removes legacy ESLint config.
packages/blocks/common/src/lib/http/core/delegating-authentication-converter.ts Formatting-only class declaration wrap.
packages/blocks/common/.eslintrc.json Removes legacy ESLint config.
packages/blocks/cloudzero/.eslintrc.json Removes legacy ESLint config.
packages/blocks/cloudhealth/src/lib/actions/get-asset-perspectives.ts Formatting-only wrapping for reduce call.
packages/blocks/cloudhealth/.eslintrc.json Removes legacy ESLint config.
packages/blocks/cloudformation/.eslintrc.json Removes legacy ESLint config.
packages/blocks/cloudfix/.eslintrc.json Removes legacy ESLint config.
packages/blocks/cloudability/src/lib/common/recommendations-api.ts Parentheses tweak (lint-driven) for nullish coalescing.
packages/blocks/cloudability/.eslintrc.json Removes legacy ESLint config.
packages/blocks/azure/src/lib/common-properties.ts Formatting-only union type compaction + wrapping.
packages/blocks/azure/.eslintrc.json Removes legacy ESLint config.
packages/blocks/aws/src/lib/actions/get-account-id-action.ts Formatting-only union type compaction.
packages/blocks/aws/.eslintrc.json Removes legacy ESLint config.
packages/blocks/aws-compute-optimizer/src/lib/common/ec2-recommendations-builder.ts Formatting-only generic class declaration wrap.
packages/blocks/aws-compute-optimizer/src/lib/common/ebs-recommendations-builder.ts Formatting-only generic class declaration wrap.
packages/blocks/aws-compute-optimizer/src/lib/actions/get-recommendations-summary-action.ts Formatting-only union type compaction.
packages/blocks/aws-compute-optimizer/src/lib/actions/ec2-get-recommendations-action.ts Formatting-only union type compaction.
packages/blocks/aws-compute-optimizer/src/lib/actions/ebs-get-recommendations-action.ts Formatting-only union type compaction.
packages/blocks/aws-compute-optimizer/project.json JSON formatting normalization.
packages/blocks/aws-compute-optimizer/.eslintrc.json Removes legacy ESLint config.
packages/blocks/aws-athena/.eslintrc.json Removes legacy ESLint config.
packages/blocks/archera/.eslintrc.json Removes legacy ESLint config.
packages/blocks/approval/.eslintrc.json Removes legacy ESLint config.
packages/blocks/anodot/src/lib/get-recommendations-action-predefined.ts Formatting-only union type compaction.
packages/blocks/anodot/.eslintrc.json Removes legacy ESLint config.
packages/blocks/ai/.eslintrc.json Removes legacy ESLint config.
package.json Upgrades ESLint ecosystem deps (ESLint 9, TS ESLint 8, Prettier 3, plugin updates).
nx.json Updates lint target inputs for Nx caching with flat config files.
jest.config.ts Formatting-only trailing comma.
eslint.config.mjs Adds root flat ESLint config entrypoint.
deploy/docker-compose/README.md Markdown formatting normalization.
CONTRIBUTING.md Markdown list formatting normalization.
AGENTS.md Updates code fence formatting + references new ESLint config filename.
.vscode/settings.json JSON formatting normalization.
.vscode/launch.json JSON formatting normalization.
.prettierrc Adds explicit Prettier plugin config (Prettier 3 behavior).
.github/ISSUE_TEMPLATE/feature-request.md YAML frontmatter quoting/formatting normalization.
.github/ISSUE_TEMPLATE/bug.md YAML frontmatter + markdown spacing normalization.
.github/dependabot.yml YAML quoting/formatting normalization.
.eslintrc.json Removes legacy root ESLint config (flat-config migration).
.eslintignore Removes legacy ignore file (flat-config migration).
.claude/skills/react/SKILL.md Formatting-only wrapping in example snippet.
.claude/skills/frontend-build-timing-audit/scripts/update-baseline.mjs Formatting-only import/order/wrapping changes.
.claude/skills/frontend-build-timing-audit/scripts/snapshot.mjs Formatting-only import/order/wrapping changes.
.claude/skills/frontend-build-timing-audit/scripts/lib/analyze.mjs Formatting-only import/order/wrapping changes.
.claude/skills/frontend-build-timing-audit/scripts/find-toplevel-init-calls.mjs Formatting-only import/order/wrapping changes.
.claude/skills/frontend-build-timing-audit/scripts/check-regression.mjs Formatting-only wrapping changes.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread packages/server/api/src/app/workers/worker-controller.ts
Comment thread tools/scripts/validate-publishable-packages.ts Outdated
MarceloRGonc and others added 4 commits August 11, 2026 12:05
Prepares the toolchain for flat config and ESLint 9. typescript-eslint 7
only accepts ESLint ^8.56, so it is the hard blocker for any upgrade past
v8; everything else here is either required by v8 or needed because the
plugin has no flat-config export.

Dependency changes:
- @typescript-eslint/* 7.18.0 -> 8.66.0 (accepts ESLint ^8/^9/^10)
- prettier 2.8.8 -> 3.9.6 and eslint-plugin-prettier 4.2.5 -> 5.5.6,
  since v4 has no flat-config export
- eslint-config-prettier 9.1.2 -> 10.1.8 (@nx/eslint-plugin peer wants ^10)
- eslint-plugin-vitest 0.5.4 -> @vitest/eslint-plugin 1.6.27 (renamed);
  its configs register as `@vitest`, so the extends were renamed to match
- eslint-plugin-testing-library 6.5.0 -> 7.16.2, eslint-plugin-jest-dom
  5.5.0 -> 5.10.1, jsonc-eslint-parser 2.4.2 -> 3.3.0
- drop eslint-plugin-tailwindcss, which no config referenced

Prettier 3 no longer auto-loads plugins, so prettier-plugin-organize-imports
is now declared explicitly in .prettierrc. Without it the plugin silently
stops organizing imports.

Fixes for findings the upgrade surfaced:
- worker-controller passed the void results of rejectedPromiseHandler to
  Promise.all, so the payload saves were never actually awaited. Caught by
  a stricter await-thenable.
- server/api extended the TypeScript and import-x configs at top level,
  which applied TS rules to .json files. Scoped them to the ts/js override.
- switch-exhaustiveness-check pins considerDefaultExhaustiveForUnions, which
  v8 flipped to false, to keep the previous behaviour
- drop a stale ban-types disable comment for a rule v8 removed
- replace three consts used only in `typeof` positions with plain types

@vitest/no-conditional-expect is disabled with a TODO: it newly reports
pre-existing conditional assertions in data-driven tests.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Mechanical reformat only, no behaviour changes. Split from the dependency bump
so the meaningful diff stays reviewable.

Scoped to the file types ESLint actually enforces prettier/prettier on - ts,
tsx, js and json. Prettier also covers md, yaml, css, html and mjs, but nothing
checks those in CI, so reformatting them would have been churn unrelated to
this upgrade. Note that lint-staged does run prettier on them, so they will be
reformatted whenever they are next edited.

The blast radius is small because .prettierrc already set
trailingComma: "all", which was Prettier 3's most disruptive default change.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Replaces 65 legacy config files (64 .eslintrc.json plus two .eslintignore)
with 11 flat configs. ESLint 10 removes eslintrc support entirely, so this is
the prerequisite for that upgrade; ESLint 8.57 reads flat config already, and
Nx sets ESLINT_USE_FLAT_CONFIG for us until we move to v9.

Most of the deleted files carried no configuration: 52 of the block configs
only re-declared the root config with empty rule blocks, and the two that
looked different were an identical file with different indentation and one
that redundantly re-applied the root's prettier config. Projects without their
own config now resolve to the root one, since both the Nx executor and ESLint
search upwards from the project directory.

Shared layers live in eslint.base.config.mjs as named exports (baseConfig,
frontendConfig, serverConfig) so Nx tracks one file as a lint cache input; a
second root config file would not match Nx's eslint config glob and so would
not invalidate the cache. nx.json inputs are updated to match.

The eslintrc "ignore everything, then un-ignore per project" idiom is gone,
replaced by real ignores. Note that cwd differs between the two ways Nx runs
ESLint - the executor runs from the workspace root, inferred targets from the
project root - and flat-config patterns resolve against cwd, so patterns are
globstar-prefixed to behave the same either way.

Also in this commit, because they are only reachable once the configs are
rewritten:
- eslint-plugin-import-x 0.5.3 -> 4.17.1 and eslint-import-resolver-typescript
  3.10.1 -> 4.4.5, adding import-x's typescript config so `named` stops
  reporting type-only exports
- add @eslint/js, globals and the typescript-eslint meta package, which
  @nx/eslint-plugin's flat configs require
- engine's .eslintignore became `ignores`; its lint target no longer passes
  ignorePath, which flat config rejects
- drop three re-exports from packages/shared/src/index.ts that duplicated what
  the ./lib/common and ./lib/flows barrels already export. import-x/export
  flagged them; a full build confirms nothing depended on them.

Verified: lint passes for all 63 projects, full build passes, and linted file
counts are unchanged (react-ui 459, server-api 500).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Flat config is the default in v9, so Nx no longer sets ESLINT_USE_FLAT_CONFIG
and the "Support for ESLint v8 is deprecated" warnings are gone.

v9 adds no-constant-binary-expression to the recommended set, which caught a
real bug in the monday block: `Number(x) ?? 0` never falls back, because
Number() returns NaN rather than a nullish value, so a malformed hour or minute
propagated NaN instead of 0. Changed to `|| 0`.

Also cleans up references left stale by the flat config migration:
- nx.json's production named input excluded .eslintrc.json
- the block generator edited a .eslintrc.json that Nx no longer emits, which
  would have broken `npm run create-block`. Blocks inherit the workspace
  config, so it now deletes the generated config instead of rewriting it.
- drop the now-unused readPackageEslint/writePackageEslint helpers
- AGENTS.md pointed at .eslintrc

Verified: lint passes for all 63 projects, full build passes, and the full test
suite passes except blocks-azure, which fails identically on origin/main. That
test asserts AZURE_EXTENSION_DIR is forwarded, but the implementation only
forwards it when set, so it depends on the environment. Left alone as
pre-existing and out of scope.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@MarceloRGonc
MarceloRGonc force-pushed the chore/eslint-9-flat-config branch from f4dce0e to 3ef2e05 Compare August 11, 2026 11:09
MarceloRGonc and others added 5 commits August 11, 2026 12:11
The OAuth authorization server merged from main was formatted with Prettier 2,
so prettier/prettier reported 8 errors in server-api once this branch's
Prettier 3 took effect.

Formatting only: Prettier 3 breaks after `=` rather than wrapping the call
arguments. No semantic change.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Build and release tooling under tools/ is not shipped code. No Nx project
covers that directory, so `nx lint` never reached it; the ignore stops editors
and bare `eslint .` runs from reporting on it too.

Since those files are no longer lint-enforced, their Prettier 3 reformatting is
reverted for consistency with the rest of this branch, which only reformats
what lint checks. The one deliberate change kept there is the removal of the
dead readPackageEslint/writePackageEslint helpers, which had no callers and
referenced the .eslintrc.json files this branch deletes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Corrects the earlier fix in this branch. The original defect was not that the
saves went unawaited - the route returns immediately both before and after, so
nothing was ever awaited. The defect was that
`rejectedPromiseHandler(Promise.all(savePayloads))` was dead code: the mapped
values were already void, so the aggregate could never see a rejection.

The earlier fix passed the real promises to Promise.all, which made the
aggregate live but reports only the first rejection, losing a log line per
additional failed save. This keeps one handler per save, so every failure is
logged, and drops the pointless aggregate.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@linear

linear Bot commented Aug 11, 2026

Copy link
Copy Markdown

OPS-4714

@sonarqubecloud

Copy link
Copy Markdown

@MarceloRGonc
MarceloRGonc merged commit 30d319f into main Aug 12, 2026
21 checks passed
@MarceloRGonc
MarceloRGonc deleted the chore/eslint-9-flat-config branch August 12, 2026 08:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants