---
title: "2026-08-27 Monorepo complexity and import linters"
description: "Added passing complexity ceilings and targeted Python architecture contracts to mono."
image: "https://docs.virdx.dev/img/virdx-social-card.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.virdx.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# 2026-08-27 Monorepo complexity and import linters

## Work Done

- Added pinned Oxlint cyclomatic-complexity checks to every TypeScript project, using each project's measured current maximum as its initial ceiling.
- Enabled Ruff C901 across all ten Python projects with passing project-specific ceilings, repaired vxdata-api Ruff discovery, and added the missing dashboard-api lint target.
- Wired complexity checks into Nx lint tasks and focused Lefthook pre-commit commands.
- Added Import Linter contracts for vxdata-api layers and protected CRUD internals, plus the vxdata-sdk to vxdata-schemas dependency direction.
- Created mono commits `7f534eb3` and `6ae3b053`; all TypeScript/Python lint targets and module-boundary checks passed.

## Lessons Learned: Pitfalls

- Three projects still had Pixi v6 locks. Putting Ruff-only settings in their pyproject files forced noisy lock-format upgrades, so small ruff.toml files extending the existing pyproject configuration avoided unrelated lock churn.
- Enabling real Ruff discovery in vxdata-api exposed two stale unused imports that its previous `include = ["src"]` configuration had hidden.
- dashboard-frontend's existing Biome script has a large pre-existing backlog, so its new Nx lint target runs the requested complexity check without making those unrelated diagnostics part of this change.

## Lessons Learned: Improvements

- New Python project scaffolding should create a valid Ruff source pattern, select C901, and provide Nx and Lefthook lint coverage from the start.
- Complexity ceilings should be lowered project by project as current outliers are refactored; the configured values now provide explicit no-regression baselines.

Source: https://docs.virdx.dev/knowledge/inbox/2026-08-27-infrastructure-monorepo-complexity-and-import-linters/index.mdx
