code-standards 8.130.0__tar.gz → 8.131.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {code_standards-8.130.0 → code_standards-8.131.2}/PKG-INFO +5 -5
- {code_standards-8.130.0 → code_standards-8.131.2}/pyproject.toml +5 -5
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/cli-reference.v1.json +2 -2
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/rule-calibration-campaign.v1.json +14 -6
- code_standards-8.131.2/src/sarj_standards/configs/rule-inventory.v1.json +1 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/rule-ledger.json +3 -1
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/external.py +13 -9
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/rollout.py +2 -2
- code_standards-8.131.2/src/sarj_standards/libs/repository/cli_examples.py +50 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/docs.py +22 -11
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/schemas/rule-catalog.v1.json +1 -1
- code_standards-8.130.0/src/sarj_standards/configs/rule-inventory.v1.json +0 -1
- {code_standards-8.130.0 → code_standards-8.131.2}/.gitignore +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/LICENSE +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/README.md +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/__init__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/__main__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/_meta.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/api.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/cli/__init__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/cli/main.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/Mintfile.mobile.strict +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/action-parser/LICENSE.actions +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/action-parser/LICENSE.cronstrue +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/action-parser/LICENSE.yaml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/action-parser/generate.mts +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/action-parser/index.mts +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/action-parser/package-lock.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/action-parser/package.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/action-parser/upstream.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/action-parser.cjs +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/actionlint.strict.yaml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/basedpyright.python315-watch.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/basedpyright.strict.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/checkov.strict.yml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/compile-eslint.mts +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/detekt.strict.yml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/devops-verification.v1.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/doctor.config.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/eslint-compact-formatter.mts +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/eslint-required-policy.mts +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/eslint-selected-rules.mts +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/eslint.application.mjs +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/eslint.peers.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/eslint.strict.mjs +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/eslint.strict.ts +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/hadolint.strict.yaml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/ktlint.strict.editorconfig +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/markdownlint.strict.yaml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/mobile-tools.versions.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/mobsf.strict.yml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/pyright.strict.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/ruff.application.toml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/ruff.cast.toml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/ruff.python315-watch.toml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/ruff.required.toml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/ruff.strict.toml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/rule-level-source.mts +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/schemas/SKAFFOLD-LICENSE +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/schemas/google-build-v1-schema.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/schemas/google-build-v1.LICENSE +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/schemas/skaffold-v4beta7.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/schemas/upstream-schemas.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/semgrep-overrides.txt +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/shellcheck.strict.rc +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/swiftformat.strict +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/swiftlint.strict.yml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/taplo.strict.toml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/tflint.strict.hcl +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/tflint.version.hcl +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/tool-json.mts +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/yamllint.strict.yaml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/zizmor.strict.yml +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/__init__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/__init__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/age_transition.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/configs.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/devops.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/doctor.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/exclusions.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/hooks.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/launcher.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/lifecycle.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/manifest.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/native_bootstrap.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/packagemanager.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/repository_baseline.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/retired_suppressions.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/scaffold.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/service.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/transaction.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/upgrade.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/adoption/uvtool.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/catalogs/__init__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/catalogs/slack_automations.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/corpus/__init__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/corpus/manifest.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/corpus/snapshot.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/diagnostics/__init__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/diagnostics/analysis.schema.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/diagnostics/baseline.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/diagnostics/models.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/diagnostics/serialize.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/diagnostics/source.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/filesystem.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/json_boundary.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/__init__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/_cloudbuild_autofix.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/action_metadata.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/analysis.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/autofix.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/chart_schemas.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/cloudbuild.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/cloudbuild_schema.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/complexity_baseline.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/devops_programs.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/devops_schema.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/devops_source.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/devops_tools.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/duplicate_code.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/embedded_shell.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/kubernetes_context.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/library_policy.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/mobile_tools.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/policy.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/prepared_devops.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/prepared_kubernetes.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/prepared_native.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/python_fixes.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/repo_standards.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/runner.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/scheduling.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/security_tools.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/shell_ast.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/shell_format.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/shell_policy.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/test_value.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/text_rule_base.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/text_rules/__init__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/text_rules/_registry.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/text_rules/cloudbuild_contract.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/textlint.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/toml_literals.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/unused_modules.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/__init__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/_values.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/artifacts.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/causality.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/changes.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/ci_artifacts.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/make_checks.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/metadata_verification.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/native_test_setup.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/process.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/publish.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/registry.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/release_age.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/release_detect.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/retirement.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/reviewed_analysis.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/status.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/tags.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/test_selection.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/typescript.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/verification_process.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/wheel_tests.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/__init__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/cli_reference_artifact.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/cloudbuild_schema_projection.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/comment_corpus.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/config_generation.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/hooks.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/immutable_git.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/ledger.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/repository.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/ruff_freshness.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/rule_authoring.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/rule_catalog_artifact.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/rule_changes.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/rule_checkout.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/rule_dependencies.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/rule_examples.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/rule_imports.mts +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/rule_inventory_artifact.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/rule_level_source.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/rule_lifecycle.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/rule_maintenance.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/rule_registration.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/shell_checks.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/repository/third_party_catalog_artifact.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/rules/__init__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/rules/catalog.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/rules/contracts.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/rules/corpus_runner.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/rules/evaluation.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/schema_boundary.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/setup/__init__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/setup/repository.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/typed_containers.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/yaml_boundary.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/py.typed +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/schemas/__init__.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/schemas/_paths.py +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/schemas/rule-catalog.v1.schema.json +0 -0
- {code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/schemas/slack-automations.v1.schema.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: code-standards
|
|
3
|
-
Version: 8.
|
|
3
|
+
Version: 8.131.2
|
|
4
4
|
Summary: One deterministic quality gate for Sarj Python, TypeScript, Swift, Kotlin, shell, SQL, IaC, and repository policy.
|
|
5
5
|
Project-URL: Homepage, https://code-standards.sarj.ai/
|
|
6
6
|
Project-URL: Documentation, https://code-standards.sarj.ai/cli/
|
|
@@ -30,10 +30,10 @@ Requires-Dist: pyyaml==6.0.3
|
|
|
30
30
|
Requires-Dist: referencing==0.37.0
|
|
31
31
|
Requires-Dist: repo-standards==6.12.9
|
|
32
32
|
Requires-Dist: ruff==0.17.2
|
|
33
|
-
Requires-Dist: sarj-iac-lint==0.30.
|
|
34
|
-
Requires-Dist: sarj-python-lint==1.
|
|
35
|
-
Requires-Dist: sarj-rule-contracts==0.4.
|
|
36
|
-
Requires-Dist: sarj-sql-lint==0.26.
|
|
33
|
+
Requires-Dist: sarj-iac-lint==0.30.1
|
|
34
|
+
Requires-Dist: sarj-python-lint==1.76.0
|
|
35
|
+
Requires-Dist: sarj-rule-contracts==0.4.1
|
|
36
|
+
Requires-Dist: sarj-sql-lint==0.26.1
|
|
37
37
|
Requires-Dist: shellcheck-py==0.11.0.1; (sys_platform == 'darwin' and platform_machine == 'arm64') or (sys_platform == 'darwin' and platform_machine == 'x86_64') or (sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'win32' and platform_machine == 'AMD64')
|
|
38
38
|
Requires-Dist: typer==0.27.3
|
|
39
39
|
Description-Content-Type: text/markdown
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "code-standards"
|
|
3
|
-
version = "8.
|
|
3
|
+
version = "8.131.2"
|
|
4
4
|
description = "One deterministic quality gate for Sarj Python, TypeScript, Swift, Kotlin, shell, SQL, IaC, and repository policy."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.14"
|
|
@@ -17,7 +17,7 @@ classifiers = [
|
|
|
17
17
|
"Topic :: Software Development :: Quality Assurance",
|
|
18
18
|
]
|
|
19
19
|
dependencies = [
|
|
20
|
-
"sarj-rule-contracts==0.4.
|
|
20
|
+
"sarj-rule-contracts==0.4.1",
|
|
21
21
|
"pathspec==1.1.1",
|
|
22
22
|
"basedpyright==1.40.2",
|
|
23
23
|
"deptry==0.25.1",
|
|
@@ -31,9 +31,9 @@ dependencies = [
|
|
|
31
31
|
"repo-standards==6.12.9",
|
|
32
32
|
"ruff==0.17.2",
|
|
33
33
|
"shellcheck-py==0.11.0.1; (sys_platform == 'darwin' and platform_machine == 'arm64') or (sys_platform == 'darwin' and platform_machine == 'x86_64') or (sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'win32' and platform_machine == 'AMD64')",
|
|
34
|
-
"sarj-iac-lint==0.30.
|
|
35
|
-
"sarj-python-lint==1.
|
|
36
|
-
"sarj-sql-lint==0.26.
|
|
34
|
+
"sarj-iac-lint==0.30.1",
|
|
35
|
+
"sarj-python-lint==1.76.0",
|
|
36
|
+
"sarj-sql-lint==0.26.1",
|
|
37
37
|
"typer==0.27.3",
|
|
38
38
|
]
|
|
39
39
|
|
{code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/cli-reference.v1.json
RENAMED
|
@@ -3316,6 +3316,6 @@
|
|
|
3316
3316
|
},
|
|
3317
3317
|
"program": "code-standards",
|
|
3318
3318
|
"schemaVersion": 1,
|
|
3319
|
-
"summary": "Adopt, check, fix, diagnose, and update sarj-ai standards (v8.
|
|
3320
|
-
"version": "8.
|
|
3319
|
+
"summary": "Adopt, check, fix, diagnose, and update sarj-ai standards (v8.131.2).",
|
|
3320
|
+
"version": "8.131.2"
|
|
3321
3321
|
}
|
|
@@ -805,8 +805,8 @@
|
|
|
805
805
|
"family": "python",
|
|
806
806
|
"ruleId": "prefer-fstring-over-concat",
|
|
807
807
|
"state": "complete",
|
|
808
|
-
"evidence": "Three independent reviews ran 75 focused cases and scanned 7,098 tracked first-party Python files across 85 repositories plus a normalized 462-file Pygments and pytest corpus. The original broad rule produced 39 first-party findings with 17 bad recommendations and 130 popular-source findings dominated by regex, style-table, ANSI, path, identifier, and protocol fragments. Final calibration produced seven first-party and eleven popular-source warnings; all 18 were inspected as defensible human-readable interpolation improvements, with zero observed false positives or scanner errors. Additional strict-policy campaign (2026-10-13): pass 10 of 30 is hold-warning. Annotated str may be a subclass with different __add__ and __format__ behavior; current broad detector does not prove builtin-string operands. Reproducible final calibration, judge and performance evidence is recorded in packages/python/benchmarks/error-promotion-third-30-passes.json.",
|
|
809
|
-
"outcome": "
|
|
808
|
+
"evidence": "Three independent reviews ran 75 focused cases and scanned 7,098 tracked first-party Python files across 85 repositories plus a normalized 462-file Pygments and pytest corpus. The original broad rule produced 39 first-party findings with 17 bad recommendations and 130 popular-source findings dominated by regex, style-table, ANSI, path, identifier, and protocol fragments. Final calibration produced seven first-party and eleven popular-source warnings; all 18 were inspected as defensible human-readable interpolation improvements, with zero observed false positives or scanner errors. Additional strict-policy campaign (2026-10-13): pass 10 of 30 is hold-warning. Annotated str may be a subclass with different __add__ and __format__ behavior; current broad detector does not prove builtin-string operands. Reproducible final calibration, judge and performance evidence is recorded in packages/python/benchmarks/error-promotion-third-30-passes.json. Follow-up: packages/python/benchmarks/service-contracts-and-ids-100-passes.json records 100 distinct semantic cases (39 true positives, 61 true negatives, no labeled false positives/negatives), five exact motivating blocking findings, deterministic three-trial cold/warm measurements on 296 guarded sample files, and completed local canonical gates. Private source and identifying pins remain local. Exact-head CI and broader review remain separate gates.",
|
|
809
|
+
"outcome": "Enforce supported short human-readable interpolation at ERROR, including stable named literal prefixes. This is a stricter reviewed style policy; str annotations do not prove custom operator/formatting equivalence, so required custom semantics retain exact reasoned exceptions. Source/configuration fragments, stable join aliases and other documented structural exclusions remain valid. Keep only the proven native-primitive builtin-conversion safe-fix subset; other repairs are manual."
|
|
810
810
|
},
|
|
811
811
|
{
|
|
812
812
|
"task": "rule-audit/python/prefer-immutable-module-constant",
|
|
@@ -893,8 +893,8 @@
|
|
|
893
893
|
"family": "python",
|
|
894
894
|
"ruleId": "prefer-nominal-id-types",
|
|
895
895
|
"state": "complete",
|
|
896
|
-
"evidence": "Three independent reviews ran the original 73 focused cases plus precedence coverage and scanned up to 7,120 tracked Python files plus a 443-file Pygments, packaging, and pytest corpus. The original matcher produced 373 fleet findings and reproduced false positives for unlike carriers, scalar versus collection roles, shadowed primitives, unrelated UUID and wrapper types, raw TypedDict and Pydantic wire models, decorated overrides, private boundaries, SQLAlchemy Mapped fields, and operational logging payloads. Post-change validation ran 78 focused cases and 87 with precedence; the broad fleet scan fell to 199 warning candidates, a focused three-repository scan fell from 120 to 21 manually reviewed credible domain boundaries, and the popular corpus remained at zero findings. September 2026 expansion: 58 focused cases (24 positive and 34 negative, zero unexpected matches or misses) plus 17 precedence cases cover imported carriers, declared-dependency and workspace isolation, canonical non-ID roles, shadowing, suppression, and error preservation. Pinned isolated evaluation scanned 2,624 tracked Python files (21,650,669 bytes) in two private corpora with fresh processes and at most 250 files per batch. All 41 existing errors retained their locations, severity, and messages; 100 additional warnings were inspected as credible nominal-domain opportunities, with no duplicate locations or known false positives. Calibration rejected 14 earlier cross-workspace candidates: matching distribution names do not establish a shared domain. This is local consumer evidence, not fleet-wide or public-project calibration. Final rule-only baseline/candidate passes took 5.61/18.40 seconds, with peak process memory 62.3/115.6 MiB. Alternating all-rule passes over the deterministic first 250 tracked files from each corpus took 23.325/21.907 seconds for baseline and 24.710/24.577 seconds for candidate (median ratio 1.090, below the 1.25 budget); peaks were 419.8/459.8 MiB. Shared host load remains a measurement limitation. Follow-up expert type-design fifty-pass review2026-10-16: source-proven literal/domain contract gaps and inherited, runtime-factory or compiler-policy boundaries were reviewed. packages/standards/benchmarks/expert-type-design-50-passes.json records decisions, finite calibration, exact pins, robustness closures, performance scope and validation. Conservative withdrawals of legacy policy diagnostics are not counts of demonstrated runtime defects.",
|
|
897
|
-
"outcome": "
|
|
896
|
+
"evidence": "Three independent reviews ran the original 73 focused cases plus precedence coverage and scanned up to 7,120 tracked Python files plus a 443-file Pygments, packaging, and pytest corpus. The original matcher produced 373 fleet findings and reproduced false positives for unlike carriers, scalar versus collection roles, shadowed primitives, unrelated UUID and wrapper types, raw TypedDict and Pydantic wire models, decorated overrides, private boundaries, SQLAlchemy Mapped fields, and operational logging payloads. Post-change validation ran 78 focused cases and 87 with precedence; the broad fleet scan fell to 199 warning candidates, a focused three-repository scan fell from 120 to 21 manually reviewed credible domain boundaries, and the popular corpus remained at zero findings. September 2026 expansion: 58 focused cases (24 positive and 34 negative, zero unexpected matches or misses) plus 17 precedence cases cover imported carriers, declared-dependency and workspace isolation, canonical non-ID roles, shadowing, suppression, and error preservation. Pinned isolated evaluation scanned 2,624 tracked Python files (21,650,669 bytes) in two private corpora with fresh processes and at most 250 files per batch. All 41 existing errors retained their locations, severity, and messages; 100 additional warnings were inspected as credible nominal-domain opportunities, with no duplicate locations or known false positives. Calibration rejected 14 earlier cross-workspace candidates: matching distribution names do not establish a shared domain. This is local consumer evidence, not fleet-wide or public-project calibration. Final rule-only baseline/candidate passes took 5.61/18.40 seconds, with peak process memory 62.3/115.6 MiB. Alternating all-rule passes over the deterministic first 250 tracked files from each corpus took 23.325/21.907 seconds for baseline and 24.710/24.577 seconds for candidate (median ratio 1.090, below the 1.25 budget); peaks were 419.8/459.8 MiB. Shared host load remains a measurement limitation. Follow-up expert type-design fifty-pass review2026-10-16: source-proven literal/domain contract gaps and inherited, runtime-factory or compiler-policy boundaries were reviewed. packages/standards/benchmarks/expert-type-design-50-passes.json records decisions, finite calibration, exact pins, robustness closures, performance scope and validation. Conservative withdrawals of legacy policy diagnostics are not counts of demonstrated runtime defects. Follow-up: packages/python/benchmarks/service-contracts-and-ids-100-passes.json records 100 distinct semantic cases (39 true positives, 61 true negatives, no labeled false positives/negatives), five exact motivating blocking findings, deterministic three-trial cold/warm measurements on 296 guarded sample files, and completed local canonical gates. Private source and identifying pins remain local. Exact-head CI and broader review remain separate gates.",
|
|
897
|
+
"outcome": "Enforce SARJ093 at ERROR for existing two-role coverage, previously advisory imported/established-domain coverage and raw singleton IDs with a unique matching established nominal type. Preserve exact carrier and distribution/dependency ownership proof, ambiguity/shadowing/escape guards, inherited APIs, raw schemas and operational boundaries. No autofix."
|
|
898
898
|
},
|
|
899
899
|
{
|
|
900
900
|
"task": "rule-audit/python/prefer-non-nullable-collection",
|
|
@@ -2485,8 +2485,8 @@
|
|
|
2485
2485
|
"family": "python",
|
|
2486
2486
|
"ruleId": "require-explicit-service-contract",
|
|
2487
2487
|
"state": "pending",
|
|
2488
|
-
"evidence": "Precision follow-up (2026-10-02): two independent policy/contract reviews reproduced existing Protocol, ABCMeta, abstract-declaration, value-dependency and unreachable-call misclassification. The refined rule passes 466 focused cases with SARJ071/466/467, full Python type checking, Ruff and all registered native rules on its source/tests. Generic adversarial regressions preserve services backed by stores and pools, a single operation and no substitution consumer. Private corpus evaluation is scoped separately; no fleet-wide precision claim. The pinned local-code reviewer caught a false negative where child-state assignment was mistaken for collaborator replacement; the fix preserves direct injected identity and four additional mutation regressions. The 96-case focused/combined/precedence suite passes after that correction. Follow-up 2026-10-12 additional thirty-pass campaign: Five judge rounds review strict typing and maintainability admission; bounded native WARNING tiers preserve runtime special signatures, source-visible model effects, variance/Self and frame/regex lifetime where relevant. Exact verification, corpus controls, sampling, performance and CI gate evidence is recorded in packages/python/benchmarks/error-promotion-next-30-passes.json.",
|
|
2489
|
-
"outcome": "Retain SARJ465
|
|
2488
|
+
"evidence": "Precision follow-up (2026-10-02): two independent policy/contract reviews reproduced existing Protocol, ABCMeta, abstract-declaration, value-dependency and unreachable-call misclassification. The refined rule passes 466 focused cases with SARJ071/466/467, full Python type checking, Ruff and all registered native rules on its source/tests. Generic adversarial regressions preserve services backed by stores and pools, a single operation and no substitution consumer. Private corpus evaluation is scoped separately; no fleet-wide precision claim. The pinned local-code reviewer caught a false negative where child-state assignment was mistaken for collaborator replacement; the fix preserves direct injected identity and four additional mutation regressions. The 96-case focused/combined/precedence suite passes after that correction. Follow-up 2026-10-12 additional thirty-pass campaign: Five judge rounds review strict typing and maintainability admission; bounded native WARNING tiers preserve runtime special signatures, source-visible model effects, variance/Self and frame/regex lifetime where relevant. Exact verification, corpus controls, sampling, performance and CI gate evidence is recorded in packages/python/benchmarks/error-promotion-next-30-passes.json. Follow-up: packages/python/benchmarks/service-contracts-and-ids-100-passes.json records 100 distinct semantic cases (39 true positives, 61 true negatives, no labeled false positives/negatives), five exact motivating blocking findings, deterministic three-trial cold/warm measurements on 296 guarded sample files, and completed local canonical gates. Private source and identifying pins remain local. Exact-head CI and broader review remain separate gates.",
|
|
2489
|
+
"outcome": "Retain SARJ465 at ERROR without autofix. Native retained-callback dispatch and per-call HTTP operations establish a service boundary regardless of Queue/Client suffixes. Reuse an ABC or Protocol that covers the operations. Preserve value/lifecycle exclusions, proven contract ancestry and unresolved/escaping ownership guards."
|
|
2490
2490
|
},
|
|
2491
2491
|
{
|
|
2492
2492
|
"task": "rule-audit/typescript/require-explicit-service-contract",
|
|
@@ -2853,6 +2853,14 @@
|
|
|
2853
2853
|
"state": "complete",
|
|
2854
2854
|
"evidence": "Final supported-scope evaluation scans 2,830 pinned TypeScript files across nine isolated sources, capped at 250 files per fresh process with four cold/warm scans. All 74 target warnings are exhaustively inspected: 65 JSX, three dependency and six union findings, all labeled synthetic positives; zero confirmed false positives in the inspected final set and zero new real-code findings across 2,673 real files. Sixty-four ordinary-function JSX false negatives and 128 accepted explicit-forwarding sites remain recorded separately. The run has no parser failures and deterministic complete diagnostics. Its 7,440 missing-information occurrences are not unique dependencies or files and do not constitute a clean semantic scan. Generated, suppressed, incomplete, escaping, contextual and domain cases remain separate exclusions or unsupported cases. Three earlier fresh trials on 2,829 files remain historical evidence; their candidate was not qualified after an additional optional-covering-property counterexample was confirmed. The final narrower proof preserves every inspected warning tuple and accepts the separately appended regression. Exact source, corpus pins and raw evidence remain local; public reports omit private identities, source and identifying pins. Performance, full native verification, independent review and exact-head CI remain separate merge gates. Finite inspected precision is not universal absence of false positives. Native TypeScript 6.0.3 probes establish proper Dog-to-Animal coverage and independently reproduce Extract, in-narrowing and fresh-literal changes. Native assignability alone is insufficient: a covering-only optional property rejects an existing identifier, and global Object Any can supply an implicit witness. The corrected rule requires every covering member, including optional members, in the covered declared surface. Two ordinary/implicit-Any regressions and the shared erased-eval controls pass.",
|
|
2855
2855
|
"outcome": "Ship the initial scope as WARNING without fixes or suggestions: an inline binary parameter union in the same proven private scalar-consumer boundary, complete readonly broad primitive object surfaces, proper one-way native assignability and all covering members explicitly present in the covered surface. Retain the covering type, never blindly the narrower subtype. Preserve public/type-level alternatives, producers, Any, unknown, generics, variance/callbacks, overloads, nominal/branded and incomplete contracts. General union simplification and Python imported-subtype approximation are withdrawn; error promotion needs a separate qualified change."
|
|
2856
|
+
},
|
|
2857
|
+
{
|
|
2858
|
+
"task": "rule-audit/python/prefer-grouped-settings",
|
|
2859
|
+
"family": "python",
|
|
2860
|
+
"ruleId": "prefer-grouped-settings",
|
|
2861
|
+
"state": "pending",
|
|
2862
|
+
"evidence": "Twenty-eight focused settings checks cover repeated Python field namespaces, environment-alias independence, owned and inherited fields, ClassVar and Final metadata, private fields, generated and test exclusions, imported BaseSettings ancestry, stable locations and exact suppressions. Private source, paths and identifying pins stay outside public artifacts. Follow-up: packages/python/benchmarks/service-contracts-and-ids-100-passes.json records 100 distinct semantic cases (39 true positives, 61 true negatives, no labeled false positives/negatives), five exact motivating blocking findings, deterministic three-trial cold/warm measurements on 296 guarded sample files, and completed local canonical gates. Private source and identifying pins remain local. Exact-head CI and broader review remain separate gates.",
|
|
2863
|
+
"outcome": "Stage SARJ532 at WARNING without autofix. At least two directly owned public BaseSettings fields must share a complete Python namespace token; environment aliases alone do not qualify. Forty-four matching groups in the private sample remain API/environment review advisories. Preserve existing loading, aliases, defaults and source precedence when grouping manually."
|
|
2856
2864
|
}
|
|
2857
2865
|
]
|
|
2858
2866
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"rules":[{"code":"SARJ202","family":"iac","id":"no-comment-cruft","source":"packages/iac/src/sarj_iac_lint/rules/no_comment_cruft.py","test":"packages/iac/tests/rules/test_no_comment_cruft.py"},{"code":"SARJ205","family":"iac","id":"no-dead-environment-input","source":"packages/iac/src/sarj_iac_lint/rules/no_dead_environment_input.py","test":"packages/iac/tests/rules/test_no_dead_environment_input.py"},{"code":"SARJ204","family":"iac","id":"no-environment-conditional","source":"packages/iac/src/sarj_iac_lint/rules/no_environment_conditional.py","test":"packages/iac/tests/rules/test_no_environment_conditional.py"},{"code":"SARJ211","family":"iac","id":"no-managed-service-account-key","source":"packages/iac/src/sarj_iac_lint/rules/no_managed_service_account_key.py","test":"packages/iac/tests/rules/test_no_managed_service_account_key.py"},{"code":"SARJ206","family":"iac","id":"no-mocked-terraform-test-oracle","source":"packages/iac/src/sarj_iac_lint/rules/no_mocked_terraform_test_oracle.py","test":"packages/iac/tests/rules/test_no_mocked_terraform_test_oracle.py"},{"code":"SARJ215","family":"iac","id":"no-nested-conditional","source":"packages/iac/src/sarj_iac_lint/rules/no_nested_conditional.py","test":"packages/iac/tests/rules/test_no_nested_conditional.py"},{"code":"SARJ214","family":"iac","id":"no-plaintext-secret-env","source":"packages/iac/src/sarj_iac_lint/rules/no_plaintext_secret_env.py","test":"packages/iac/tests/rules/test_no_plaintext_secret_env.py"},{"code":"SARJ212","family":"iac","id":"no-project-basic-privilege","source":"packages/iac/src/sarj_iac_lint/rules/no_project_basic_privilege.py","test":"packages/iac/tests/rules/test_no_project_basic_privilege.py"},{"code":"SARJ213","family":"iac","id":"no-project-secret-access-for-service-account","source":"packages/iac/src/sarj_iac_lint/rules/no_project_secret_access_for_service_account.py","test":"packages/iac/tests/rules/test_no_project_secret_access_for_service_account.py"},{"code":"SARJ209","family":"iac","id":"no-redundant-variable-validation","source":"packages/iac/src/sarj_iac_lint/rules/no_redundant_variable_validation.py","test":"packages/iac/tests/rules/test_no_redundant_variable_validation.py"},{"code":"SARJ207","family":"iac","id":"no-restated-comment","source":"packages/iac/src/sarj_iac_lint/rules/no_restated_comment.py","test":"packages/iac/tests/rules/test_no_restated_comment.py"},{"code":"SARJ210","family":"iac","id":"no-terraform-data-condition","source":"packages/iac/src/sarj_iac_lint/rules/no_terraform_data_condition.py","test":"packages/iac/tests/rules/test_no_terraform_data_condition.py"},{"code":"SARJ201","family":"iac","id":"require-deletion-protection","source":"packages/iac/src/sarj_iac_lint/rules/require_deletion_protection.py","test":"packages/iac/tests/rules/test_require_deletion_protection.py"},{"code":"SARJ203","family":"iac","id":"require-prevent-destroy-on-irreplaceable","source":"packages/iac/src/sarj_iac_lint/rules/require_prevent_destroy.py","test":"packages/iac/tests/rules/test_require_prevent_destroy.py"},{"code":"SARJ463","family":"python","id":"async-cleanup-registered-synchronously","source":"packages/python/src/sarj_python_lint/rules/async_cleanup_registered_synchronously.py","test":"packages/python/tests/rules/test_async_cleanup_registered_synchronously.py"},{"code":"SARJ456","family":"python","id":"async-mock-call-without-await-assertion","source":"packages/python/src/sarj_python_lint/rules/async_mock_call_without_await_assertion.py","test":"packages/python/tests/rules/test_async_mock_call_without_await_assertion.py"},{"code":"SARJ437","family":"python","id":"complex-postgres-query-requires-architecture-review","source":"packages/python/src/sarj_python_lint/rules/complex_postgres_query_requires_architecture_review.py","test":"packages/python/tests/rules/test_complex_postgres_query_requires_architecture_review.py"},{"code":"SARJ046","family":"python","id":"defect-xfail-requires-explicit-strict","source":"packages/python/src/sarj_python_lint/rules/defect_xfail_requires_explicit_strict.py","test":"packages/python/tests/rules/test_defect_xfail_requires_explicit_strict.py"},{"code":"SARJ506","family":"python","id":"delete-route-returns-no-content","source":"packages/python/src/sarj_python_lint/rules/delete_route_returns_no_content.py","test":"packages/python/tests/rules/test_delete_route_returns_no_content.py"},{"code":"SARJ086","family":"python","id":"docstring-args-restate-signature","source":"packages/python/src/sarj_python_lint/rules/docstring_args_restate_signature.py","test":"packages/python/tests/rules/test_docstring_args_restate_signature.py"},{"code":"SARJ087","family":"python","id":"docstring-returns-restate-signature","source":"packages/python/src/sarj_python_lint/rules/docstring_returns_restate_signature.py","test":"packages/python/tests/rules/test_docstring_returns_restate_signature.py"},{"code":"SARJ488","family":"python","id":"duplicate-adjacent-exception-handler","source":"packages/python/src/sarj_python_lint/rules/duplicate_adjacent_exception_handler.py","test":"packages/python/tests/rules/test_duplicate_adjacent_exception_handler.py"},{"code":"SARJ489","family":"python","id":"duplicate-closed-pure-helper","source":"packages/python/src/sarj_python_lint/rules/duplicate_closed_pure_helper.py","test":"packages/python/tests/rules/test_duplicate_closed_pure_helper.py"},{"code":"SARJ524","family":"python","id":"duplicate-pytest-fixture-params","source":"packages/python/src/sarj_python_lint/rules/duplicate_pytest_fixture_params.py","test":"packages/python/tests/rules/test_duplicate_pytest_fixture_params.py"},{"code":"SARJ434","family":"python","id":"excessive-commentary","source":"packages/python/src/sarj_python_lint/rules/excessive_commentary.py","test":"packages/python/tests/rules/test_excessive_commentary.py"},{"code":"SARJ428","family":"python","id":"fakes-in-shared-location","source":"packages/python/src/sarj_python_lint/rules/fakes_in_shared_location.py","test":"packages/python/tests/rules/test_fakes_in_shared_location.py"},{"code":"SARJ451","family":"python","id":"fastapi-class-router-contract","source":"packages/python/src/sarj_python_lint/rules/fastapi_class_router_contract.py","test":"packages/python/tests/rules/test_fastapi_class_router_contract.py"},{"code":"SARJ094","family":"python","id":"fastapi-explicit-openapi-contract","source":"packages/python/src/sarj_python_lint/rules/fastapi_explicit_openapi_contract.py","test":"packages/python/tests/rules/test_fastapi_explicit_openapi_contract.py"},{"code":"SARJ412","family":"python","id":"iac-source-coupled-test","source":"packages/python/src/sarj_python_lint/rules/iac_source_coupled_test.py","test":"packages/python/tests/rules/test_iac_source_coupled_test.py"},{"code":"SARJ400","family":"python","id":"invalid-pydantic-field-default","source":"packages/python/src/sarj_python_lint/rules/invalid_pydantic_field_default.py","test":"packages/python/tests/rules/test_invalid_pydantic_field_default.py"},{"code":"SARJ040","family":"python","id":"mock-without-spec","source":"packages/python/src/sarj_python_lint/rules/mock_without_spec.py","test":"packages/python/tests/rules/test_mock_without_spec.py"},{"code":"SARJ008","family":"python","id":"named-record-at-boundaries","source":"packages/python/src/sarj_python_lint/rules/named_record_at_boundaries.py","test":"packages/python/tests/rules/test_named_record_at_boundaries.py"},{"code":"SARJ408","family":"python","id":"negative-only-http-status-assertion","source":"packages/python/src/sarj_python_lint/rules/negative_only_http_status_assertion.py","test":"packages/python/tests/rules/test_negative_only_http_status_assertion.py"},{"code":"SARJ020","family":"python","id":"no-analytical-aggregation-in-postgres-store","source":"packages/python/src/sarj_python_lint/rules/no_analytical_aggregation_in_postgres_store.py","test":"packages/python/tests/rules/test_no_analytical_aggregation_in_postgres_store.py"},{"code":"SARJ447","family":"python","id":"no-any-mapping-types","source":"packages/python/src/sarj_python_lint/rules/no_any_mapping_types.py","test":"packages/python/tests/rules/test_no_any_mapping_types.py"},{"code":"SARJ507","family":"python","id":"no-async-function-cache","source":"packages/python/src/sarj_python_lint/rules/no_async_function_cache.py","test":"packages/python/tests/rules/test_no_async_function_cache.py"},{"code":"SARJ089","family":"python","id":"no-bare-test-phase-comments","source":"packages/python/src/sarj_python_lint/rules/phase_label_comment.py","test":"packages/python/tests/rules/test_phase_label_comment.py"},{"code":"SARJ482","family":"python","id":"no-before-validator-input-mutation","source":"packages/python/src/sarj_python_lint/rules/no_before_validator_input_mutation.py","test":"packages/python/tests/rules/test_no_before_validator_input_mutation.py"},{"code":"SARJ523","family":"python","id":"no-blanket-suppression","source":"packages/python/src/sarj_python_lint/rules/no_blanket_suppression.py","test":"packages/python/tests/rules/test_no_blanket_suppression.py"},{"code":"SARJ477","family":"python","id":"no-broad-keyword-capture","source":"packages/python/src/sarj_python_lint/rules/no_broad_keyword_capture.py","test":"packages/python/tests/rules/test_no_broad_keyword_capture.py"},{"code":"SARJ016","family":"python","id":"no-comment-cruft","source":"packages/python/src/sarj_python_lint/rules/no_comment_cruft.py","test":"packages/python/tests/rules/test_no_comment_cruft.py"},{"code":"SARJ493","family":"python","id":"no-conflicting-pydantic-alias-validation","source":"packages/python/src/sarj_python_lint/rules/no_conflicting_pydantic_alias_validation.py","test":"packages/python/tests/rules/test_no_conflicting_pydantic_alias_validation.py"},{"code":"SARJ426","family":"python","id":"no-conftest-test-module-import","source":"packages/python/src/sarj_python_lint/rules/no_conftest_test_module_import.py","test":"packages/python/tests/rules/test_no_conftest_test_module_import.py"},{"code":"SARJ513","family":"python","id":"no-contradictory-type-guard","source":"packages/python/src/sarj_python_lint/rules/no_contradictory_type_guard.py","test":"packages/python/tests/rules/test_no_contradictory_type_guard.py"},{"code":"SARJ084","family":"python","id":"no-copied-inherited-docstring","source":"packages/python/src/sarj_python_lint/rules/no_copied_inherited_docstring.py","test":"packages/python/tests/rules/test_no_copied_inherited_docstring.py"},{"code":"SARJ028","family":"python","id":"no-cors-wildcard-with-credentials","source":"packages/python/src/sarj_python_lint/rules/no_cors_wildcard_with_credentials.py","test":"packages/python/tests/rules/test_no_cors_wildcard_with_credentials.py"},{"code":"SARJ500","family":"python","id":"no-create-verb-in-post-path","source":"packages/python/src/sarj_python_lint/rules/no_create_verb_in_post_path.py","test":"packages/python/tests/rules/test_no_create_verb_in_post_path.py"},{"code":"SARJ470","family":"python","id":"no-database-programmability","source":"packages/python/src/sarj_python_lint/rules/no_database_programmability.py","test":"packages/python/tests/rules/test_no_database_programmability.py"},{"code":"SARJ497","family":"python","id":"no-defaulted-environment-setting","source":"packages/python/src/sarj_python_lint/rules/no_defaulted_environment_setting.py","test":"packages/python/tests/rules/test_no_defaulted_environment_setting.py"},{"code":"SARJ442","family":"python","id":"no-delete-statement","source":"packages/python/src/sarj_python_lint/rules/no_delete_statement.py","test":"packages/python/tests/rules/test_no_delete_statement.py"},{"code":"SARJ519","family":"python","id":"no-discarded-validation-result","source":"packages/python/src/sarj_python_lint/rules/no_discarded_validation_result.py","test":"packages/python/tests/rules/test_no_discarded_validation_result.py"},{"code":"SARJ092","family":"python","id":"no-docstring-type-restatement","source":"packages/python/src/sarj_python_lint/rules/no_typed_doc_sections.py","test":"packages/python/tests/rules/test_no_typed_doc_sections.py"},{"code":"SARJ522","family":"python","id":"no-dual-shape-model-field-reader","source":"packages/python/src/sarj_python_lint/rules/no_dual_shape_model_field_reader.py","test":"packages/python/tests/rules/test_no_dual_shape_model_field_reader.py"},{"code":"SARJ438","family":"python","id":"no-dunder-all","source":"packages/python/src/sarj_python_lint/rules/no_dunder_all.py","test":"packages/python/tests/rules/test_no_dunder_all.py"},{"code":"SARJ098","family":"python","id":"no-duplicate-dunder-all-entry","source":"packages/python/src/sarj_python_lint/rules/no_duplicate_dunder_all_entry.py","test":"packages/python/tests/rules/test_no_duplicate_dunder_all_entry.py"},{"code":"SARJ496","family":"python","id":"no-duplicate-field-validator-body","source":"packages/python/src/sarj_python_lint/rules/no_duplicate_field_validator_body.py","test":"packages/python/tests/rules/test_no_duplicate_field_validator_body.py"},{"code":"SARJ505","family":"python","id":"no-exception-text-in-500-detail","source":"packages/python/src/sarj_python_lint/rules/no_exception_text_in_500_detail.py","test":"packages/python/tests/rules/test_no_exception_text_in_500_detail.py"},{"code":"SARJ444","family":"python","id":"no-excessive-cognitive-complexity","source":"packages/python/src/sarj_python_lint/rules/no_excessive_cognitive_complexity.py","test":"packages/python/tests/rules/test_no_excessive_cognitive_complexity.py"},{"code":"SARJ427","family":"python","id":"no-fastapi-on-event","source":"packages/python/src/sarj_python_lint/rules/no_fastapi_on_event.py","test":"packages/python/tests/rules/test_no_fastapi_on_event.py"},{"code":"SARJ054","family":"python","id":"no-file-level-escape-hatch-suppression","source":"packages/python/src/sarj_python_lint/rules/no_file_level_escape_hatch_suppression.py","test":"packages/python/tests/rules/test_no_file_level_escape_hatch_suppression.py"},{"code":"SARJ048","family":"python","id":"no-first-party-private-import","source":"packages/python/src/sarj_python_lint/rules/no_first_party_private_import.py","test":"packages/python/tests/rules/test_no_first_party_private_import.py"},{"code":"SARJ455","family":"python","id":"no-fixed-sleep-before-assert","source":"packages/python/src/sarj_python_lint/rules/no_fixed_sleep_before_assert.py","test":"packages/python/tests/rules/test_no_fixed_sleep_before_assert.py"},{"code":"SARJ485","family":"python","id":"no-fixed-sleep-in-loop","source":"packages/python/src/sarj_python_lint/rules/no_fixed_sleep_in_loop.py","test":"packages/python/tests/rules/test_no_fixed_sleep_in_loop.py"},{"code":"SARJ498","family":"python","id":"no-folded-bad-request-not-found","source":"packages/python/src/sarj_python_lint/rules/no_folded_bad_request_not_found.py","test":"packages/python/tests/rules/test_no_folded_bad_request_not_found.py"},{"code":"SARJ401","family":"python","id":"no-frozen-after-validator-field-write","source":"packages/python/src/sarj_python_lint/rules/no_frozen_after_validator_field_write.py","test":"packages/python/tests/rules/test_no_frozen_after_validator_field_write.py"},{"code":"SARJ022","family":"python","id":"no-generic-single-export-module","source":"packages/python/src/sarj_python_lint/rules/no_generic_single_export_module.py","test":"packages/python/tests/rules/test_no_generic_single_export_module.py"},{"code":"SARJ499","family":"python","id":"no-hasattr","source":"packages/python/src/sarj_python_lint/rules/no_hasattr.py","test":"packages/python/tests/rules/test_no_hasattr.py"},{"code":"SARJ095","family":"python","id":"no-hidden-constructor-fallback","source":"packages/python/src/sarj_python_lint/rules/no_hidden_constructor_fallback.py","test":"packages/python/tests/rules/test_no_hidden_constructor_fallback.py"},{"code":"SARJ491","family":"python","id":"no-impossible-pydantic-field-bounds","source":"packages/python/src/sarj_python_lint/rules/no_impossible_pydantic_field_bounds.py","test":"packages/python/tests/rules/test_no_impossible_pydantic_field_bounds.py"},{"code":"SARJ471","family":"python","id":"no-injected-module-loader","source":"packages/python/src/sarj_python_lint/rules/no_injected_module_loader.py","test":"packages/python/tests/rules/test_no_injected_module_loader.py"},{"code":"SARJ481","family":"python","id":"no-input-model-mutation","source":"packages/python/src/sarj_python_lint/rules/no_input_model_mutation.py","test":"packages/python/tests/rules/test_no_input_model_mutation.py"},{"code":"SARJ484","family":"python","id":"no-interpreter-source-arguments","source":"packages/python/src/sarj_python_lint/rules/no_interpreter_source_arguments.py","test":"packages/python/tests/rules/test_no_interpreter_source_arguments.py"},{"code":"SARJ448","family":"python","id":"no-invalid-argument-name-suppression","source":"packages/python/src/sarj_python_lint/rules/no_invalid_argument_name_suppression.py","test":"packages/python/tests/rules/test_no_invalid_argument_name_suppression.py"},{"code":"SARJ511","family":"python","id":"no-invalid-pydantic-bypass","source":"packages/python/src/sarj_python_lint/rules/no_invalid_pydantic_bypass.py","test":"packages/python/tests/rules/test_no_invalid_pydantic_bypass.py"},{"code":"SARJ515","family":"python","id":"no-invalid-pydantic-validator-return","source":"packages/python/src/sarj_python_lint/rules/no_invalid_pydantic_validator_return.py","test":"packages/python/tests/rules/test_no_invalid_pydantic_validator_return.py"},{"code":"SARJ508","family":"python","id":"no-loguru-exc-info","source":"packages/python/src/sarj_python_lint/rules/no_loguru_exc_info.py","test":"packages/python/tests/rules/test_no_loguru_exc_info.py"},{"code":"SARJ509","family":"python","id":"no-loguru-printf-format","source":"packages/python/src/sarj_python_lint/rules/no_loguru_printf_format.py","test":"packages/python/tests/rules/test_no_loguru_printf_format.py"},{"code":"SARJ479","family":"python","id":"no-mocked-pydantic-value-object","source":"packages/python/src/sarj_python_lint/rules/no_mocked_pydantic_value_object.py","test":"packages/python/tests/rules/test_no_mocked_pydantic_value_object.py"},{"code":"SARJ520","family":"python","id":"no-mutating-container-transform","source":"packages/python/src/sarj_python_lint/rules/no_mutating_container_transform.py","test":"packages/python/tests/rules/test_no_mutating_container_transform.py"},{"code":"SARJ425","family":"python","id":"no-nested-pydantic-field-validator","source":"packages/python/src/sarj_python_lint/rules/no_nested_pydantic_field_validator.py","test":"packages/python/tests/rules/test_no_nested_pydantic_field_validator.py"},{"code":"SARJ469","family":"python","id":"no-nullable-dependency-fallback","source":"packages/python/src/sarj_python_lint/rules/no_nullable_dependency_fallback.py","test":"packages/python/tests/rules/test_no_nullable_dependency_fallback.py"},{"code":"SARJ025","family":"python","id":"no-offset-pagination","source":"packages/python/src/sarj_python_lint/rules/no_offset_pagination.py","test":"packages/python/tests/rules/test_no_offset_pagination.py"},{"code":"SARJ512","family":"python","id":"no-partial-type-is","source":"packages/python/src/sarj_python_lint/rules/no_partial_type_is.py","test":"packages/python/tests/rules/test_no_partial_type_is.py"},{"code":"SARJ414","family":"python","id":"no-positional-psycopg-row-escape","source":"packages/python/src/sarj_python_lint/rules/no_positional_psycopg_row_escape.py","test":"packages/python/tests/rules/test_no_positional_psycopg_row_escape.py"},{"code":"SARJ026","family":"python","id":"no-positional-tuple-record","source":"packages/python/src/sarj_python_lint/rules/prefer_namedtuple_over_tuple_return.py","test":"packages/python/tests/rules/test_prefer_namedtuple_over_tuple_return.py"},{"code":"SARJ067","family":"python","id":"no-provably-dead-mock-configuration","source":"packages/python/src/sarj_python_lint/rules/unused_mock_setup.py","test":"packages/python/tests/rules/test_unused_mock_setup.py"},{"code":"SARJ415","family":"python","id":"no-psycopg-execution-outside-injected-owner","source":"packages/python/src/sarj_python_lint/rules/no_psycopg_execution_outside_injected_owner.py","test":"packages/python/tests/rules/test_no_psycopg_execution_outside_injected_owner.py"},{"code":"SARJ053","family":"python","id":"no-random-uuid-in-sql","source":"packages/python/src/sarj_python_lint/rules/no_random_uuid_in_sql.py","test":"packages/python/tests/rules/test_no_random_uuid_in_sql.py"},{"code":"SARJ429","family":"python","id":"no-raw-connection-in-tests","source":"packages/python/src/sarj_python_lint/rules/no_raw_connection_in_tests.py","test":"packages/python/tests/rules/test_no_raw_connection_in_tests.py"},{"code":"SARJ402","family":"python","id":"no-raw-source-text-test-oracle","source":"packages/python/src/sarj_python_lint/rules/no_raw_source_text_test_oracle.py","test":"packages/python/tests/rules/test_no_raw_source_text_test_oracle.py"},{"code":"SARJ531","family":"python","id":"no-redundant-local-alias","source":"packages/python/src/sarj_python_lint/rules/no_redundant_local_alias.py","test":"packages/python/tests/rules/test_no_redundant_local_alias.py"},{"code":"SARJ440","family":"python","id":"no-redundant-module-alias-exports","source":"packages/python/src/sarj_python_lint/rules/no_redundant_module_alias_exports.py","test":"packages/python/tests/rules/test_no_redundant_module_alias_exports.py"},{"code":"SARJ024","family":"python","id":"no-repeated-structured-string-literal","source":"packages/python/src/sarj_python_lint/rules/no_repeated_string_literal.py","test":"packages/python/tests/rules/test_no_repeated_string_literal.py"},{"code":"SARJ066","family":"python","id":"no-repeated-test-body","source":"packages/python/src/sarj_python_lint/rules/no_repeated_test_body.py","test":"packages/python/tests/rules/test_no_repeated_test_body.py"},{"code":"SARJ410","family":"python","id":"no-repeated-unseeded-stdlib-random-in-test","source":"packages/python/src/sarj_python_lint/rules/uncontrolled_randomness_in_test.py","test":"packages/python/tests/rules/test_uncontrolled_randomness_in_test.py"},{"code":"SARJ423","family":"python","id":"no-restated-closed-domain-description","source":"packages/python/src/sarj_python_lint/rules/no_redundant_literal_description.py","test":"packages/python/tests/rules/test_no_redundant_literal_description.py"},{"code":"SARJ049","family":"python","id":"no-restated-comment","source":"packages/python/src/sarj_python_lint/rules/no_restated_comment.py","test":"packages/python/tests/rules/test_no_restated_comment.py"},{"code":"SARJ012","family":"python","id":"no-secret-in-log","source":"packages/python/src/sarj_python_lint/rules/no_secret_in_log.py","test":"packages/python/tests/rules/test_no_secret_in_log.py"},{"code":"SARJ021","family":"python","id":"no-select-star","source":"packages/python/src/sarj_python_lint/rules/no_select_star.py","test":"packages/python/tests/rules/test_no_select_star.py"},{"code":"SARJ441","family":"python","id":"no-service-behavior-in-settings","source":"packages/python/src/sarj_python_lint/rules/no_service_behavior_in_settings.py","test":"packages/python/tests/rules/test_no_service_behavior_in_settings.py"},{"code":"SARJ472","family":"python","id":"no-shallow-container-type-guard","source":"packages/python/src/sarj_python_lint/rules/no_shallow_container_type_guard.py","test":"packages/python/tests/rules/test_no_shallow_container_type_guard.py"},{"code":"SARJ514","family":"python","id":"no-shallow-record-type-guard","source":"packages/python/src/sarj_python_lint/rules/no_shallow_record_type_guard.py","test":"packages/python/tests/rules/test_no_shallow_record_type_guard.py"},{"code":"SARJ503","family":"python","id":"no-slash-collection-root-under-prefix","source":"packages/python/src/sarj_python_lint/rules/no_slash_collection_root_under_prefix.py","test":"packages/python/tests/rules/test_no_slash_collection_root_under_prefix.py"},{"code":"SARJ057","family":"python","id":"no-statically-truthy-assertion","source":"packages/python/src/sarj_python_lint/rules/no_tautological_expect.py","test":"packages/python/tests/rules/test_no_tautological_expect.py"},{"code":"SARJ002","family":"python","id":"no-string-concat-in-loop","source":"packages/python/src/sarj_python_lint/rules/no_string_concat_in_loop.py","test":"packages/python/tests/rules/test_no_string_concat_in_loop.py"},{"code":"SARJ458","family":"python","id":"no-swallowed-asyncio-cancellation","source":"packages/python/src/sarj_python_lint/rules/no_swallowed_asyncio_cancellation.py","test":"packages/python/tests/rules/test_no_swallowed_asyncio_cancellation.py"},{"code":"SARJ478","family":"python","id":"no-test-method-grafting","source":"packages/python/src/sarj_python_lint/rules/no_test_method_grafting.py","test":"packages/python/tests/rules/test_no_test_method_grafting.py"},{"code":"SARJ051","family":"python","id":"no-trailing-numeric-unit-assignment-comment","source":"packages/python/src/sarj_python_lint/rules/trailing_value_narration.py","test":"packages/python/tests/rules/test_trailing_value_narration.py"},{"code":"SARJ404","family":"python","id":"no-unique-violation-message-match","source":"packages/python/src/sarj_python_lint/rules/no_unique_violation_message_match.py","test":"packages/python/tests/rules/test_no_unique_violation_message_match.py"},{"code":"SARJ492","family":"python","id":"no-unknown-pydantic-validator-field","source":"packages/python/src/sarj_python_lint/rules/no_unknown_pydantic_validator_field.py","test":"packages/python/tests/rules/test_no_unknown_pydantic_validator_field.py"},{"code":"SARJ420","family":"python","id":"no-unnecessary-docstring","source":"packages/python/src/sarj_python_lint/rules/no_unnecessary_docstring.py","test":"packages/python/tests/rules/test_no_unnecessary_docstring.py"},{"code":"SARJ483","family":"python","id":"no-unused-copy-result","source":"packages/python/src/sarj_python_lint/rules/no_unused_copy_result.py","test":"packages/python/tests/rules/test_no_unused_copy_result.py"},{"code":"SARJ475","family":"python","id":"no-unused-underscored-keyword-parameter","source":"packages/python/src/sarj_python_lint/rules/no_unused_underscored_keyword_parameter.py","test":"packages/python/tests/rules/test_no_unused_underscored_keyword_parameter.py"},{"code":"SARJ452","family":"python","id":"no-unused-value-marker","source":"packages/python/src/sarj_python_lint/rules/no_unused_value_marker.py","test":"packages/python/tests/rules/test_no_unused_value_marker.py"},{"code":"SARJ419","family":"python","id":"no-vague-suppression-description","source":"packages/python/src/sarj_python_lint/rules/no_vague_suppression_description.py","test":"packages/python/tests/rules/test_no_vague_suppression_description.py"},{"code":"SARJ436","family":"python","id":"no-whole-request-response-payload-in-log","source":"packages/python/src/sarj_python_lint/rules/no_whole_request_response_payload_in_log.py","test":"packages/python/tests/rules/test_no_whole_request_response_payload_in_log.py"},{"code":"SARJ502","family":"python","id":"no-work-verb-get-route","source":"packages/python/src/sarj_python_lint/rules/no_work_verb_get_route.py","test":"packages/python/tests/rules/test_no_work_verb_get_route.py"},{"code":"SARJ042","family":"python","id":"opaque-parametrize-case-needs-id","source":"packages/python/src/sarj_python_lint/rules/opaque_parametrize_case_needs_id.py","test":"packages/python/tests/rules/test_opaque_parametrize_case_needs_id.py"},{"code":"SARJ062","family":"python","id":"over-mocked-test","source":"packages/python/src/sarj_python_lint/rules/over_mocked_test.py","test":"packages/python/tests/rules/test_over_mocked_test.py"},{"code":"SARJ474","family":"python","id":"prefer-autospec-for-callable-mock","source":"packages/python/src/sarj_python_lint/rules/prefer_autospec_for_callable_mock.py","test":"packages/python/tests/rules/test_prefer_autospec_for_callable_mock.py"},{"code":"SARJ516","family":"python","id":"prefer-bulk-upsert","source":"packages/python/src/sarj_python_lint/rules/prefer_bulk_upsert.py","test":"packages/python/tests/rules/test_prefer_bulk_upsert.py"},{"code":"SARJ013","family":"python","id":"prefer-class-row","source":"packages/python/src/sarj_python_lint/rules/prefer_class_row.py","test":"packages/python/tests/rules/test_prefer_class_row.py"},{"code":"SARJ430","family":"python","id":"prefer-collection-comprehension","source":"packages/python/src/sarj_python_lint/rules/prefer_collection_comprehension.py","test":"packages/python/tests/rules/test_prefer_collection_comprehension.py"},{"code":"SARJ011","family":"python","id":"prefer-constant-time-secret-compare","source":"packages/python/src/sarj_python_lint/rules/prefer_constant_time_secret_compare.py","test":"packages/python/tests/rules/test_prefer_constant_time_secret_compare.py"},{"code":"SARJ494","family":"python","id":"prefer-declarative-batch-validation","source":"packages/python/src/sarj_python_lint/rules/prefer_declarative_batch_validation.py","test":"packages/python/tests/rules/test_prefer_declarative_batch_validation.py"},{"code":"SARJ529","family":"python","id":"prefer-direct-import-module","source":"packages/python/src/sarj_python_lint/rules/prefer_direct_import_module.py","test":"packages/python/tests/rules/test_prefer_direct_import_module.py"},{"code":"SARJ510","family":"python","id":"prefer-discriminated-model-union","source":"packages/python/src/sarj_python_lint/rules/prefer_discriminated_model_union.py","test":"packages/python/tests/rules/test_prefer_discriminated_model_union.py"},{"code":"SARJ068","family":"python","id":"prefer-fstring-over-concat","source":"packages/python/src/sarj_python_lint/rules/prefer_fstring_over_concat.py","test":"packages/python/tests/rules/test_prefer_fstring_over_concat.py"},{"code":"SARJ532","family":"python","id":"prefer-grouped-settings","source":"packages/python/src/sarj_python_lint/rules/prefer_grouped_settings.py","test":"packages/python/tests/rules/test_prefer_grouped_settings.py"},{"code":"SARJ096","family":"python","id":"prefer-immutable-module-constant","source":"packages/python/src/sarj_python_lint/rules/prefer_immutable_module_constant.py","test":"packages/python/tests/rules/test_prefer_immutable_module_constant.py"},{"code":"SARJ445","family":"python","id":"prefer-injected-dependency-over-monkeypatch","source":"packages/python/src/sarj_python_lint/rules/prefer_injected_dependency_over_monkeypatch.py","test":"packages/python/tests/rules/test_prefer_injected_dependency_over_monkeypatch.py"},{"code":"SARJ059","family":"python","id":"prefer-library-fake","source":"packages/python/src/sarj_python_lint/rules/prefer_library_fake.py","test":"packages/python/tests/rules/test_prefer_library_fake.py"},{"code":"SARJ032","family":"python","id":"prefer-match-assert-never","source":"packages/python/src/sarj_python_lint/rules/prefer_match_assert_never.py","test":"packages/python/tests/rules/test_prefer_match_assert_never.py"},{"code":"SARJ453","family":"python","id":"prefer-match-exception-dispatch","source":"packages/python/src/sarj_python_lint/rules/prefer_match_exception_dispatch.py","test":"packages/python/tests/rules/test_prefer_match_exception_dispatch.py"},{"code":"SARJ080","family":"python","id":"prefer-match-type-dispatch","source":"packages/python/src/sarj_python_lint/rules/prefer_match_type_dispatch.py","test":"packages/python/tests/rules/test_prefer_match_type_dispatch.py"},{"code":"SARJ439","family":"python","id":"prefer-match-value-dispatch","source":"packages/python/src/sarj_python_lint/rules/prefer_match_value_dispatch.py","test":"packages/python/tests/rules/test_prefer_match_value_dispatch.py"},{"code":"SARJ039","family":"python","id":"prefer-module-level-constant","source":"packages/python/src/sarj_python_lint/rules/prefer_module_level_constant.py","test":"packages/python/tests/rules/test_prefer_module_level_constant.py"},{"code":"SARJ446","family":"python","id":"prefer-monkeypatch-for-process-state-in-test","source":"packages/python/src/sarj_python_lint/rules/prefer_monkeypatch_for_process_state_in_test.py","test":"packages/python/tests/rules/test_prefer_monkeypatch_for_process_state_in_test.py"},{"code":"SARJ461","family":"python","id":"prefer-monotonic-for-elapsed-time","source":"packages/python/src/sarj_python_lint/rules/prefer_monotonic_for_elapsed_time.py","test":"packages/python/tests/rules/test_prefer_monotonic_for_elapsed_time.py"},{"code":"SARJ480","family":"python","id":"prefer-native-string-check","source":"packages/python/src/sarj_python_lint/rules/prefer_native_string_check.py","test":"packages/python/tests/rules/test_prefer_native_string_check.py"},{"code":"SARJ093","family":"python","id":"prefer-nominal-id-types","source":"packages/python/src/sarj_python_lint/rules/prefer_nominal_id_types.py","test":"packages/python/tests/rules/test_prefer_nominal_id_types.py"},{"code":"SARJ082","family":"python","id":"prefer-non-nullable-collection","source":"packages/python/src/sarj_python_lint/rules/prefer_non_nullable_collection.py","test":"packages/python/tests/rules/test_prefer_non_nullable_collection.py"},{"code":"SARJ070","family":"python","id":"prefer-or-pattern","source":"packages/python/src/sarj_python_lint/rules/prefer_or_pattern.py","test":"packages/python/tests/rules/test_prefer_or_pattern.py"},{"code":"SARJ528","family":"python","id":"prefer-precise-object-contract","source":"packages/python/src/sarj_python_lint/rules/prefer_precise_object_contract.py","test":"packages/python/tests/rules/test_prefer_precise_object_contract.py"},{"code":"SARJ518","family":"python","id":"prefer-psycopg-executemany","source":"packages/python/src/sarj_python_lint/rules/prefer_psycopg_executemany.py","test":"packages/python/tests/rules/test_prefer_psycopg_executemany.py"},{"code":"SARJ454","family":"python","id":"prefer-pydantic-json-value","source":"packages/python/src/sarj_python_lint/rules/prefer_pydantic_json_value.py","test":"packages/python/tests/rules/test_prefer_pydantic_json_value.py"},{"code":"SARJ527","family":"python","id":"prefer-pydantic-model-assertion","source":"packages/python/src/sarj_python_lint/rules/prefer_pydantic_model_assertion.py","test":"packages/python/tests/rules/test_prefer_pydantic_model_assertion.py"},{"code":"SARJ526","family":"python","id":"prefer-pytest-dependency-fixtures","source":"packages/python/src/sarj_python_lint/rules/prefer_pytest_dependency_fixtures.py","test":"packages/python/tests/rules/test_prefer_pytest_dependency_fixtures.py"},{"code":"SARJ476","family":"python","id":"prefer-pytest-fixture-injection","source":"packages/python/src/sarj_python_lint/rules/prefer_pytest_fixture_injection.py","test":"packages/python/tests/rules/test_prefer_pytest_fixture_injection.py"},{"code":"SARJ460","family":"python","id":"prefer-regex-fullmatch","source":"packages/python/src/sarj_python_lint/rules/prefer_regex_fullmatch.py","test":"packages/python/tests/rules/test_prefer_regex_fullmatch.py"},{"code":"SARJ468","family":"python","id":"prefer-required-constructor-parameters","source":"packages/python/src/sarj_python_lint/rules/prefer_required_constructor_parameters.py","test":"packages/python/tests/rules/test_prefer_required_constructor_parameters.py"},{"code":"SARJ097","family":"python","id":"prefer-self-documenting-constant","source":"packages/python/src/sarj_python_lint/rules/prefer_self_documenting_constant.py","test":"packages/python/tests/rules/test_prefer_self_documenting_constant.py"},{"code":"SARJ078","family":"python","id":"prefer-self-type-annotation","source":"packages/python/src/sarj_python_lint/rules/prefer_self_type_annotation.py","test":"packages/python/tests/rules/test_prefer_self_type_annotation.py"},{"code":"SARJ431","family":"python","id":"prefer-set-isdisjoint","source":"packages/python/src/sarj_python_lint/rules/prefer_set_isdisjoint.py","test":"packages/python/tests/rules/test_prefer_set_isdisjoint.py"},{"code":"SARJ006","family":"python","id":"prefer-str-enum","source":"packages/python/src/sarj_python_lint/rules/prefer_str_enum.py","test":"packages/python/tests/rules/test_prefer_str_enum.py"},{"code":"SARJ015","family":"python","id":"prefer-struct-over-namedtuple","source":"packages/python/src/sarj_python_lint/rules/prefer_struct_over_namedtuple.py","test":"packages/python/tests/rules/test_prefer_struct_over_namedtuple.py"},{"code":"SARJ530","family":"python","id":"prefer-typed-settings-field","source":"packages/python/src/sarj_python_lint/rules/prefer_typed_settings_field.py","test":"packages/python/tests/rules/test_prefer_typed_settings_field.py"},{"code":"SARJ432","family":"python","id":"prefer-walrus-awaited-none-guard","source":"packages/python/src/sarj_python_lint/rules/prefer_walrus_awaited_none_guard.py","test":"packages/python/tests/rules/test_prefer_walrus_awaited_none_guard.py"},{"code":"SARJ076","family":"python","id":"prefer-walrus-comprehension-filter","source":"packages/python/src/sarj_python_lint/rules/prefer_walrus_comprehension_filter.py","test":"packages/python/tests/rules/test_prefer_walrus_comprehension_filter.py"},{"code":"SARJ081","family":"python","id":"prefer-walrus-regex-match","source":"packages/python/src/sarj_python_lint/rules/prefer_walrus_regex_match.py","test":"packages/python/tests/rules/test_prefer_walrus_regex_match.py"},{"code":"SARJ077","family":"python","id":"prefer-walrus-stream-loop","source":"packages/python/src/sarj_python_lint/rules/prefer_walrus_stream_loop.py","test":"packages/python/tests/rules/test_prefer_walrus_stream_loop.py"},{"code":"SARJ409","family":"python","id":"production-derived-test-cases","source":"packages/python/src/sarj_python_lint/rules/production_derived_test_cases.py","test":"packages/python/tests/rules/test_production_derived_test_cases.py"},{"code":"SARJ044","family":"python","id":"pytest-fixture-returns-bare-tuple","source":"packages/python/src/sarj_python_lint/rules/pytest_fixture_returns_bare_tuple.py","test":"packages/python/tests/rules/test_pytest_fixture_returns_bare_tuple.py"},{"code":"SARJ525","family":"python","id":"pytest-fixture-returns-closed-resource","source":"packages/python/src/sarj_python_lint/rules/pytest_fixture_returns_closed_resource.py","test":"packages/python/tests/rules/test_pytest_fixture_returns_closed_resource.py"},{"code":"SARJ085","family":"python","id":"redundant-class-docstring","source":"packages/python/src/sarj_python_lint/rules/redundant_class_docstring.py","test":"packages/python/tests/rules/test_redundant_class_docstring.py"},{"code":"SARJ050","family":"python","id":"redundant-docstring","source":"packages/python/src/sarj_python_lint/rules/redundant_docstring.py","test":"packages/python/tests/rules/test_redundant_docstring.py"},{"code":"SARJ099","family":"python","id":"redundant-module-docstring","source":"packages/python/src/sarj_python_lint/rules/redundant_module_docstring.py","test":"packages/python/tests/rules/test_redundant_module_docstring.py"},{"code":"SARJ487","family":"python","id":"redundant-test-constructor-forwarder","source":"packages/python/src/sarj_python_lint/rules/redundant_test_constructor_forwarder.py","test":"packages/python/tests/rules/test_redundant_test_constructor_forwarder.py"},{"code":"SARJ045","family":"python","id":"repeated-kwarg-heavy-call-in-test","source":"packages/python/src/sarj_python_lint/rules/repeated_kwarg_heavy_call_in_test.py","test":"packages/python/tests/rules/test_repeated_kwarg_heavy_call_in_test.py"},{"code":"SARJ413","family":"python","id":"repeated-static-call-cases","source":"packages/python/src/sarj_python_lint/rules/repeated_static_call_cases.py","test":"packages/python/tests/rules/test_repeated_static_call_cases.py"},{"code":"SARJ457","family":"python","id":"repeated-test-composition","source":"packages/python/src/sarj_python_lint/rules/repeated_test_composition.py","test":"packages/python/tests/rules/test_repeated_test_composition.py"},{"code":"SARJ490","family":"python","id":"repeated-unimplemented-test-contract","source":"packages/python/src/sarj_python_lint/rules/repeated_unimplemented_test_contract.py","test":"packages/python/tests/rules/test_repeated_unimplemented_test_contract.py"},{"code":"SARJ018","family":"python","id":"replay-contract-insert-requires-duplicate-policy","source":"packages/python/src/sarj_python_lint/rules/store_insert_requires_on_conflict.py","test":"packages/python/tests/rules/test_store_insert_requires_on_conflict.py"},{"code":"SARJ504","family":"python","id":"require-exp-on-jwt-decode","source":"packages/python/src/sarj_python_lint/rules/require_exp_on_jwt_decode.py","test":"packages/python/tests/rules/test_require_exp_on_jwt_decode.py"},{"code":"SARJ467","family":"python","id":"require-explicit-contract-implementation","source":"packages/python/src/sarj_python_lint/rules/require_explicit_contract_implementation.py","test":"packages/python/tests/rules/test_require_explicit_contract_implementation.py"},{"code":"SARJ462","family":"python","id":"require-explicit-psycopg-transaction","source":"packages/python/src/sarj_python_lint/rules/require_explicit_psycopg_transaction.py","test":"packages/python/tests/rules/test_require_explicit_psycopg_transaction.py"},{"code":"SARJ465","family":"python","id":"require-explicit-service-contract","source":"packages/python/src/sarj_python_lint/rules/require_explicit_service_contract.py","test":"packages/python/tests/rules/test_require_explicit_service_contract.py"},{"code":"SARJ486","family":"python","id":"require-injectable-retry-sleep","source":"packages/python/src/sarj_python_lint/rules/require_injectable_retry_sleep.py","test":"packages/python/tests/rules/test_require_injectable_retry_sleep.py"},{"code":"SARJ034","family":"python","id":"require-keyword-only-swap-prone-params","source":"packages/python/src/sarj_python_lint/rules/require_keyword_only_swap_prone_params.py","test":"packages/python/tests/rules/test_require_keyword_only_swap_prone_params.py"},{"code":"SARJ424","family":"python","id":"require-nodecode-for-splitting-settings-field","source":"packages/python/src/sarj_python_lint/rules/require_nodecode_for_splitting_settings_field.py","test":"packages/python/tests/rules/test_require_nodecode_for_splitting_settings_field.py"},{"code":"SARJ071","family":"python","id":"require-port-for-service","source":"packages/python/src/sarj_python_lint/rules/require_port_for_service.py","test":"packages/python/tests/rules/test_require_port_for_service.py"},{"code":"SARJ473","family":"python","id":"require-precise-factory-signature","source":"packages/python/src/sarj_python_lint/rules/require_precise_factory_signature.py","test":"packages/python/tests/rules/test_require_precise_factory_signature.py"},{"code":"SARJ466","family":"python","id":"require-public-dependency-contract","source":"packages/python/src/sarj_python_lint/rules/require_public_dependency_contract.py","test":"packages/python/tests/rules/test_require_public_dependency_contract.py"},{"code":"SARJ411","family":"python","id":"require-pydantic-for-external-json","source":"packages/python/src/sarj_python_lint/rules/require_pydantic_for_external_json.py","test":"packages/python/tests/rules/test_require_pydantic_for_external_json.py"},{"code":"SARJ521","family":"python","id":"require-pydantic-for-mapping-shape","source":"packages/python/src/sarj_python_lint/rules/require_pydantic_for_mapping_shape.py","test":"packages/python/tests/rules/test_require_pydantic_for_mapping_shape.py"},{"code":"SARJ450","family":"python","id":"require-pydantic-for-structured-payload","source":"packages/python/src/sarj_python_lint/rules/require_pydantic_for_structured_payload.py","test":"packages/python/tests/rules/test_require_pydantic_for_structured_payload.py"},{"code":"SARJ418","family":"python","id":"require-pydantic-ordinal-lower-bound","source":"packages/python/src/sarj_python_lint/rules/require_pydantic_ordinal_lower_bound.py","test":"packages/python/tests/rules/test_require_pydantic_ordinal_lower_bound.py"},{"code":"SARJ088","family":"python","id":"restated-test-docstring","source":"packages/python/src/sarj_python_lint/rules/restated_test_docstring.py","test":"packages/python/tests/rules/test_restated_test_docstring.py"},{"code":"SARJ459","family":"python","id":"shared-mutable-pydantic-factory","source":"packages/python/src/sarj_python_lint/rules/shared_mutable_pydantic_factory.py","test":"packages/python/tests/rules/test_shared_mutable_pydantic_factory.py"},{"code":"SARJ023","family":"python","id":"stepdown","source":"packages/python/src/sarj_python_lint/rules/stepdown.py","test":"packages/python/tests/rules/test_stepdown.py"},{"code":"SARJ517","family":"python","id":"store-field-update-reuses-upsert","source":"packages/python/src/sarj_python_lint/rules/store_field_update_reuses_upsert.py","test":"packages/python/tests/rules/test_store_field_update_reuses_upsert.py"},{"code":"SARJ421","family":"python","id":"store-get-delegates-to-bulk-read","source":"packages/python/src/sarj_python_lint/rules/store_get_delegates_to_bulk_read.py","test":"packages/python/tests/rules/test_store_get_delegates_to_bulk_read.py"},{"code":"SARJ464","family":"python","id":"subprocess-kill-without-reap","source":"packages/python/src/sarj_python_lint/rules/subprocess_kill_without_reap.py","test":"packages/python/tests/rules/test_subprocess_kill_without_reap.py"},{"code":"SARJ495","family":"python","id":"test-without-explicit-oracle","source":"packages/python/src/sarj_python_lint/rules/test_without_explicit_oracle.py","test":"packages/python/tests/rules/test_test_without_explicit_oracle.py"},{"code":"SARJ407","family":"python","id":"timestamp-order-requires-tiebreaker","source":"packages/python/src/sarj_python_lint/rules/timestamp_order_requires_tiebreaker.py","test":"packages/python/tests/rules/test_timestamp_order_requires_tiebreaker.py"},{"code":"SARJ435","family":"python","id":"typed-error-reasons","source":"packages/python/src/sarj_python_lint/rules/typed_error_reasons.py","test":"packages/python/tests/rules/test_typed_error_reasons.py"},{"code":"SARJ443","family":"python","id":"unused-test-factory-option","source":"packages/python/src/sarj_python_lint/rules/unused_test_factory_option.py","test":"packages/python/tests/rules/test_unused_test_factory_option.py"},{"code":"SARJ101","family":"sql","id":"enforce-timestamptz","source":"packages/sql/src/sarj_sql_lint/rules/enforce_timestamptz.py","test":"packages/sql/tests/rules/test_enforce_timestamptz.py"},{"code":"SARJ116","family":"sql","id":"excess-migration-index-requires-justification","source":"packages/sql/src/sarj_sql_lint/rules/index_budget.py","test":"packages/sql/tests/rules/test_index_budget.py"},{"code":"SARJ111","family":"sql","id":"existing-table-check-or-foreign-key-requires-not-valid","source":"packages/sql/src/sarj_sql_lint/rules/add_constraint_requires_not_valid.py","test":"packages/sql/tests/rules/test_add_constraint_requires_not_valid.py"},{"code":"SARJ102","family":"sql","id":"idempotent-ddl","source":"packages/sql/src/sarj_sql_lint/rules/idempotent_ddl.py","test":"packages/sql/tests/rules/test_idempotent_ddl.py"},{"code":"SARJ108","family":"sql","id":"index-concurrently","source":"packages/sql/src/sarj_sql_lint/rules/index_concurrently.py","test":"packages/sql/tests/rules/test_index_concurrently.py"},{"code":"SARJ105","family":"sql","id":"insert-requires-replay-policy","source":"packages/sql/src/sarj_sql_lint/rules/insert_requires_on_conflict.py","test":"packages/sql/tests/rules/test_insert_requires_on_conflict.py"},{"code":"SARJ119","family":"sql","id":"mixed-migration-phases","source":"packages/sql/src/sarj_sql_lint/rules/mixed_migration_phases.py","test":"packages/sql/tests/rules/test_mixed_migration_phases.py"},{"code":"SARJ118","family":"sql","id":"no-application-schema-check","source":"packages/sql/src/sarj_sql_lint/rules/no_application_schema_check.py","test":"packages/sql/tests/rules/test_no_application_schema_check.py"},{"code":"SARJ120","family":"sql","id":"no-database-functions","source":"packages/sql/src/sarj_sql_lint/rules/no_database_functions.py","test":"packages/sql/tests/rules/test_no_database_functions.py"},{"code":"SARJ114","family":"sql","id":"no-database-triggers","source":"packages/sql/src/sarj_sql_lint/rules/no_create_trigger.py","test":"packages/sql/tests/rules/test_no_create_trigger.py"},{"code":"SARJ117","family":"sql","id":"no-duplicate-index","source":"packages/sql/src/sarj_sql_lint/rules/no_duplicate_index.py","test":"packages/sql/tests/rules/test_no_duplicate_index.py"},{"code":"SARJ115","family":"sql","id":"no-long-migration-narration","source":"packages/sql/src/sarj_sql_lint/rules/excessive_commentary.py","test":"packages/sql/tests/rules/test_excessive_commentary.py"},{"code":"SARJ113","family":"sql","id":"no-migration-comment-cruft","source":"packages/sql/src/sarj_sql_lint/rules/no_comment_cruft.py","test":"packages/sql/tests/rules/test_no_comment_cruft.py"},{"code":"SARJ107","family":"sql","id":"no-offset-pagination","source":"packages/sql/src/sarj_sql_lint/rules/no_offset_pagination.py","test":"packages/sql/tests/rules/test_no_offset_pagination.py"},{"code":"SARJ103","family":"sql","id":"no-pg-enum","source":"packages/sql/src/sarj_sql_lint/rules/no_pg_enum.py","test":"packages/sql/tests/rules/test_no_pg_enum.py"},{"code":"SARJ106","family":"sql","id":"prefer-jsonb","source":"packages/sql/src/sarj_sql_lint/rules/prefer_jsonb.py","test":"packages/sql/tests/rules/test_prefer_jsonb.py"},{"code":"SARJ104","family":"sql","id":"prefer-text-over-varchar","source":"packages/sql/src/sarj_sql_lint/rules/prefer_text_over_varchar.py","test":"packages/sql/tests/rules/test_prefer_text_over_varchar.py"},{"code":"SARJ109","family":"sql","id":"prefer-uuidv7-default","source":"packages/sql/src/sarj_sql_lint/rules/prefer_uuidv7_default.py","test":"packages/sql/tests/rules/test_prefer_uuidv7_default.py"},{"code":"SARJ112","family":"sql","id":"require-fk-index","source":"packages/sql/src/sarj_sql_lint/rules/require_fk_index.py","test":"packages/sql/tests/rules/test_require_fk_index.py"},{"code":"SARJ110","family":"sql","id":"require-lock-timeout","source":"packages/sql/src/sarj_sql_lint/rules/require_lock_timeout.py","test":"packages/sql/tests/rules/test_require_lock_timeout.py"},{"code":"SARJ315","family":"text","id":"cloudbuild-contract","source":"packages/standards/src/sarj_standards/libs/linting/text_rules/cloudbuild_contract.py","test":"packages/standards/tests/text_rules/test_cloudbuild_contract.py"},{"code":"SARJ301","family":"text","id":"commented-out-config","source":"packages/standards/src/sarj_standards/libs/linting/textlint.py","test":"packages/standards/tests/test_textlint.py"},{"code":"SARJ300","family":"text","id":"config-comment-wall","source":"packages/standards/src/sarj_standards/libs/linting/textlint.py","test":"packages/standards/tests/test_textlint.py"},{"code":"SARJ309","family":"text","id":"declarative-deployment-boundary","source":"packages/standards/src/sarj_standards/libs/linting/textlint.py","test":"packages/standards/tests/test_textlint.py"},{"code":"SARJ302","family":"text","id":"ephemeral-execution-artifact","source":"packages/standards/src/sarj_standards/libs/linting/textlint.py","test":"packages/standards/tests/test_textlint.py"},{"code":"SARJ306","family":"text","id":"exact-config-comment-restatement","source":"packages/standards/src/sarj_standards/libs/linting/textlint.py","test":"packages/standards/tests/test_textlint.py"},{"code":"SARJ305","family":"text","id":"hidden-markdown-heading","source":"packages/standards/src/sarj_standards/libs/linting/textlint.py","test":"packages/standards/tests/test_textlint.py"},{"code":"SARJ304","family":"text","id":"iac-source-coupled-test","source":"packages/standards/src/sarj_standards/libs/linting/textlint.py","test":"packages/standards/tests/test_textlint.py"},{"code":"SARJ311","family":"text","id":"large-shell-program","source":"packages/standards/src/sarj_standards/libs/linting/textlint.py","test":"packages/standards/tests/test_textlint.py"},{"code":"SARJ307","family":"text","id":"no-unsafe-command-argument-interpolation","source":"packages/standards/src/sarj_standards/libs/linting/textlint.py","test":"packages/standards/tests/test_textlint.py"},{"code":"SARJ308","family":"text","id":"no-wildcard-secret-read-permission","source":"packages/standards/src/sarj_standards/libs/linting/textlint.py","test":"packages/standards/tests/test_textlint.py"},{"code":"SARJ310","family":"text","id":"workflow-embedded-program","source":"packages/standards/src/sarj_standards/libs/linting/textlint.py","test":"packages/standards/tests/test_textlint.py"},{"code":"@sarj/duplicate-test-body","family":"typescript","id":"duplicate-test-body","source":"packages/typescript/src/rules/duplicate-test-body.ts","test":"packages/typescript/tests/rules/duplicate-test-body.test.ts"},{"code":"@sarj/enforce-file-structure","family":"typescript","id":"enforce-file-structure","source":"packages/typescript/src/rules/enforce-file-structure.ts","test":"packages/typescript/tests/rules/enforce-file-structure.test.ts"},{"code":"@sarj/excessive-commentary","family":"typescript","id":"excessive-commentary","source":"packages/typescript/src/rules/excessive-commentary.ts","test":"packages/typescript/tests/rules/excessive-commentary.test.ts"},{"code":"@sarj/iac-source-coupled-test","family":"typescript","id":"iac-source-coupled-test","source":"packages/typescript/src/rules/iac-source-coupled-test.ts","test":"packages/typescript/tests/rules/iac-source-coupled-test.test.ts"},{"code":"@sarj/interface-contract-members-private","family":"typescript","id":"interface-contract-members-private","source":"packages/typescript/src/rules/interface-contract-members-private.ts","test":"packages/typescript/tests/rules/interface-contract-members-private.test.ts"},{"code":"@sarj/named-child-schema-type","family":"typescript","id":"named-child-schema-type","source":"packages/typescript/src/rules/named-child-schema-type.ts","test":"packages/typescript/tests/rules/named-child-schema-type.test.ts"},{"code":"@sarj/no-bare-return-from-test-catch","family":"typescript","id":"no-bare-return-from-test-catch","source":"packages/typescript/src/rules/no-bare-return-from-test-catch.ts","test":"packages/typescript/tests/rules/no-bare-return-from-test-catch.test.ts"},{"code":"@sarj/no-bespoke-api-case-conversion","family":"typescript","id":"no-bespoke-api-case-conversion","source":"packages/typescript/src/rules/no-bespoke-api-case-conversion.ts","test":"packages/typescript/tests/rules/no-bespoke-api-case-conversion.test.ts"},{"code":"@sarj/no-boolean-selector-parameter","family":"typescript","id":"no-boolean-selector-parameter","source":"packages/typescript/src/rules/no-boolean-selector-parameter.ts","test":"packages/typescript/tests/rules/no-boolean-selector-parameter.test.ts"},{"code":"@sarj/no-broad-return-type","family":"typescript","id":"no-broad-return-type","source":"packages/typescript/src/rules/no-broad-return-type.ts","test":"packages/typescript/tests/rules/no-broad-return-type.test.ts"},{"code":"@sarj/no-client-side-data-fetching","family":"typescript","id":"no-client-side-data-fetching","source":"packages/typescript/src/rules/no-client-side-data-fetching.ts","test":"packages/typescript/tests/rules/no-client-side-data-fetching.test.ts"},{"code":"@sarj/no-comment-cruft","family":"typescript","id":"no-comment-cruft","source":"packages/typescript/src/rules/no-comment-cruft.ts","test":"packages/typescript/tests/rules/no-comment-cruft.test.ts"},{"code":"@sarj/no-conditional-empty-object-spread","family":"typescript","id":"no-conditional-empty-object-spread","source":"packages/typescript/src/rules/no-conditional-empty-object-spread.ts","test":"packages/typescript/tests/rules/no-conditional-empty-object-spread.test.ts"},{"code":"@sarj/no-contradictory-overload-return","family":"typescript","id":"no-contradictory-overload-return","source":"packages/typescript/src/rules/no-contradictory-overload-return.ts","test":"packages/typescript/tests/rules/no-contradictory-overload-return.test.ts"},{"code":"@sarj/no-contradictory-type-predicate","family":"typescript","id":"no-contradictory-type-predicate","source":"packages/typescript/src/rules/no-contradictory-type-predicate.ts","test":"packages/typescript/tests/rules/no-contradictory-type-predicate.test.ts"},{"code":"@sarj/no-cors-wildcard-with-credentials","family":"typescript","id":"no-cors-wildcard-with-credentials","source":"packages/typescript/src/rules/no-cors-wildcard-with-credentials.ts","test":"packages/typescript/tests/rules/no-cors-wildcard-with-credentials.test.ts"},{"code":"@sarj/no-credential-in-browser-storage","family":"typescript","id":"no-credential-in-browser-storage","source":"packages/typescript/src/rules/no-credential-in-browser-storage.ts","test":"packages/typescript/tests/rules/no-credential-in-browser-storage.test.ts"},{"code":"@sarj/no-dangerously-allow-svg","family":"typescript","id":"no-dangerously-allow-svg","source":"packages/typescript/src/rules/no-dangerously-allow-svg.ts","test":"packages/typescript/tests/rules/no-dangerously-allow-svg.test.ts"},{"code":"@sarj/no-declaration-comment-wall","family":"typescript","id":"no-declaration-comment-wall","source":"packages/typescript/src/rules/no-declaration-comment-wall.ts","test":"packages/typescript/tests/rules/no-declaration-comment-wall.test.ts"},{"code":"@sarj/no-detached-global-fetch","family":"typescript","id":"no-detached-global-fetch","source":"packages/typescript/src/rules/no-detached-global-fetch.ts","test":"packages/typescript/tests/rules/no-detached-global-fetch.test.ts"},{"code":"@sarj/no-duplicate-lifecycle-refresh-listeners","family":"typescript","id":"no-duplicate-lifecycle-refresh-listeners","source":"packages/typescript/src/rules/no-duplicate-lifecycle-refresh-listeners.ts","test":"packages/typescript/tests/rules/no-duplicate-lifecycle-refresh-listeners.test.ts"},{"code":"@sarj/no-duplicate-test-case","family":"typescript","id":"no-duplicate-test-case","source":"packages/typescript/src/rules/no-duplicate-test-case.ts","test":"packages/typescript/tests/rules/no-duplicate-test-case.test.ts"},{"code":"@sarj/no-dynamic-sql","family":"typescript","id":"no-dynamic-sql","source":"packages/typescript/src/rules/no-dynamic-sql.ts","test":"packages/typescript/tests/rules/no-dynamic-sql.test.ts"},{"code":"@sarj/no-enum","family":"typescript","id":"no-enum","source":"packages/typescript/src/rules/no-enum.ts","test":"packages/typescript/tests/rules/no-enum.test.ts"},{"code":"@sarj/no-exception-text-in-5xx-response","family":"typescript","id":"no-exception-text-in-5xx-response","source":"packages/typescript/src/rules/no-exception-text-in-5xx-response.ts","test":"packages/typescript/tests/rules/no-exception-text-in-5xx-response.test.ts"},{"code":"@sarj/no-excess-jsx-props","family":"typescript","id":"no-excess-jsx-props","source":"packages/typescript/src/rules/no-excess-jsx-props.ts","test":"packages/typescript/tests/rules/no-excess-jsx-props.test.ts"},{"code":"@sarj/no-excessive-cognitive-complexity","family":"typescript","id":"no-excessive-cognitive-complexity","source":"packages/typescript/src/rules/no-excessive-cognitive-complexity.ts","test":"packages/typescript/tests/rules/no-excessive-cognitive-complexity.test.ts"},{"code":"@sarj/no-fat-try-blocks","family":"typescript","id":"no-fat-try-blocks","source":"packages/typescript/src/rules/no-fat-try-blocks.ts","test":"packages/typescript/tests/rules/no-fat-try-blocks.test.ts"},{"code":"@sarj/no-first-party-module-mock","family":"typescript","id":"no-first-party-module-mock","source":"packages/typescript/src/rules/no-first-party-module-mock.ts","test":"packages/typescript/tests/rules/no-first-party-module-mock.test.ts"},{"code":"@sarj/no-generic-single-export-module","family":"typescript","id":"no-generic-single-export-module","source":"packages/typescript/src/rules/no-generic-single-export-module.ts","test":"packages/typescript/tests/rules/no-generic-single-export-module.test.ts"},{"code":"@sarj/no-hand-rolled-sleep","family":"typescript","id":"no-hand-rolled-sleep","source":"packages/typescript/src/rules/no-hand-rolled-sleep.ts","test":"packages/typescript/tests/rules/no-hand-rolled-sleep.test.ts"},{"code":"@sarj/no-hand-rolled-spinner","family":"typescript","id":"no-hand-rolled-spinner","source":"packages/typescript/src/rules/no-hand-rolled-spinner.ts","test":"packages/typescript/tests/rules/no-hand-rolled-spinner.test.ts"},{"code":"@sarj/no-impossible-zod-literal-bounds","family":"typescript","id":"no-impossible-zod-literal-bounds","source":"packages/typescript/src/rules/no-impossible-zod-literal-bounds.ts","test":"packages/typescript/tests/rules/no-impossible-zod-literal-bounds.test.ts"},{"code":"@sarj/no-in-operator-on-built-in-collections","family":"typescript","id":"no-in-operator-on-built-in-collections","source":"packages/typescript/src/rules/no-in-operator-on-built-in-collections.ts","test":"packages/typescript/tests/rules/no-in-operator-on-built-in-collections.test.ts"},{"code":"@sarj/no-insecure-random-id","family":"typescript","id":"no-insecure-random-id","source":"packages/typescript/src/rules/no-insecure-random-id.ts","test":"packages/typescript/tests/rules/no-insecure-random-id.test.ts"},{"code":"@sarj/no-invalid-typed-mutation","family":"typescript","id":"no-invalid-typed-mutation","source":"packages/typescript/src/rules/no-invalid-typed-mutation.ts","test":"packages/typescript/tests/rules/no-invalid-typed-mutation.test.ts"},{"code":"@sarj/no-invalid-zod-custom-parse","family":"typescript","id":"no-invalid-zod-custom-parse","source":"packages/typescript/src/rules/no-invalid-zod-custom-parse.ts","test":"packages/typescript/tests/rules/no-invalid-zod-custom-parse.test.ts"},{"code":"@sarj/no-json-stringify-error","family":"typescript","id":"no-json-stringify-error","source":"packages/typescript/src/rules/no-json-stringify-error.ts","test":"packages/typescript/tests/rules/no-json-stringify-error.test.ts"},{"code":"@sarj/no-json-stringify-object-equality","family":"typescript","id":"no-json-stringify-object-equality","source":"packages/typescript/src/rules/no-json-stringify-object-equality.ts","test":"packages/typescript/tests/rules/no-json-stringify-object-equality.test.ts"},{"code":"@sarj/no-known-value-widening","family":"typescript","id":"no-known-value-widening","source":"packages/typescript/src/rules/no-known-value-widening.ts","test":"packages/typescript/tests/rules/no-known-value-widening.test.ts"},{"code":"@sarj/no-log-only-catch","family":"typescript","id":"no-log-only-catch","source":"packages/typescript/src/rules/no-log-only-catch.ts","test":"packages/typescript/tests/rules/no-log-only-catch.test.ts"},{"code":"@sarj/no-long-comment","family":"typescript","id":"no-long-comment","source":"packages/typescript/src/rules/no-long-comment.ts","test":"packages/typescript/tests/rules/no-long-comment.test.ts"},{"code":"@sarj/no-numeric-search-param-coercion","family":"typescript","id":"no-numeric-search-param-coercion","source":"packages/typescript/src/rules/no-numeric-search-param-coercion.ts","test":"packages/typescript/tests/rules/no-numeric-search-param-coercion.test.ts"},{"code":"@sarj/no-offset-pagination","family":"typescript","id":"no-offset-pagination","source":"packages/typescript/src/rules/no-offset-pagination.ts","test":"packages/typescript/tests/rules/no-offset-pagination.test.ts"},{"code":"@sarj/no-partial-type-predicate","family":"typescript","id":"no-partial-type-predicate","source":"packages/typescript/src/rules/no-partial-type-predicate.ts","test":"packages/typescript/tests/rules/no-partial-type-predicate.test.ts"},{"code":"@sarj/no-positional-tuple-return","family":"typescript","id":"no-positional-tuple-return","source":"packages/typescript/src/rules/no-positional-tuple-return.ts","test":"packages/typescript/tests/rules/no-positional-tuple-return.test.ts"},{"code":"@sarj/no-production-browser-source-maps","family":"typescript","id":"no-production-browser-source-maps","source":"packages/typescript/src/rules/no-production-browser-source-maps.ts","test":"packages/typescript/tests/rules/no-production-browser-source-maps.test.ts"},{"code":"@sarj/no-raw-env","family":"typescript","id":"no-raw-env","source":"packages/typescript/src/rules/no-raw-env.ts","test":"packages/typescript/tests/rules/no-raw-env.test.ts"},{"code":"@sarj/no-raw-fetch-outside-clients","family":"typescript","id":"no-raw-fetch-outside-clients","source":"packages/typescript/src/rules/no-raw-fetch-outside-clients.ts","test":"packages/typescript/tests/rules/no-raw-fetch-outside-clients.test.ts"},{"code":"@sarj/no-reduce-accumulator-copy","family":"typescript","id":"no-reduce-accumulator-copy","source":"packages/typescript/src/rules/no-reduce-accumulator-copy.ts","test":"packages/typescript/tests/rules/no-reduce-accumulator-copy.test.ts"},{"code":"@sarj/no-redundant-consumer-union","family":"typescript","id":"no-redundant-consumer-union","source":"packages/typescript/src/rules/no-redundant-consumer-union.ts","test":"packages/typescript/tests/rules/no-redundant-consumer-union.test.ts"},{"code":"@sarj/no-redundant-optional-array-default","family":"typescript","id":"no-redundant-optional-array-default","source":"packages/typescript/src/rules/no-redundant-optional-array-default.ts","test":"packages/typescript/tests/rules/no-redundant-optional-array-default.test.ts"},{"code":"@sarj/no-repeated-string-literal","family":"typescript","id":"no-repeated-string-literal","source":"packages/typescript/src/rules/no-repeated-string-literal.ts","test":"packages/typescript/tests/rules/no-repeated-string-literal.test.ts"},{"code":"@sarj/no-restated-comment","family":"typescript","id":"no-restated-comment","source":"packages/typescript/src/rules/no-restated-comment.ts","test":"packages/typescript/tests/rules/no-restated-comment.test.ts"},{"code":"@sarj/no-restated-jsdoc","family":"typescript","id":"no-restated-jsdoc","source":"packages/typescript/src/rules/no-restated-jsdoc.ts","test":"packages/typescript/tests/rules/no-restated-jsdoc.test.ts"},{"code":"@sarj/no-restricted-library-load","family":"typescript","id":"no-restricted-library-load","source":"packages/typescript/src/rules/no-restricted-library-load.ts","test":"packages/typescript/tests/rules/no-restricted-library-load.test.ts"},{"code":"@sarj/no-router-refresh-polling","family":"typescript","id":"no-router-refresh-polling","source":"packages/typescript/src/rules/no-router-refresh-polling.ts","test":"packages/typescript/tests/rules/no-router-refresh-polling.test.ts"},{"code":"@sarj/no-secret-in-log","family":"typescript","id":"no-secret-in-log","source":"packages/typescript/src/rules/no-secret-in-log.ts","test":"packages/typescript/tests/rules/no-secret-in-log.test.ts"},{"code":"@sarj/no-select-star","family":"typescript","id":"no-select-star","source":"packages/typescript/src/rules/no-select-star.ts","test":"packages/typescript/tests/rules/no-select-star.test.ts"},{"code":"@sarj/no-sentinel-return-on-catch","family":"typescript","id":"no-sentinel-return-on-catch","source":"packages/typescript/src/rules/no-sentinel-return-on-catch.ts","test":"packages/typescript/tests/rules/no-sentinel-return-on-catch.test.ts"},{"code":"@sarj/no-server-env-in-client-component","family":"typescript","id":"no-server-env-in-client-component","source":"packages/typescript/src/rules/no-server-env-in-client-component.ts","test":"packages/typescript/tests/rules/no-server-env-in-client-component.test.ts"},{"code":"@sarj/no-silent-promise-catch","family":"typescript","id":"no-silent-promise-catch","source":"packages/typescript/src/rules/no-silent-promise-catch.ts","test":"packages/typescript/tests/rules/no-silent-promise-catch.test.ts"},{"code":"@sarj/no-sleep-in-test-body","family":"typescript","id":"no-sleep-in-test-body","source":"packages/typescript/src/rules/no-sleep-in-test-body.ts","test":"packages/typescript/tests/rules/no-sleep-in-test-body.test.ts"},{"code":"@sarj/no-storage-in-stateless-modules","family":"typescript","id":"no-storage-in-stateless-modules","source":"packages/typescript/src/rules/no-storage-in-stateless-modules.ts","test":"packages/typescript/tests/rules/no-storage-in-stateless-modules.test.ts"},{"code":"@sarj/no-string-concat-in-loop","family":"typescript","id":"no-string-concat-in-loop","source":"packages/typescript/src/rules/no-string-concat-in-loop.ts","test":"packages/typescript/tests/rules/no-string-concat-in-loop.test.ts"},{"code":"@sarj/no-tautological-expect","family":"typescript","id":"no-tautological-expect","source":"packages/typescript/src/rules/no-tautological-expect.ts","test":"packages/typescript/tests/rules/no-tautological-expect.test.ts"},{"code":"@sarj/no-trailing-value-narration","family":"typescript","id":"no-trailing-value-narration","source":"packages/typescript/src/rules/no-trailing-value-narration.ts","test":"packages/typescript/tests/rules/no-trailing-value-narration.test.ts"},{"code":"@sarj/no-type-member-comment-wall","family":"typescript","id":"no-type-member-comment-wall","source":"packages/typescript/src/rules/no-type-member-comment-wall.ts","test":"packages/typescript/tests/rules/no-type-member-comment-wall.test.ts"},{"code":"@sarj/no-typed-doc-sections","family":"typescript","id":"no-typed-doc-sections","source":"packages/typescript/src/rules/no-typed-doc-sections.ts","test":"packages/typescript/tests/rules/no-typed-doc-sections.test.ts"},{"code":"@sarj/no-union-in-comment","family":"typescript","id":"no-union-in-comment","source":"packages/typescript/src/rules/no-union-in-comment.ts","test":"packages/typescript/tests/rules/no-union-in-comment.test.ts"},{"code":"@sarj/no-unlocalized-jsx-attributes","family":"typescript","id":"no-unlocalized-jsx-attributes","source":"packages/typescript/src/rules/no-unlocalized-jsx-attributes.ts","test":"packages/typescript/tests/rules/no-unlocalized-jsx-attributes.test.ts"},{"code":"@sarj/no-unlocalized-jsx-text","family":"typescript","id":"no-unlocalized-jsx-text","source":"packages/typescript/src/rules/no-unlocalized-jsx-text.ts","test":"packages/typescript/tests/rules/no-unlocalized-jsx-text.test.ts"},{"code":"@sarj/no-unlocalized-toast","family":"typescript","id":"no-unlocalized-toast","source":"packages/typescript/src/rules/no-unlocalized-toast.ts","test":"packages/typescript/tests/rules/no-unlocalized-toast.test.ts"},{"code":"@sarj/no-unnecessary-use-client","family":"typescript","id":"no-unnecessary-use-client","source":"packages/typescript/src/rules/no-unnecessary-use-client.ts","test":"packages/typescript/tests/rules/no-unnecessary-use-client.test.ts"},{"code":"@sarj/no-unsafe-mock-casting","family":"typescript","id":"no-unsafe-mock-casting","source":"packages/typescript/src/rules/no-unsafe-mock-casting.ts","test":"packages/typescript/tests/rules/no-unsafe-mock-casting.test.ts"},{"code":"@sarj/no-unsafe-test-double-cast","family":"typescript","id":"no-unsafe-test-double-cast","source":"packages/typescript/src/rules/no-unsafe-test-double-cast.ts","test":"packages/typescript/tests/rules/no-unsafe-test-double-cast.test.ts"},{"code":"@sarj/no-vague-suppression-description","family":"typescript","id":"no-vague-suppression-description","source":"packages/typescript/src/rules/no-vague-suppression-description.ts","test":"packages/typescript/tests/rules/no-vague-suppression-description.test.ts"},{"code":"@sarj/no-zod-native-enum","family":"typescript","id":"no-zod-native-enum","source":"packages/typescript/src/rules/no-zod-native-enum.ts","test":"packages/typescript/tests/rules/no-zod-native-enum.test.ts"},{"code":"@sarj/prefer-await-in-async-return","family":"typescript","id":"prefer-await-in-async-return","source":"packages/typescript/src/rules/prefer-await-in-async-return.ts","test":"packages/typescript/tests/rules/prefer-await-in-async-return.test.ts"},{"code":"@sarj/prefer-constant-time-secret-compare","family":"typescript","id":"prefer-constant-time-secret-compare","source":"packages/typescript/src/rules/prefer-constant-time-secret-compare.ts","test":"packages/typescript/tests/rules/prefer-constant-time-secret-compare.test.ts"},{"code":"@sarj/prefer-discriminated-union","family":"typescript","id":"prefer-discriminated-union","source":"packages/typescript/src/rules/prefer-discriminated-union.ts","test":"packages/typescript/tests/rules/prefer-discriminated-union.test.ts"},{"code":"@sarj/prefer-ecmascript-private-members","family":"typescript","id":"prefer-ecmascript-private-members","source":"packages/typescript/src/rules/prefer-ecmascript-private-members.ts","test":"packages/typescript/tests/rules/prefer-ecmascript-private-members.test.ts"},{"code":"@sarj/prefer-immutable-module-constant","family":"typescript","id":"prefer-immutable-module-constant","source":"packages/typescript/src/rules/prefer-immutable-module-constant.ts","test":"packages/typescript/tests/rules/prefer-immutable-module-constant.test.ts"},{"code":"@sarj/prefer-input-group-search","family":"typescript","id":"prefer-input-group-search","source":"packages/typescript/src/rules/prefer-input-group-search.ts","test":"packages/typescript/tests/rules/prefer-input-group-search.test.ts"},{"code":"@sarj/prefer-logical-tailwind-utilities","family":"typescript","id":"prefer-logical-tailwind-utilities","source":"packages/typescript/src/rules/prefer-logical-tailwind-utilities.ts","test":"packages/typescript/tests/rules/prefer-logical-tailwind-utilities.test.ts"},{"code":"@sarj/prefer-millisecond-control-duration-schema","family":"typescript","id":"prefer-millisecond-control-duration-schema","source":"packages/typescript/src/rules/prefer-millisecond-control-duration-schema.ts","test":"packages/typescript/tests/rules/prefer-millisecond-control-duration-schema.test.ts"},{"code":"@sarj/prefer-minimal-parameter-contract","family":"typescript","id":"prefer-minimal-parameter-contract","source":"packages/typescript/src/rules/prefer-minimal-parameter-contract.ts","test":"packages/typescript/tests/rules/prefer-minimal-parameter-contract.test.ts"},{"code":"@sarj/prefer-module-level-constant","family":"typescript","id":"prefer-module-level-constant","source":"packages/typescript/src/rules/prefer-module-level-constant.ts","test":"packages/typescript/tests/rules/prefer-module-level-constant.test.ts"},{"code":"@sarj/prefer-module-level-refined-schema","family":"typescript","id":"prefer-module-level-refined-schema","source":"packages/typescript/src/rules/prefer-module-level-refined-schema.ts","test":"packages/typescript/tests/rules/prefer-module-level-refined-schema.test.ts"},{"code":"@sarj/prefer-module-level-schema","family":"typescript","id":"prefer-module-level-schema","source":"packages/typescript/src/rules/prefer-module-level-schema.ts","test":"packages/typescript/tests/rules/prefer-module-level-schema.test.ts"},{"code":"@sarj/prefer-multi-value-zod-literal","family":"typescript","id":"prefer-multi-value-zod-literal","source":"packages/typescript/src/rules/prefer-multi-value-zod-literal.ts","test":"packages/typescript/tests/rules/prefer-multi-value-zod-literal.test.ts"},{"code":"@sarj/prefer-named-callback-domain","family":"typescript","id":"prefer-named-callback-domain","source":"packages/typescript/src/rules/prefer-named-callback-domain.ts","test":"packages/typescript/tests/rules/prefer-named-callback-domain.test.ts"},{"code":"@sarj/prefer-named-complex-return-type","family":"typescript","id":"prefer-named-complex-return-type","source":"packages/typescript/src/rules/prefer-named-complex-return-type.ts","test":"packages/typescript/tests/rules/prefer-named-complex-return-type.test.ts"},{"code":"@sarj/prefer-native-fetch-in-server-actions","family":"typescript","id":"prefer-native-fetch-in-server-actions","source":"packages/typescript/src/rules/prefer-native-fetch-in-server-actions.ts","test":"packages/typescript/tests/rules/prefer-native-fetch-in-server-actions.test.ts"},{"code":"@sarj/prefer-native-random-uuid","family":"typescript","id":"prefer-native-random-uuid","source":"packages/typescript/src/rules/prefer-native-random-uuid.ts","test":"packages/typescript/tests/rules/prefer-native-random-uuid.test.ts"},{"code":"@sarj/prefer-node-crypto-hash","family":"typescript","id":"prefer-node-crypto-hash","source":"packages/typescript/src/rules/prefer-node-crypto-hash.ts","test":"packages/typescript/tests/rules/prefer-node-crypto-hash.test.ts"},{"code":"@sarj/prefer-node-fs-promises","family":"typescript","id":"prefer-node-fs-promises","source":"packages/typescript/src/rules/prefer-node-fs-promises.ts","test":"packages/typescript/tests/rules/prefer-node-fs-promises.test.ts"},{"code":"@sarj/prefer-nominal-id-types","family":"typescript","id":"prefer-nominal-id-types","source":"packages/typescript/src/rules/prefer-nominal-id-types.ts","test":"packages/typescript/tests/rules/prefer-nominal-id-types.test.ts"},{"code":"@sarj/prefer-non-nullable-collection","family":"typescript","id":"prefer-non-nullable-collection","source":"packages/typescript/src/rules/prefer-non-nullable-collection.ts","test":"packages/typescript/tests/rules/prefer-non-nullable-collection.test.ts"},{"code":"@sarj/prefer-nullish-filter-predicate","family":"typescript","id":"prefer-nullish-filter-predicate","source":"packages/typescript/src/rules/prefer-nullish-filter-predicate.ts","test":"packages/typescript/tests/rules/prefer-nullish-filter-predicate.test.ts"},{"code":"@sarj/prefer-schema-for-api-payload","family":"typescript","id":"prefer-schema-for-api-payload","source":"packages/typescript/src/rules/prefer-schema-for-api-payload.ts","test":"packages/typescript/tests/rules/prefer-schema-for-api-payload.test.ts"},{"code":"@sarj/prefer-semantic-colors","family":"typescript","id":"prefer-semantic-colors","source":"packages/typescript/src/rules/prefer-semantic-colors.ts","test":"packages/typescript/tests/rules/prefer-semantic-colors.test.ts"},{"code":"@sarj/prefer-server-actions","family":"typescript","id":"prefer-server-actions","source":"packages/typescript/src/rules/prefer-server-actions.ts","test":"packages/typescript/tests/rules/prefer-server-actions.test.ts"},{"code":"@sarj/prefer-shadcn-primitives","family":"typescript","id":"prefer-shadcn-primitives","source":"packages/typescript/src/rules/prefer-shadcn-primitives.ts","test":"packages/typescript/tests/rules/prefer-shadcn-primitives.test.ts"},{"code":"@sarj/prefer-shared-zod-enum","family":"typescript","id":"prefer-shared-zod-enum","source":"packages/typescript/src/rules/prefer-shared-zod-enum.ts","test":"packages/typescript/tests/rules/prefer-shared-zod-enum.test.ts"},{"code":"@sarj/prefer-switch-for-repeated-equality","family":"typescript","id":"prefer-switch-for-repeated-equality","source":"packages/typescript/src/rules/prefer-switch-for-repeated-equality.ts","test":"packages/typescript/tests/rules/prefer-switch-for-repeated-equality.test.ts"},{"code":"@sarj/prefer-typed-reflection","family":"typescript","id":"prefer-typed-reflection","source":"packages/typescript/src/rules/prefer-typed-reflection.ts","test":"packages/typescript/tests/rules/prefer-typed-reflection.test.ts"},{"code":"@sarj/prefer-whole-object-assertion","family":"typescript","id":"prefer-whole-object-assertion","source":"packages/typescript/src/rules/prefer-whole-object-assertion.ts","test":"packages/typescript/tests/rules/prefer-whole-object-assertion.test.ts"},{"code":"@sarj/prefer-zod-infer","family":"typescript","id":"prefer-zod-infer","source":"packages/typescript/src/rules/prefer-zod-infer.ts","test":"packages/typescript/tests/rules/prefer-zod-infer.test.ts"},{"code":"@sarj/prefer-zod-parse-output-type","family":"typescript","id":"prefer-zod-parse-output-type","source":"packages/typescript/src/rules/prefer-zod-parse-output-type.ts","test":"packages/typescript/tests/rules/prefer-zod-parse-output-type.test.ts"},{"code":"@sarj/repeated-static-call-cases","family":"typescript","id":"repeated-static-call-cases","source":"packages/typescript/src/rules/repeated-static-call-cases.ts","test":"packages/typescript/tests/rules/repeated-static-call-cases.test.ts"},{"code":"@sarj/require-assert-never","family":"typescript","id":"require-assert-never","source":"packages/typescript/src/rules/require-assert-never.ts","test":"packages/typescript/tests/rules/require-assert-never.test.ts"},{"code":"@sarj/require-button-accessible-name","family":"typescript","id":"require-button-accessible-name","source":"packages/typescript/src/rules/require-button-accessible-name.ts","test":"packages/typescript/tests/rules/require-button-accessible-name.test.ts"},{"code":"@sarj/require-camelcase-properties","family":"typescript","id":"require-camelcase-properties","source":"packages/typescript/src/rules/require-camelcase-properties.ts","test":"packages/typescript/tests/rules/require-camelcase-properties.test.ts"},{"code":"@sarj/require-explicit-contract-implementation","family":"typescript","id":"require-explicit-contract-implementation","source":"packages/typescript/src/rules/require-explicit-contract-implementation.ts","test":"packages/typescript/tests/rules/require-explicit-contract-implementation.test.ts"},{"code":"@sarj/require-explicit-service-contract","family":"typescript","id":"require-explicit-service-contract","source":"packages/typescript/src/rules/require-explicit-service-contract.ts","test":"packages/typescript/tests/rules/require-explicit-service-contract.test.ts"},{"code":"@sarj/require-fetch-timeout","family":"typescript","id":"require-fetch-timeout","source":"packages/typescript/src/rules/require-fetch-timeout.ts","test":"packages/typescript/tests/rules/require-fetch-timeout.test.ts"},{"code":"@sarj/require-interface-for-exported-class","family":"typescript","id":"require-interface-for-exported-class","source":"packages/typescript/src/rules/require-interface-for-exported-class.ts","test":"packages/typescript/tests/rules/require-interface-for-exported-class.test.ts"},{"code":"@sarj/require-pascal-case-zod-schema-name","family":"typescript","id":"require-pascal-case-zod-schema-name","source":"packages/typescript/src/rules/require-pascal-case-zod-schema-name.ts","test":"packages/typescript/tests/rules/require-pascal-case-zod-schema-name.test.ts"},{"code":"@sarj/require-port-for-service","family":"typescript","id":"require-port-for-service","source":"packages/typescript/src/rules/require-port-for-service.ts","test":"packages/typescript/tests/rules/require-port-for-service.test.ts"},{"code":"@sarj/require-sql-access-class","family":"typescript","id":"require-sql-access-class","source":"packages/typescript/src/rules/require-sql-access-class.ts","test":"packages/typescript/tests/rules/require-sql-access-class.test.ts"},{"code":"@sarj/require-static-next-matcher","family":"typescript","id":"require-static-next-matcher","source":"packages/typescript/src/rules/require-static-next-matcher.ts","test":"packages/typescript/tests/rules/require-static-next-matcher.test.ts"},{"code":"@sarj/require-svg-accessible-name","family":"typescript","id":"require-svg-accessible-name","source":"packages/typescript/src/rules/require-svg-accessible-name.ts","test":"packages/typescript/tests/rules/require-svg-accessible-name.test.ts"},{"code":"@sarj/require-use-form-default-values","family":"typescript","id":"require-use-form-default-values","source":"packages/typescript/src/rules/require-use-form-default-values.ts","test":"packages/typescript/tests/rules/require-use-form-default-values.test.ts"},{"code":"@sarj/require-use-server-in-actions-file","family":"typescript","id":"require-use-server-in-actions-file","source":"packages/typescript/src/rules/require-use-server-in-actions-file.ts","test":"packages/typescript/tests/rules/require-use-server-in-actions-file.test.ts"},{"code":"@sarj/require-zod-form-validation","family":"typescript","id":"require-zod-form-validation","source":"packages/typescript/src/rules/require-zod-form-validation.ts","test":"packages/typescript/tests/rules/require-zod-form-validation.test.ts"},{"code":"@sarj/sole-export-matches-filename","family":"typescript","id":"sole-export-matches-filename","source":"packages/typescript/src/rules/sole-export-matches-filename.ts","test":"packages/typescript/tests/rules/sole-export-matches-filename.test.ts"},{"code":"@sarj/source-coupled-test","family":"typescript","id":"source-coupled-test","source":"packages/typescript/src/rules/source-coupled-test.ts","test":"packages/typescript/tests/rules/source-coupled-test.test.ts"},{"code":"@sarj/stepdown","family":"typescript","id":"stepdown","source":"packages/typescript/src/rules/stepdown.ts","test":"packages/typescript/tests/rules/stepdown.test.ts"},{"code":"@sarj/store-insert-requires-on-conflict","family":"typescript","id":"store-insert-requires-on-conflict","source":"packages/typescript/src/rules/store-insert-requires-on-conflict.ts","test":"packages/typescript/tests/rules/store-insert-requires-on-conflict.test.ts"},{"code":"@sarj/test-loops-over-literal-cases","family":"typescript","id":"test-loops-over-literal-cases","source":"packages/typescript/src/rules/test-loops-over-literal-cases.ts","test":"packages/typescript/tests/rules/test-loops-over-literal-cases.test.ts"},{"code":"@sarj/test-phase-label-comment","family":"typescript","id":"test-phase-label-comment","source":"packages/typescript/src/rules/test-phase-label-comment.ts","test":"packages/typescript/tests/rules/test-phase-label-comment.test.ts"}],"schemaVersion":1}
|
{code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/configs/rule-ledger.json
RENAMED
|
@@ -138,6 +138,7 @@
|
|
|
138
138
|
"prefer-direct-import-module",
|
|
139
139
|
"prefer-discriminated-model-union",
|
|
140
140
|
"prefer-fstring-over-concat",
|
|
141
|
+
"prefer-grouped-settings",
|
|
141
142
|
"prefer-immutable-module-constant",
|
|
142
143
|
"prefer-injected-dependency-over-monkeypatch",
|
|
143
144
|
"prefer-library-fake",
|
|
@@ -577,7 +578,8 @@
|
|
|
577
578
|
"SARJ528",
|
|
578
579
|
"SARJ529",
|
|
579
580
|
"SARJ530",
|
|
580
|
-
"SARJ531"
|
|
581
|
+
"SARJ531",
|
|
582
|
+
"SARJ532"
|
|
581
583
|
],
|
|
582
584
|
"sql": [
|
|
583
585
|
"SARJ101",
|
{code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/linting/external.py
RENAMED
|
@@ -560,7 +560,7 @@ def analyze_external(
|
|
|
560
560
|
runner=execute_eslint,
|
|
561
561
|
parser=parse_eslint,
|
|
562
562
|
validator=partial(_validate_eslint_coverage, selected_files=_eslint_selected_files(command)),
|
|
563
|
-
invocation_id=invocation_id,
|
|
563
|
+
invocation_id=InvocationId(invocation_id),
|
|
564
564
|
file_count=_argv_file_count(command.argv),
|
|
565
565
|
)
|
|
566
566
|
)
|
|
@@ -682,7 +682,7 @@ def _security_reports(
|
|
|
682
682
|
runner=partial(_security_runner, runner, name="zizmor"),
|
|
683
683
|
parser=security_tools.parse_zizmor,
|
|
684
684
|
version=security_tools.VERSIONS["zizmor"],
|
|
685
|
-
invocation_id=f"batch-{start // _ESLINT_BATCH_SIZE + 1}",
|
|
685
|
+
invocation_id=InvocationId(f"batch-{start // _ESLINT_BATCH_SIZE + 1}"),
|
|
686
686
|
file_count=len(batch),
|
|
687
687
|
)
|
|
688
688
|
)
|
|
@@ -729,7 +729,7 @@ def _checkov_reports(
|
|
|
729
729
|
runner=partial(_security_runner, runner, name="checkov"),
|
|
730
730
|
parser=security_tools.parse_checkov,
|
|
731
731
|
version=security_tools.VERSIONS["checkov"],
|
|
732
|
-
invocation_id=f"{framework}:batch-{start // _ESLINT_BATCH_SIZE + 1}",
|
|
732
|
+
invocation_id=InvocationId(f"{framework}:batch-{start // _ESLINT_BATCH_SIZE + 1}"),
|
|
733
733
|
file_count=len(batch),
|
|
734
734
|
)
|
|
735
735
|
)
|
|
@@ -1370,7 +1370,7 @@ def _invoke_react_doctor(
|
|
|
1370
1370
|
root=root,
|
|
1371
1371
|
runner=execution_runner,
|
|
1372
1372
|
parser=parser,
|
|
1373
|
-
invocation_id=project.relative_to(root).as_posix() or None,
|
|
1373
|
+
invocation_id=InvocationId(project.relative_to(root).as_posix()) or None,
|
|
1374
1374
|
file_count=file_count,
|
|
1375
1375
|
)
|
|
1376
1376
|
|
|
@@ -1891,7 +1891,7 @@ def _invoke_python_projects(
|
|
|
1891
1891
|
reports: list[ToolReport] = []
|
|
1892
1892
|
for project, scoped_files in projects:
|
|
1893
1893
|
argv = _basedpyright_argv(project, scoped_files, project_mode=project_mode)
|
|
1894
|
-
project_id = project.relative_to(root).as_posix() or None
|
|
1894
|
+
project_id = InvocationId(project.relative_to(root).as_posix()) or None
|
|
1895
1895
|
report = _invoke(
|
|
1896
1896
|
name,
|
|
1897
1897
|
argv,
|
|
@@ -1945,7 +1945,7 @@ def _invoke_ruff_projects(
|
|
|
1945
1945
|
) -> tuple[ToolReport, ...]:
|
|
1946
1946
|
reports: list[ToolReport] = []
|
|
1947
1947
|
for project, config, scoped_files in ruff_project_groups(files, root):
|
|
1948
|
-
project_id = None if project == root else project.relative_to(root).as_posix()
|
|
1948
|
+
project_id = None if project == root else InvocationId(project.relative_to(root).as_posix())
|
|
1949
1949
|
report = _invoke(
|
|
1950
1950
|
"ruff",
|
|
1951
1951
|
_ruff_argv(scoped_files, config=config),
|
|
@@ -2221,11 +2221,15 @@ def _shellcheck_reports(
|
|
|
2221
2221
|
return tuple(reports)
|
|
2222
2222
|
for batch_number, start in enumerate(range(0, len(grouped.shellcheck), _SHELLCHECK_BATCH_SIZE), start=1):
|
|
2223
2223
|
batch = tuple(sorted(grouped.shellcheck[start : start + _SHELLCHECK_BATCH_SIZE]))
|
|
2224
|
-
reports.append(
|
|
2224
|
+
reports.append(
|
|
2225
|
+
_invoke_shellcheck(batch, root=root, runner=runner, invocation_id=InvocationId(str(batch_number)))
|
|
2226
|
+
)
|
|
2225
2227
|
return tuple(reports)
|
|
2226
2228
|
|
|
2227
2229
|
|
|
2228
|
-
def _invoke_shellcheck(
|
|
2230
|
+
def _invoke_shellcheck(
|
|
2231
|
+
files: Sequence[str], *, root: Path, runner: ProcessRunner, invocation_id: InvocationId
|
|
2232
|
+
) -> ToolReport:
|
|
2229
2233
|
report = _invoke(
|
|
2230
2234
|
"shellcheck",
|
|
2231
2235
|
(
|
|
@@ -2725,7 +2729,7 @@ def _invoke(
|
|
|
2725
2729
|
runner: ProcessRunner,
|
|
2726
2730
|
parser: ProtocolParser,
|
|
2727
2731
|
validator: ProtocolValidator | None = None,
|
|
2728
|
-
invocation_id:
|
|
2732
|
+
invocation_id: InvocationId | None = None,
|
|
2729
2733
|
file_count: int,
|
|
2730
2734
|
version: str | None = None,
|
|
2731
2735
|
) -> ToolReport:
|
{code_standards-8.130.0 → code_standards-8.131.2}/src/sarj_standards/libs/release/rollout.py
RENAMED
|
@@ -2454,7 +2454,7 @@ def _publish_rollout_pull(
|
|
|
2454
2454
|
"--head",
|
|
2455
2455
|
branch,
|
|
2456
2456
|
"--title",
|
|
2457
|
-
BOT_COMMIT_PREFIX
|
|
2457
|
+
f"{BOT_COMMIT_PREFIX}{version}",
|
|
2458
2458
|
"--body",
|
|
2459
2459
|
body,
|
|
2460
2460
|
)
|
|
@@ -2471,7 +2471,7 @@ def _publish_rollout_pull(
|
|
|
2471
2471
|
consumer.repository,
|
|
2472
2472
|
url,
|
|
2473
2473
|
"--title",
|
|
2474
|
-
BOT_COMMIT_PREFIX
|
|
2474
|
+
f"{BOT_COMMIT_PREFIX}{version}",
|
|
2475
2475
|
"--body",
|
|
2476
2476
|
body,
|
|
2477
2477
|
)
|