code-standards 8.132.2__tar.gz → 8.134.0__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.132.2 → code_standards-8.134.0}/PKG-INFO +4 -4
- {code_standards-8.132.2 → code_standards-8.134.0}/README.md +1 -1
- {code_standards-8.132.2 → code_standards-8.134.0}/pyproject.toml +3 -3
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/api.py +21 -12
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/cli-reference.v1.json +2 -2
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/eslint.peers.json +2 -3
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/eslint.strict.mjs +0 -2
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/eslint.strict.ts +0 -2
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/ruff.strict.toml +0 -1
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/rule-calibration-campaign.v1.json +12 -4
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/rule-inventory.v1.json +1 -1
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/rule-ledger.json +10 -1
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/library_policy.py +95 -7
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/runner.py +2 -1
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/docs.py +3 -3
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/hooks.py +1 -1
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/rule_changes.py +3 -0
- code_standards-8.134.0/src/sarj_standards/schemas/rule-catalog.v1.json +1 -0
- code_standards-8.132.2/src/sarj_standards/schemas/rule-catalog.v1.json +0 -1
- {code_standards-8.132.2 → code_standards-8.134.0}/.gitignore +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/LICENSE +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/__init__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/__main__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/_meta.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/cli/__init__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/cli/main.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/Mintfile.mobile.strict +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/action-parser/LICENSE.actions +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/action-parser/LICENSE.cronstrue +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/action-parser/LICENSE.yaml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/action-parser/generate.mts +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/action-parser/index.mts +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/action-parser/package-lock.json +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/action-parser/package.json +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/action-parser/upstream.json +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/action-parser.cjs +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/actionlint.strict.yaml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/basedpyright.python315-watch.json +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/basedpyright.strict.json +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/checkov.strict.yml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/compile-eslint.mts +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/detekt.strict.yml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/devops-verification.v1.json +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/doctor.config.json +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/eslint-compact-formatter.mts +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/eslint-required-policy.mts +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/eslint-selected-rules.mts +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/eslint.application.mjs +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/hadolint.strict.yaml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/ktlint.strict.editorconfig +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/markdownlint.strict.yaml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/mobile-tools.versions.json +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/mobsf.strict.yml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/pyright.strict.json +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/ruff.application.toml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/ruff.cast.toml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/ruff.python315-watch.toml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/ruff.required.toml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/rule-level-source.mts +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/schemas/SKAFFOLD-LICENSE +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/schemas/google-build-v1-schema.json +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/schemas/google-build-v1.LICENSE +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/schemas/skaffold-v4beta7.json +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/schemas/upstream-schemas.json +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/semgrep-overrides.txt +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/shellcheck.strict.rc +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/swiftformat.strict +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/swiftlint.strict.yml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/taplo.strict.toml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/tflint.strict.hcl +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/tflint.version.hcl +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/tool-json.mts +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/yamllint.strict.yaml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/zizmor.strict.yml +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/__init__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/__init__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/age_transition.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/configs.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/devops.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/doctor.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/exclusions.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/hooks.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/launcher.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/lifecycle.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/manifest.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/native_bootstrap.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/packagemanager.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/repository_baseline.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/retired_suppressions.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/scaffold.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/service.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/transaction.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/upgrade.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/adoption/uvtool.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/catalogs/__init__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/catalogs/slack_automations.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/corpus/__init__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/corpus/manifest.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/corpus/snapshot.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/diagnostics/__init__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/diagnostics/analysis.schema.json +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/diagnostics/baseline.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/diagnostics/models.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/diagnostics/serialize.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/diagnostics/source.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/filesystem.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/json_boundary.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/__init__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/_cloudbuild_autofix.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/action_metadata.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/analysis.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/autofix.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/chart_schemas.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/cloudbuild.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/cloudbuild_schema.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/complexity_baseline.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/devops_programs.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/devops_schema.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/devops_source.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/devops_tools.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/duplicate_code.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/embedded_shell.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/external.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/kubernetes_context.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/mobile_tools.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/policy.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/prepared_devops.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/prepared_kubernetes.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/prepared_native.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/python_fixes.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/repo_standards.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/scheduling.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/security_tools.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/shell_ast.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/shell_format.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/shell_policy.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/test_value.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/text_rule_base.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/text_rules/__init__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/text_rules/_registry.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/text_rules/cloudbuild_contract.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/textlint.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/toml_literals.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/linting/unused_modules.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/__init__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/_values.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/artifacts.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/causality.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/changes.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/ci_artifacts.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/make_checks.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/metadata_verification.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/native_test_setup.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/process.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/publish.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/registry.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/release_age.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/release_detect.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/retirement.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/reviewed_analysis.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/rollout.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/status.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/tags.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/test_selection.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/typescript.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/verification_process.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/release/wheel_tests.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/__init__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/cli_examples.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/cli_reference_artifact.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/cloudbuild_schema_projection.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/comment_corpus.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/config_generation.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/immutable_git.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/ledger.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/repository.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/ruff_freshness.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/rule_authoring.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/rule_catalog_artifact.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/rule_checkout.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/rule_dependencies.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/rule_examples.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/rule_imports.mts +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/rule_inventory_artifact.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/rule_level_source.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/rule_lifecycle.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/rule_maintenance.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/rule_registration.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/shell_checks.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/repository/third_party_catalog_artifact.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/rules/__init__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/rules/catalog.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/rules/contracts.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/rules/corpus_runner.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/rules/evaluation.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/schema_boundary.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/setup/__init__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/setup/repository.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/typed_containers.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/libs/yaml_boundary.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/py.typed +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/schemas/__init__.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/schemas/_paths.py +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/schemas/rule-catalog.v1.schema.json +0 -0
- {code_standards-8.132.2 → code_standards-8.134.0}/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.134.0
|
|
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/
|
|
@@ -31,9 +31,9 @@ Requires-Dist: referencing==0.37.0
|
|
|
31
31
|
Requires-Dist: repo-standards==6.12.9
|
|
32
32
|
Requires-Dist: ruff==0.17.2
|
|
33
33
|
Requires-Dist: sarj-iac-lint==0.30.1
|
|
34
|
-
Requires-Dist: sarj-python-lint==1.
|
|
34
|
+
Requires-Dist: sarj-python-lint==1.79.0
|
|
35
35
|
Requires-Dist: sarj-rule-contracts==0.4.1
|
|
36
|
-
Requires-Dist: sarj-sql-lint==0.
|
|
36
|
+
Requires-Dist: sarj-sql-lint==0.28.0
|
|
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
|
|
@@ -73,7 +73,7 @@ The complete Python and JavaScript/TypeScript source gate requires named, line-l
|
|
|
73
73
|
|
|
74
74
|
The complete Standards gate enforces Ruff's ban on `typing.cast` and `typing_extensions.cast` even when source comments, consumer Ruff configuration or manifest rule exceptions suppress `banned-api`; these cast findings cannot enter or consume the diagnostic baseline. Wildcard imports, bounded literal `getattr` names and proven read-only typing module namespace lookups through `__dict__`, `vars` and `__getattribute__` retain the same ban. Other banned APIs retain their existing exception policy. Prefer discriminated unions, explicit narrowing and typed contracts. The warning `python:no-dual-shape-model-field-reader` (SARJ522) identifies private helpers that read the same declared Pydantic fields through model `getattr` and mapping lookup branches, returning `object` or `Any`. Normalize raw input once and read typed attributes. Opaque inputs, raw validators and genuinely dynamic reflection remain supported. Review changes to missing-field handling, coercion, generated defaults and validation errors; there is no autofix.
|
|
75
75
|
|
|
76
|
-
Python boolean traps are owned by Ruff FBT001, FBT002 and FBT003: positional boolean annotations, defaults and literal arguments are checked; keyword-only inputs, named arguments and the existing test exemptions remain allowed. The typed ESLint policy uses `@sarj/no-boolean-selector-parameter` at warning severity.
|
|
76
|
+
Python boolean traps are owned by Ruff FBT001, FBT002 and FBT003: positional boolean annotations, defaults and literal arguments are checked; keyword-only inputs, named arguments and the existing test exemptions remain allowed. The typed ESLint policy uses `@sarj/no-boolean-selector-parameter` at warning severity. Its owned detector checks single-statement operation selectors and concise-arrow conditional dispatch. Prefer separate intention-revealing operations or an explicit string-literal mode. Boolean data, syntactic value mappings, stable same-operation data choices, setters and independently declared callback or inherited contracts remain allowed. Independent JSX helpers are checked; types and references establish callback contracts. It requires type information and a direct broad-boolean parameter condition. Multi-statement bodies, short-circuit guards, nullable or literal-only inputs and indirect predicates remain outside its scope. The preserved block-body `onX` property exemption remains a documented blind spot. Use `code-standards check --rule eslint:no-boolean-selector-parameter` to inspect it. Noncomputed property reads count as data without proving getter effects; computed reads, including literal keys, remain outside that exemption. API changes require manual review; the rule provides no automatic rewrite.
|
|
77
77
|
|
|
78
78
|
The shared ESLint policy also warns on unparenthesized assignments in returned expressions through native `no-return-assign`. Review whether the assignment should be a comparison or a separate state change; there is no automatic intent-changing fix. The native `except-parens` option accepts individually grouped assignments and common lazy memoization. Parentheses mark syntactic visibility, not proven intent: formatters can add or remove them without changing behavior. A chained assignment can still warn after formatting even when its outer expression is grouped. For an intentional local-variable chain, use separate assignment statements followed by return. Upstream may report several writes at the same return location. This rule does not prohibit all returned mutations or prove command/query separation. Existing typed void-return and Promise checks retain their own boundaries; an executor's returned expression alone does not prove a broken Promise.
|
|
79
79
|
|
|
@@ -33,7 +33,7 @@ The complete Python and JavaScript/TypeScript source gate requires named, line-l
|
|
|
33
33
|
|
|
34
34
|
The complete Standards gate enforces Ruff's ban on `typing.cast` and `typing_extensions.cast` even when source comments, consumer Ruff configuration or manifest rule exceptions suppress `banned-api`; these cast findings cannot enter or consume the diagnostic baseline. Wildcard imports, bounded literal `getattr` names and proven read-only typing module namespace lookups through `__dict__`, `vars` and `__getattribute__` retain the same ban. Other banned APIs retain their existing exception policy. Prefer discriminated unions, explicit narrowing and typed contracts. The warning `python:no-dual-shape-model-field-reader` (SARJ522) identifies private helpers that read the same declared Pydantic fields through model `getattr` and mapping lookup branches, returning `object` or `Any`. Normalize raw input once and read typed attributes. Opaque inputs, raw validators and genuinely dynamic reflection remain supported. Review changes to missing-field handling, coercion, generated defaults and validation errors; there is no autofix.
|
|
35
35
|
|
|
36
|
-
Python boolean traps are owned by Ruff FBT001, FBT002 and FBT003: positional boolean annotations, defaults and literal arguments are checked; keyword-only inputs, named arguments and the existing test exemptions remain allowed. The typed ESLint policy uses `@sarj/no-boolean-selector-parameter` at warning severity.
|
|
36
|
+
Python boolean traps are owned by Ruff FBT001, FBT002 and FBT003: positional boolean annotations, defaults and literal arguments are checked; keyword-only inputs, named arguments and the existing test exemptions remain allowed. The typed ESLint policy uses `@sarj/no-boolean-selector-parameter` at warning severity. Its owned detector checks single-statement operation selectors and concise-arrow conditional dispatch. Prefer separate intention-revealing operations or an explicit string-literal mode. Boolean data, syntactic value mappings, stable same-operation data choices, setters and independently declared callback or inherited contracts remain allowed. Independent JSX helpers are checked; types and references establish callback contracts. It requires type information and a direct broad-boolean parameter condition. Multi-statement bodies, short-circuit guards, nullable or literal-only inputs and indirect predicates remain outside its scope. The preserved block-body `onX` property exemption remains a documented blind spot. Use `code-standards check --rule eslint:no-boolean-selector-parameter` to inspect it. Noncomputed property reads count as data without proving getter effects; computed reads, including literal keys, remain outside that exemption. API changes require manual review; the rule provides no automatic rewrite.
|
|
37
37
|
|
|
38
38
|
The shared ESLint policy also warns on unparenthesized assignments in returned expressions through native `no-return-assign`. Review whether the assignment should be a comparison or a separate state change; there is no automatic intent-changing fix. The native `except-parens` option accepts individually grouped assignments and common lazy memoization. Parentheses mark syntactic visibility, not proven intent: formatters can add or remove them without changing behavior. A chained assignment can still warn after formatting even when its outer expression is grouped. For an intentional local-variable chain, use separate assignment statements followed by return. Upstream may report several writes at the same return location. This rule does not prohibit all returned mutations or prove command/query separation. Existing typed void-return and Promise checks retain their own boundaries; an executor's returned expression alone does not prove a broken Promise.
|
|
39
39
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "code-standards"
|
|
3
|
-
version = "8.
|
|
3
|
+
version = "8.134.0"
|
|
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"
|
|
@@ -32,8 +32,8 @@ dependencies = [
|
|
|
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
34
|
"sarj-iac-lint==0.30.1",
|
|
35
|
-
"sarj-python-lint==1.
|
|
36
|
-
"sarj-sql-lint==0.
|
|
35
|
+
"sarj-python-lint==1.79.0",
|
|
36
|
+
"sarj-sql-lint==0.28.0",
|
|
37
37
|
"typer==0.27.3",
|
|
38
38
|
]
|
|
39
39
|
|
|
@@ -228,7 +228,10 @@ class Standards:
|
|
|
228
228
|
exit_code=_INVALID_EXIT,
|
|
229
229
|
)
|
|
230
230
|
try:
|
|
231
|
-
|
|
231
|
+
selected_groups = group_paths(selected, policy=policy)
|
|
232
|
+
policy_findings = check_selected_library_policy(
|
|
233
|
+
self.root, selected, python_paths=selected_groups.python
|
|
234
|
+
)
|
|
232
235
|
except (OSError, TypeError, ValueError, ManifestPolicyError) as exc:
|
|
233
236
|
return Result(
|
|
234
237
|
Status.INVALID,
|
|
@@ -239,7 +242,7 @@ class Standards:
|
|
|
239
242
|
Finding(item.id, "error", item.message, str(item.path), f"use {item.replacement}")
|
|
240
243
|
for item in policy_findings
|
|
241
244
|
)
|
|
242
|
-
source_status = check(selected, policy=policy)
|
|
245
|
+
source_status = check(selected, policy=policy, grouped=selected_groups)
|
|
243
246
|
eslint_status = execute(selected_eslint_commands(self.root, selected))
|
|
244
247
|
return _operation_result(max(source_status, eslint_status, 1 if findings else 0), findings=findings)
|
|
245
248
|
return _operation_result(_verify(self.root))
|
|
@@ -306,7 +309,9 @@ class Standards:
|
|
|
306
309
|
rule_selection=rule_selection,
|
|
307
310
|
)
|
|
308
311
|
if rule_selection is None:
|
|
309
|
-
native = _with_library_policy(
|
|
312
|
+
native = _with_library_policy(
|
|
313
|
+
self.root, native, active_selected, selection_policy, python_paths=selected_groups.python
|
|
314
|
+
)
|
|
310
315
|
if rule_selection is None and normalized_mode is AnalysisMode.POLICY:
|
|
311
316
|
native = _with_repository_analysis(self.root, native, staged=staged)
|
|
312
317
|
prepared = _prepared_reports(self.root, adopted, prepared_devops, prepared_targets, trust=normalized_trust)
|
|
@@ -513,12 +518,11 @@ def _verify(root: Path) -> int:
|
|
|
513
518
|
return _INVALID_EXIT
|
|
514
519
|
verify_paths = adopted.verify_paths if adopted is not None else (".",)
|
|
515
520
|
policy = Policy.from_manifest(root, adopted)
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
):
|
|
521
|
+
selected = [str(root / path) for path in verify_paths]
|
|
522
|
+
selected_groups = group_paths(selected, policy=policy)
|
|
523
|
+
if check(selected, policy=policy, grouped=selected_groups):
|
|
520
524
|
return 1
|
|
521
|
-
if check_library_policy(root):
|
|
525
|
+
if check_library_policy(root, python_paths=selected_groups.python):
|
|
522
526
|
return 1
|
|
523
527
|
return execute(verification_commands(detect(root)))
|
|
524
528
|
|
|
@@ -881,10 +885,15 @@ def _selected_external_analysis(
|
|
|
881
885
|
|
|
882
886
|
|
|
883
887
|
def _with_library_policy(
|
|
884
|
-
root: Path,
|
|
888
|
+
root: Path,
|
|
889
|
+
native: AnalysisReport,
|
|
890
|
+
active_selected: list[str],
|
|
891
|
+
selection_policy: Policy,
|
|
892
|
+
*,
|
|
893
|
+
python_paths: Sequence[str] = (),
|
|
885
894
|
) -> AnalysisReport:
|
|
886
895
|
try:
|
|
887
|
-
policy = _filter_tool_report(_policy_report(root, active_selected), selection_policy)
|
|
896
|
+
policy = _filter_tool_report(_policy_report(root, active_selected, python_paths=python_paths), selection_policy)
|
|
888
897
|
except (OSError, TypeError, ValueError, ManifestPolicyError) as exc:
|
|
889
898
|
issue = ExecutionIssue("sarj-library-policy", "policy-failure", f"{type(exc).__name__}: {exc}")
|
|
890
899
|
policy = ToolReport("sarj-library-policy", Completion.FAILED, issues=(issue,))
|
|
@@ -1137,8 +1146,8 @@ def _engine_for_diagnostic(item: Diagnostic) -> RuleEngine | None:
|
|
|
1137
1146
|
}.get(item.source)
|
|
1138
1147
|
|
|
1139
1148
|
|
|
1140
|
-
def _policy_report(root: Path, selected: Sequence[str]) -> ToolReport:
|
|
1141
|
-
findings = check_selected_library_policy(root, selected)
|
|
1149
|
+
def _policy_report(root: Path, selected: Sequence[str], *, python_paths: Sequence[str] = ()) -> ToolReport:
|
|
1150
|
+
findings = check_selected_library_policy(root, selected, python_paths=python_paths)
|
|
1142
1151
|
documents: dict[Path, SourceDocument] = {}
|
|
1143
1152
|
diagnostics: list[Diagnostic] = []
|
|
1144
1153
|
for finding in findings:
|
{code_standards-8.132.2 → code_standards-8.134.0}/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.134.0).",
|
|
3320
|
+
"version": "8.134.0"
|
|
3321
3321
|
}
|
{code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/eslint.peers.json
RENAMED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"@eslint-community/eslint-plugin-eslint-comments": "4.8.1",
|
|
20
20
|
"@eslint/compat": "2.1.1",
|
|
21
21
|
"@eslint/js": "10.0.1",
|
|
22
|
-
"@sarj/eslint-plugin": "16.30.
|
|
22
|
+
"@sarj/eslint-plugin": "16.30.4",
|
|
23
23
|
"@shadcn/lint": "0.2.3",
|
|
24
24
|
"@typescript/native": "npm:typescript@7.0.2",
|
|
25
25
|
"@vitest/eslint-plugin": "1.6.28",
|
|
@@ -35,7 +35,6 @@
|
|
|
35
35
|
"eslint-plugin-react": "7.37.5",
|
|
36
36
|
"eslint-plugin-react-hooks": "7.1.1",
|
|
37
37
|
"eslint-plugin-simple-import-sort": "14.0.0",
|
|
38
|
-
"eslint-plugin-sonarjs": "4.2.2",
|
|
39
38
|
"eslint-plugin-testing-library": "7.16.2",
|
|
40
39
|
"eslint-plugin-unicorn": "79.0.0",
|
|
41
40
|
"eslint-plugin-zod": "5.2.2",
|
|
@@ -46,7 +45,7 @@
|
|
|
46
45
|
"eslint-plugin-regexp": "3.3.1"
|
|
47
46
|
},
|
|
48
47
|
"ageGatePreapprovals": {
|
|
49
|
-
"@sarj/eslint-plugin": "16.30.
|
|
48
|
+
"@sarj/eslint-plugin": "16.30.4"
|
|
50
49
|
},
|
|
51
50
|
"yarnIdentityPins": {
|
|
52
51
|
"@typescript-eslint/eslint-plugin": "8.72.0",
|
{code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/eslint.strict.mjs
RENAMED
|
@@ -14,7 +14,6 @@ import node from "eslint-plugin-n";
|
|
|
14
14
|
import perfectionist from "eslint-plugin-perfectionist";
|
|
15
15
|
import promiseModule from "eslint-plugin-promise";
|
|
16
16
|
import simpleImportSort from "eslint-plugin-simple-import-sort";
|
|
17
|
-
import sonarjs from "eslint-plugin-sonarjs";
|
|
18
17
|
import betterTailwindcss from "eslint-plugin-better-tailwindcss";
|
|
19
18
|
import { plugin as shadcn, project as shadcnProject } from "@shadcn/lint";
|
|
20
19
|
import jsdoc from "eslint-plugin-jsdoc";
|
|
@@ -693,7 +692,6 @@ export function createConfig(options = {}) {
|
|
|
693
692
|
perfectionist,
|
|
694
693
|
promise,
|
|
695
694
|
"simple-import-sort": simpleImportSort,
|
|
696
|
-
sonarjs,
|
|
697
695
|
jsdoc,
|
|
698
696
|
shadcn: scopedShadcn,
|
|
699
697
|
"@sarj": sarj,
|
{code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/eslint.strict.ts
RENAMED
|
@@ -16,7 +16,6 @@ import perfectionist from "eslint-plugin-perfectionist";
|
|
|
16
16
|
// @ts-expect-error -- The pinned promise plugin exports CommonJS without TypeScript declarations.
|
|
17
17
|
import promiseModule from "eslint-plugin-promise";
|
|
18
18
|
import simpleImportSort from "eslint-plugin-simple-import-sort";
|
|
19
|
-
import sonarjs from "eslint-plugin-sonarjs";
|
|
20
19
|
import betterTailwindcss from "eslint-plugin-better-tailwindcss";
|
|
21
20
|
import { plugin as shadcn, project as shadcnProject } from "@shadcn/lint";
|
|
22
21
|
import jsdoc from "eslint-plugin-jsdoc";
|
|
@@ -795,7 +794,6 @@ export function createConfig(options: ConfigOptions = {}): Linter.Config[] {
|
|
|
795
794
|
perfectionist,
|
|
796
795
|
promise,
|
|
797
796
|
"simple-import-sort": simpleImportSort,
|
|
798
|
-
sonarjs,
|
|
799
797
|
jsdoc,
|
|
800
798
|
shadcn: scopedShadcn,
|
|
801
799
|
"@sarj": sarj,
|
{code_standards-8.132.2 → code_standards-8.134.0}/src/sarj_standards/configs/ruff.strict.toml
RENAMED
|
@@ -289,7 +289,6 @@ warns-extend-require-match-for = [
|
|
|
289
289
|
"futures".msg = "LIB017: Remove the obsolete futures backport on Python 3.14. Replace with concurrent.futures."
|
|
290
290
|
"importlib_metadata".msg = "LIB013: Python 3.14 provides importlib.metadata. Replace with importlib.metadata."
|
|
291
291
|
"importlib_resources".msg = "LIB014: Python 3.14 provides importlib.resources. Replace with importlib.resources."
|
|
292
|
-
"logging".msg = "LIB023: Standards standardizes application logging on loguru, whose bound context carries correlation fields to every line; a second stdlib logger splits the logs. A loguru bridge that intercepts third-party stdlib records needs a local, reasoned TID251 suppression. Replace with loguru."
|
|
293
292
|
"marshmallow".msg = "LIB007: Standards standardizes validation and serialization on Pydantic. Replace with Pydantic."
|
|
294
293
|
"mock".msg = "LIB022: Python 3.14 provides unittest.mock. Replace with unittest.mock."
|
|
295
294
|
"nose".msg = "LIB021: Nose is unmaintained; use pytest. Replace with pytest."
|
|
@@ -527,8 +527,8 @@
|
|
|
527
527
|
"family": "python",
|
|
528
528
|
"ruleId": "no-analytical-aggregation-in-postgres-store",
|
|
529
529
|
"state": "complete",
|
|
530
|
-
"evidence": "Three fresh independent reviews ran 152 focused tests and scanned up to 13,930 Python files. They found 13 raw findings across eight files, including six already-suppressed bounded or transactional aggregates; only cache and task statistics were plausible analytics. All reviewers reproduced false positives for transactional SUM, scheduler MIN, version MAX, bounded DISTINCT and JSON aggregation, SQLite or MySQL stores, and executable-looking SQL in docstrings. File-wide ClickHouse and BigQuery exclusions also hid PostgreSQL queries in mixed-backend modules. Ruff, Pylint, and SQLFluff do not own this datastore-placement policy.",
|
|
531
|
-
"outcome": "
|
|
530
|
+
"evidence": "Three fresh independent reviews ran 152 focused tests and scanned up to 13,930 Python files. They found 13 raw findings across eight files, including six already-suppressed bounded or transactional aggregates; only cache and task statistics were plausible analytics. All reviewers reproduced false positives for transactional SUM, scheduler MIN, version MAX, bounded DISTINCT and JSON aggregation, SQLite or MySQL stores, and executable-looking SQL in docstrings. File-wide ClickHouse and BigQuery exclusions also hid PostgreSQL queries in mixed-backend modules. Ruff, Pylint, and SQLFluff do not own this datastore-placement policy. Follow-up policy change: the user explicitly requested a ban on transactional DISTINCT, GROUP BY, and aggregates. Earlier bounded-aggregate exemptions no longer describe the requested architecture. The new implementation parses SQL, recognizes native PostgreSQL/MySQL/SQLite and analytical drivers, preserves scalar near misses, and requires native receiver proof in mixed modules. Calibration is recorded in the transactional SQL benchmark report. Final native qualification compared three before/after trials with cold/warm analyses over 3,956 files per trial, with unchanged semantic input closures and deterministic complete diagnostic tuples. All 367 labeled cases passed (200 positives, 167 controls); all 47 actual consumer findings were independently inspected or reconciled against identical previously inspected source and full tuples, with zero known false positives. Namespace, declared dependency, generated-provider and re-export ownership, quoted function identity, executing EXPLAIN, metadata-free aggregates, dialect-native comment/identifier masking and multi-statement suppression boundaries are covered. See packages/python/benchmarks/transactional-sql-policy.json for redacted counts, observed performance and scope limits.",
|
|
531
|
+
"outcome": "Replace the historical advisory policy with blocking SARJ020 enforcement at the explicit user request. Retain the selector and permanent code, remove store-filename and reporting-size exemptions, include recoverable f-strings, CTEs, writes and windowed aggregates, and give the error precedence over the same-query SARJ437 warning. Keep analytical backends, ambiguous ownership, nonproduction code, scalar functions and exact reviewed exceptions intact. No datastore autofix is safe."
|
|
532
532
|
},
|
|
533
533
|
{
|
|
534
534
|
"task": "rule-audit/python/no-comment-cruft",
|
|
@@ -2485,7 +2485,7 @@
|
|
|
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. 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.",
|
|
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. Follow-up whole-consumer adoption audit found diagnostic-wording churn invalidating 24 existing native baseline identities. Restored the legacy message header without changing detector coverage; one external-diagnostic regression and the existing callback/HTTP controls verify compatibility. Follow-up generated HTTP wrapper calibration: packages/python/benchmarks/service-http-callbacks-followup.json records 44 additional labels (nine positives, 35 controls, zero false positives or negatives), three before/after cold/warm trials, unchanged semantic closures and deterministic complete diagnostic tuples. Both linked service reproductions emit ERROR. All 24 preexisting consumer findings retain identical diagnostics; no new consumer finding requires inspection. Declared distribution ownership, generated/type-only re-exports, active resource lifetime, callback typing, full and partial contracts, mutation and escape exclusions have independent semantic reviews. The earlier two 100-case campaigns remain separate historical evidence; finite labels and selected-rule shared-VM measurements do not establish universal precision or full-preset fleet overhead.",
|
|
2489
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
|
{
|
|
@@ -2859,8 +2859,16 @@
|
|
|
2859
2859
|
"family": "python",
|
|
2860
2860
|
"ruleId": "prefer-grouped-settings",
|
|
2861
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.",
|
|
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. The second post-merge audit passed 100 distinct native checks against the actual published sarj-python-lint 1.76.0 wheel, 25 per repaired rule, with zero failures or skips.",
|
|
2863
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."
|
|
2864
|
+
},
|
|
2865
|
+
{
|
|
2866
|
+
"task": "rule-audit/sql/no-analytical-queries-in-transactional-db",
|
|
2867
|
+
"family": "sql",
|
|
2868
|
+
"ruleId": "no-analytical-queries-in-transactional-db",
|
|
2869
|
+
"state": "complete",
|
|
2870
|
+
"evidence": "Native semantic fixtures cover DISTINCT and DISTINCT ON, grouping without aggregates, built-in aggregates including JSON, CTEs, nested writes, views, windows, placeholders, comments and values, scalar lookalikes, analytical dialects, physical locations, malformed input and exact suppressions. Broader corpus and performance qualification is recorded separately; private sources and identifying pins remain local. Final native qualification compared three before/after trials with cold/warm analyses over 3,956 files per trial, with unchanged semantic input closures and deterministic complete diagnostic tuples. All 367 labeled cases passed (200 positives, 167 controls); all 47 actual consumer findings were independently inspected or reconciled against identical previously inspected source and full tuples, with zero known false positives. Namespace, declared dependency, generated-provider and re-export ownership, quoted function identity, executing EXPLAIN, metadata-free aggregates, dialect-native comment/identifier masking and multi-statement suppression boundaries are covered. See packages/python/benchmarks/transactional-sql-policy.json for redacted counts, observed performance and scope limits.",
|
|
2871
|
+
"outcome": "Ship SARJ122 as an error at the explicit user request to ban transactional SQL aggregation. PostgreSQL is the SQL linter default, MySQL and SQLite select native parsers, and declared analytical dialects or database directories remain valid. Treat this as an organization datastore policy, not a cost estimator; preserve atomicity and require an exact reviewed exception for an unavoidable transactional invariant."
|
|
2864
2872
|
}
|
|
2865
2873
|
]
|
|
2866
2874
|
}
|