From f1d8e926b561f048e19bf5e354838ecef3fd938d Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 5 Oct 2026 18:47:07 +0000 Subject: [PATCH 1/2] build(mise): add qlty for per-function complexity Install the Qlty CLI from GitHub releases so function-level cognitive and cyclomatic scores can be collected during development. Co-authored-by: Michael Bianco --- .config/mise.dev.lock | 50 +++++++++++++++++++++++++++++++++++++++++++ .config/mise.dev.toml | 1 + 2 files changed, 51 insertions(+) diff --git a/.config/mise.dev.lock b/.config/mise.dev.lock index eb24b2c3..b2ee2647 100644 --- a/.config/mise.dev.lock +++ b/.config/mise.dev.lock @@ -242,6 +242,53 @@ checksum = "sha256:3663f724c752bca5deb2d31798c7e33f94a4027e8aca10c25a56312353d57 url = "https://github.com/peterldowns/localias/releases/download/v3.0.0%2Bcommit.5d74685/localias-darwin-amd64" url_api = "https://api.github.com/repos/peterldowns/localias/releases/assets/277499098" +[[tools."github:qltysh/qlty"]] +version = "0.644.0" +backend = "github:qltysh/qlty" +specifiers = ["latest"] + +[tools."github:qltysh/qlty"."platforms.linux-arm64"] +checksum = "sha256:714bfbff370d5111bf0bc97c2ea3432c782402ca41d810845e915cff030444d3" +url = "https://github.com/qltysh/qlty/releases/download/v0.644.0/qlty-aarch64-unknown-linux-gnu.tar.xz" +url_api = "https://api.github.com/repos/qltysh/qlty/releases/assets/534318668" +provenance = "github-attestations" + +[tools."github:qltysh/qlty"."platforms.linux-arm64-musl"] +checksum = "sha256:3abcb2131d4cd51f62e13c49faf41efd48c7aa2eb0957249a24dfac09bbff6f0" +url = "https://github.com/qltysh/qlty/releases/download/v0.644.0/qlty-aarch64-unknown-linux-musl.tar.xz" +url_api = "https://api.github.com/repos/qltysh/qlty/releases/assets/534318672" +provenance = "github-attestations" + +[tools."github:qltysh/qlty"."platforms.linux-x64"] +checksum = "sha256:0c080c85c7b13da93956482002e5b02eb943fdd61014ad894b5d47b19982b5c7" +url = "https://github.com/qltysh/qlty/releases/download/v0.644.0/qlty-x86_64-unknown-linux-gnu.tar.xz" +url_api = "https://api.github.com/repos/qltysh/qlty/releases/assets/534318688" +provenance = "github-attestations" + +[tools."github:qltysh/qlty"."platforms.linux-x64-musl"] +checksum = "sha256:9877dceeabc2d91ee57e94eeec818de0b665b97d288af54015e024c7a9c70353" +url = "https://github.com/qltysh/qlty/releases/download/v0.644.0/qlty-x86_64-unknown-linux-musl.tar.xz" +url_api = "https://api.github.com/repos/qltysh/qlty/releases/assets/534318693" +provenance = "github-attestations" + +[tools."github:qltysh/qlty"."platforms.macos-arm64"] +checksum = "sha256:b714064748c319bb37be721ebb561e939a4cc4b87d337024b974319a32e9e767" +url = "https://github.com/qltysh/qlty/releases/download/v0.644.0/qlty-aarch64-apple-darwin.tar.xz" +url_api = "https://api.github.com/repos/qltysh/qlty/releases/assets/534318667" +provenance = "github-attestations" + +[tools."github:qltysh/qlty"."platforms.macos-x64"] +checksum = "sha256:218ccd5d0885495344138a032e6644ef409c2a4c73711216a965d4d910aebf9e" +url = "https://github.com/qltysh/qlty/releases/download/v0.644.0/qlty-x86_64-apple-darwin.tar.xz" +url_api = "https://api.github.com/repos/qltysh/qlty/releases/assets/534318675" +provenance = "github-attestations" + +[tools."github:qltysh/qlty"."platforms.windows-x64"] +checksum = "sha256:39867a47502017a311c66ae7d8d03e60e4085cb19b31e590bfbbddf15c50ee0f" +url = "https://github.com/qltysh/qlty/releases/download/v0.644.0/qlty-x86_64-pc-windows-msvc.zip" +url_api = "https://api.github.com/repos/qltysh/qlty/releases/assets/534318681" +provenance = "github-attestations" + [[tools.jq]] version = "1.8.2" backend = "aqua:jqlang/jq" @@ -294,6 +341,9 @@ version = "1.58.0" backend = "ubi:casey/just" specifiers = ["latest"] +[tools.just."platforms.linux-x64-just"] +checksum = "blake3:e36b85d760b5980ec163a0246e5430c2de6e32ee282125be903d7dec49c610ed" + [[tools.mprocs]] version = "0.9.6" backend = "aqua:pvolok/mprocs" diff --git a/.config/mise.dev.toml b/.config/mise.dev.toml index d514e770..1aca0a4a 100644 --- a/.config/mise.dev.toml +++ b/.config/mise.dev.toml @@ -28,3 +28,4 @@ direnv = "latest" "github:chmln/sd" = "latest" "ast-grep" = "latest" "github:dmtrKovalenko/odiff" = "latest" +"github:qltysh/qlty" = "latest" From d74f27df27b24a75a03e42fed42e0de477e99f19 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 5 Oct 2026 22:11:32 +0000 Subject: [PATCH 2/2] build(qlty): exclude celery signal handlers from smells Celery's task_prerun and task_postrun receivers have to keep the framework parameter list, and built-in smells cannot be ignored per function. Skip app/celery.py entirely. Co-authored-by: Michael Bianco --- .qlty/.gitignore | 7 +++ .qlty/configs/.shellcheckrc | 1 + .qlty/qlty.toml | 112 ++++++++++++++++++++++++++++++++++++ 3 files changed, 120 insertions(+) create mode 100644 .qlty/.gitignore create mode 100644 .qlty/configs/.shellcheckrc create mode 100644 .qlty/qlty.toml diff --git a/.qlty/.gitignore b/.qlty/.gitignore new file mode 100644 index 00000000..30366188 --- /dev/null +++ b/.qlty/.gitignore @@ -0,0 +1,7 @@ +* +!configs +!configs/** +!hooks +!hooks/** +!qlty.toml +!.gitignore diff --git a/.qlty/configs/.shellcheckrc b/.qlty/configs/.shellcheckrc new file mode 100644 index 00000000..6a38d928 --- /dev/null +++ b/.qlty/configs/.shellcheckrc @@ -0,0 +1 @@ +source-path=SCRIPTDIR \ No newline at end of file diff --git a/.qlty/qlty.toml b/.qlty/qlty.toml new file mode 100644 index 00000000..a88fe1a5 --- /dev/null +++ b/.qlty/qlty.toml @@ -0,0 +1,112 @@ +# This file was automatically generated by `qlty init`. +# You can modify it to suit your needs. +# We recommend you to commit this file to your repository. +# +# This configuration is used by both Qlty CLI and Qlty Cloud. +# +# Qlty CLI -- Code quality toolkit for developers +# Qlty Cloud -- Fully automated Code Health Platform +# +# Try Qlty Cloud: https://qlty.sh +# +# For a guide to configuration, visit https://qlty.sh/d/config +# Or for a full reference, visit https://qlty.sh/d/qlty-toml +config_version = "0" + +exclude_patterns = [ + "*_min.*", + "*-min.*", + "*.min.*", + "**/.yarn/**", + "**/*.d.ts", + "**/assets/**", + "**/bower_components/**", + "**/build/**", + "**/cache/**", + "**/config/**", + "**/db/**", + "**/deps/**", + "**/dist/**", + "**/extern/**", + "**/external/**", + "**/generated/**", + "**/Godeps/**", + "**/gradlew/**", + "**/mvnw/**", + "**/node_modules/**", + "**/protos/**", + "**/seed/**", + "**/target/**", + "**/templates/**", + "**/testdata/**", + "**/vendor/**", + # Celery signal receivers have to keep the framework's parameter list. + "app/celery.py", +] + +test_patterns = [ + "**/test/**", + "**/spec/**", + "**/*.test.*", + "**/*.spec.*", + "**/*_test.*", + "**/*_spec.*", + "**/test_*.*", + "**/spec_*.*", +] + +[smells] +mode = "comment" + +[[source]] +name = "default" +default = true + + +[[plugin]] +name = "actionlint" + +[[plugin]] +name = "ast-grep" + +[[plugin]] +name = "bandit" + +[[plugin]] +name = "editorconfig-checker" +mode = "comment" + +[[plugin]] +name = "eslint" +package_file = "web/package.json" +package_filters = ["eslint", "jest", "prettier"] + +[[plugin]] +name = "gitleaks" + +[[plugin]] +name = "osv-scanner" + +[[plugin]] +name = "radarlint-iac" +mode = "monitor" + +[[plugin]] +name = "radarlint-python" +mode = "comment" + +[[plugin]] +name = "ripgrep" +mode = "comment" + +[[plugin]] +name = "ruff" + +[[plugin]] +name = "shellcheck" + +[[plugin]] +name = "trufflehog" + +[[plugin]] +name = "zizmor"