code-standards 8.104.1__tar.gz → 8.105.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.
Files changed (184) hide show
  1. {code_standards-8.104.1 → code_standards-8.105.0}/PKG-INFO +7 -5
  2. {code_standards-8.104.1 → code_standards-8.105.0}/README.md +3 -1
  3. {code_standards-8.104.1 → code_standards-8.105.0}/pyproject.toml +4 -4
  4. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/api.py +69 -33
  5. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/cli/main.py +86 -86
  6. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/cli-reference.v1.json +1 -1
  7. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/eslint-compact-formatter.mts +10 -5
  8. code_standards-8.105.0/src/sarj_standards/configs/eslint-required-policy.mts +142 -0
  9. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/eslint-selected-rules.mts +67 -10
  10. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/eslint.peers.json +2 -2
  11. code_standards-8.105.0/src/sarj_standards/configs/ruff.required.toml +5 -0
  12. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/rule-calibration-campaign.v1.json +8 -0
  13. code_standards-8.105.0/src/sarj_standards/configs/rule-inventory.v1.json +1 -0
  14. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/rule-ledger.json +3 -1
  15. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/doctor.py +1 -1
  16. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/hooks.py +5 -5
  17. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/lifecycle.py +1 -1
  18. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/diagnostics/baseline.py +4 -4
  19. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/analysis.py +9 -2
  20. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/external.py +30 -19
  21. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/mobile_tools.py +1 -1
  22. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/policy.py +1 -1
  23. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/repo_standards.py +5 -5
  24. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/runner.py +2 -2
  25. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/textlint.py +6 -6
  26. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/artifacts.py +1 -1
  27. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/causality.py +2 -2
  28. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/registry.py +1 -1
  29. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/release_age.py +1 -1
  30. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/cli_reference_artifact.py +2 -2
  31. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/docs.py +12 -1
  32. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/hooks.py +7 -7
  33. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/repository.py +2 -2
  34. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/rule_catalog_artifact.py +5 -5
  35. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/rule_changes.py +3 -0
  36. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/rule_examples.py +3 -3
  37. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/rule_inventory_artifact.py +2 -2
  38. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/third_party_catalog_artifact.py +1 -1
  39. code_standards-8.105.0/src/sarj_standards/schemas/rule-catalog.v1.json +1 -0
  40. code_standards-8.104.1/src/sarj_standards/configs/rule-inventory.v1.json +0 -1
  41. code_standards-8.104.1/src/sarj_standards/schemas/rule-catalog.v1.json +0 -1
  42. {code_standards-8.104.1 → code_standards-8.105.0}/.gitignore +0 -0
  43. {code_standards-8.104.1 → code_standards-8.105.0}/LICENSE +0 -0
  44. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/__init__.py +0 -0
  45. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/__main__.py +0 -0
  46. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/_meta.py +0 -0
  47. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/cli/__init__.py +0 -0
  48. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/Mintfile.mobile.strict +0 -0
  49. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/actionlint.strict.yaml +0 -0
  50. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/basedpyright.python315-watch.json +0 -0
  51. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/basedpyright.strict.json +0 -0
  52. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/checkov.strict.yml +0 -0
  53. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/detekt.strict.yml +0 -0
  54. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/devops-verification.v1.json +0 -0
  55. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/doctor.config.json +0 -0
  56. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/eslint.application.mjs +0 -0
  57. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/eslint.strict.mjs +0 -0
  58. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/hadolint.strict.yaml +0 -0
  59. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/ktlint.strict.editorconfig +0 -0
  60. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/markdownlint.strict.yaml +0 -0
  61. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/mobile-tools.versions.json +0 -0
  62. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/mobsf.strict.yml +0 -0
  63. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/pyright.strict.json +0 -0
  64. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/ruff.application.toml +0 -0
  65. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/ruff.cast.toml +0 -0
  66. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/ruff.python315-watch.toml +0 -0
  67. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/ruff.strict.toml +0 -0
  68. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/rule-level-source.mts +0 -0
  69. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/schemas/SKAFFOLD-LICENSE +0 -0
  70. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/schemas/skaffold-v4beta7.json +0 -0
  71. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/schemas/upstream-schemas.json +0 -0
  72. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/semgrep-overrides.txt +0 -0
  73. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/shellcheck.strict.rc +0 -0
  74. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/swiftformat.strict +0 -0
  75. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/swiftlint.strict.yml +0 -0
  76. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/taplo.strict.toml +0 -0
  77. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/tflint.strict.hcl +0 -0
  78. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/tflint.version.hcl +0 -0
  79. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/tool-json.mts +0 -0
  80. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/yamllint.strict.yaml +0 -0
  81. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/configs/zizmor.strict.yml +0 -0
  82. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/__init__.py +0 -0
  83. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/__init__.py +0 -0
  84. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/age_transition.py +0 -0
  85. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/configs.py +0 -0
  86. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/devops.py +0 -0
  87. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/exclusions.py +0 -0
  88. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/launcher.py +0 -0
  89. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/manifest.py +0 -0
  90. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/native_bootstrap.py +0 -0
  91. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/packagemanager.py +0 -0
  92. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/repository_baseline.py +0 -0
  93. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/retired_suppressions.py +0 -0
  94. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/scaffold.py +0 -0
  95. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/service.py +0 -0
  96. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/transaction.py +0 -0
  97. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/upgrade.py +0 -0
  98. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/adoption/uvtool.py +0 -0
  99. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/catalogs/__init__.py +0 -0
  100. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/catalogs/slack_automations.py +0 -0
  101. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/corpus/__init__.py +0 -0
  102. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/corpus/manifest.py +0 -0
  103. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/corpus/snapshot.py +0 -0
  104. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/diagnostics/__init__.py +0 -0
  105. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/diagnostics/analysis.schema.json +0 -0
  106. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/diagnostics/models.py +0 -0
  107. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/diagnostics/serialize.py +0 -0
  108. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/diagnostics/source.py +0 -0
  109. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/filesystem.py +0 -0
  110. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/json_boundary.py +0 -0
  111. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/__init__.py +0 -0
  112. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/chart_schemas.py +0 -0
  113. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/cloudbuild.py +0 -0
  114. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/devops_programs.py +0 -0
  115. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/devops_schema.py +0 -0
  116. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/devops_source.py +0 -0
  117. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/devops_tools.py +0 -0
  118. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/duplicate_code.py +0 -0
  119. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/embedded_shell.py +0 -0
  120. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/kubernetes_context.py +0 -0
  121. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/library_policy.py +0 -0
  122. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/prepared_devops.py +0 -0
  123. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/prepared_kubernetes.py +0 -0
  124. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/scheduling.py +0 -0
  125. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/security_tools.py +0 -0
  126. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/shell_ast.py +0 -0
  127. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/shell_format.py +0 -0
  128. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/shell_policy.py +0 -0
  129. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/test_value.py +0 -0
  130. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/text_rule_base.py +0 -0
  131. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/text_rules/__init__.py +0 -0
  132. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/text_rules/_registry.py +0 -0
  133. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/text_rules/cloudbuild_contract.py +0 -0
  134. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/toml_literals.py +0 -0
  135. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/linting/unused_modules.py +0 -0
  136. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/__init__.py +0 -0
  137. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/_values.py +0 -0
  138. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/changes.py +0 -0
  139. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/ci_artifacts.py +0 -0
  140. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/make_checks.py +0 -0
  141. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/metadata_verification.py +0 -0
  142. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/native_test_setup.py +0 -0
  143. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/process.py +0 -0
  144. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/publish.py +0 -0
  145. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/release_detect.py +0 -0
  146. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/retirement.py +0 -0
  147. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/reviewed_analysis.py +0 -0
  148. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/rollout.py +0 -0
  149. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/status.py +0 -0
  150. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/tags.py +0 -0
  151. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/test_selection.py +0 -0
  152. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/typescript.py +0 -0
  153. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/verification_process.py +0 -0
  154. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/release/wheel_tests.py +0 -0
  155. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/__init__.py +0 -0
  156. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/comment_corpus.py +0 -0
  157. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/config_generation.py +0 -0
  158. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/immutable_git.py +0 -0
  159. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/ledger.py +0 -0
  160. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/ruff_freshness.py +0 -0
  161. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/rule_authoring.py +0 -0
  162. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/rule_checkout.py +0 -0
  163. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/rule_dependencies.py +0 -0
  164. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/rule_imports.mts +0 -0
  165. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/rule_level_source.py +0 -0
  166. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/rule_lifecycle.py +0 -0
  167. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/rule_maintenance.py +0 -0
  168. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/rule_registration.py +0 -0
  169. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/repository/shell_checks.py +0 -0
  170. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/rules/__init__.py +0 -0
  171. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/rules/catalog.py +0 -0
  172. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/rules/contracts.py +0 -0
  173. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/rules/corpus_runner.py +0 -0
  174. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/rules/evaluation.py +0 -0
  175. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/schema_boundary.py +0 -0
  176. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/setup/__init__.py +0 -0
  177. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/setup/repository.py +0 -0
  178. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/typed_containers.py +0 -0
  179. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/libs/yaml_boundary.py +0 -0
  180. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/py.typed +0 -0
  181. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/schemas/__init__.py +0 -0
  182. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/schemas/_paths.py +0 -0
  183. {code_standards-8.104.1 → code_standards-8.105.0}/src/sarj_standards/schemas/rule-catalog.v1.schema.json +0 -0
  184. {code_standards-8.104.1 → code_standards-8.105.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.104.1
3
+ Version: 8.105.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/
@@ -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.11.0
32
32
  Requires-Dist: ruff==0.17.0
33
- Requires-Dist: sarj-iac-lint==0.24.1
34
- Requires-Dist: sarj-python-lint==1.63.1
33
+ Requires-Dist: sarj-iac-lint==0.25.0
34
+ Requires-Dist: sarj-python-lint==1.64.0
35
35
  Requires-Dist: sarj-rule-contracts==0.2.5
36
- Requires-Dist: sarj-sql-lint==0.22.4
36
+ Requires-Dist: sarj-sql-lint==0.23.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
@@ -67,7 +67,9 @@ Use repeatable `check --rule ENGINE:ID` selectors to select native rules, ESLint
67
67
 
68
68
  Selected ESLint checks apply live inline suppressions and validate selected bulk suppression counts. The complete lint gate owns unused inline-directive and inline-configuration checks: a partial run cannot establish whether an unselected rule's directive is needed.
69
69
 
70
- 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 and literal `getattr` access to a proven typing module 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.
70
+ The complete Python and JavaScript/TypeScript source gate requires named, line-local exceptions with concrete reasons. SARJ523 rejects blanket Python waivers, scoped Ruff file/range disables and weakened Pyright source settings; SARJ419 also rejects missing explanations. Bare sarj-noqa markers cannot waive Python, SQL or IaC findings. Required Ruff blanket-ignore checks and an independent ESLint suppression-policy pass remain active despite source disables, consumer rule configuration, rule exclusions and diagnostic baselines. The ESLint pass bans file/range disables, ts-ignore and ts-nocheck while retaining described local ts-expect-error exceptions. Generated-source headers cannot authorize their own waiver; explicit whole-path exclusions retain that boundary. A reason is not proof that an exception is justified. Native parse/read/size failures make checks incomplete. Explicit tool delegation, partial and own-CI options retain their declared scope and coverage notices.
71
+
72
+ 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.
71
73
 
72
74
  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. This adapter retains maintained SonarJS S2301 detection and adds 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 inherited upstream 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.
73
75
 
@@ -27,7 +27,9 @@ Use repeatable `check --rule ENGINE:ID` selectors to select native rules, ESLint
27
27
 
28
28
  Selected ESLint checks apply live inline suppressions and validate selected bulk suppression counts. The complete lint gate owns unused inline-directive and inline-configuration checks: a partial run cannot establish whether an unselected rule's directive is needed.
29
29
 
30
- 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 and literal `getattr` access to a proven typing module 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.
30
+ The complete Python and JavaScript/TypeScript source gate requires named, line-local exceptions with concrete reasons. SARJ523 rejects blanket Python waivers, scoped Ruff file/range disables and weakened Pyright source settings; SARJ419 also rejects missing explanations. Bare sarj-noqa markers cannot waive Python, SQL or IaC findings. Required Ruff blanket-ignore checks and an independent ESLint suppression-policy pass remain active despite source disables, consumer rule configuration, rule exclusions and diagnostic baselines. The ESLint pass bans file/range disables, ts-ignore and ts-nocheck while retaining described local ts-expect-error exceptions. Generated-source headers cannot authorize their own waiver; explicit whole-path exclusions retain that boundary. A reason is not proof that an exception is justified. Native parse/read/size failures make checks incomplete. Explicit tool delegation, partial and own-CI options retain their declared scope and coverage notices.
31
+
32
+ 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.
31
33
 
32
34
  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. This adapter retains maintained SonarJS S2301 detection and adds 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 inherited upstream 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.
33
35
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "code-standards"
3
- version = "8.104.1"
3
+ version = "8.105.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"
@@ -31,9 +31,9 @@ dependencies = [
31
31
  "repo-standards==6.11.0",
32
32
  "ruff==0.17.0",
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.24.1",
35
- "sarj-python-lint==1.63.1",
36
- "sarj-sql-lint==0.22.4",
34
+ "sarj-iac-lint==0.25.0",
35
+ "sarj-python-lint==1.64.0",
36
+ "sarj-sql-lint==0.23.0",
37
37
  "typer==0.27.3",
38
38
  ]
39
39
 
@@ -324,33 +324,15 @@ class Standards:
324
324
  return _with_coverage(
325
325
  _without_baselined_diagnostics(native, baseline_counts, changed_scope=changed_scope), coverage
326
326
  )
327
- if selected_groups.typescript and adopted is not None and "eslint" not in adopted.configs:
328
- coverage.append(
329
- CoverageNotice(
330
- "eslint",
331
- "disabled by repository capabilities",
332
- len(selected_groups.typescript),
333
- CoverageDisposition.NOT_REQUESTED,
334
- )
335
- )
336
- elif selected_groups.typescript and not eslint:
337
- coverage.append(
338
- CoverageNotice(
339
- "eslint",
340
- "ESLint is left to the repository's own CI",
341
- len(selected_groups.typescript),
342
- CoverageDisposition.NOT_REQUESTED,
343
- )
344
- )
345
- if selected_groups.python and not python_type_check:
346
- coverage.append(
347
- CoverageNotice(
348
- "basedpyright",
349
- "Python type checking is left to the repository's own CI",
350
- len(selected_groups.python),
351
- CoverageDisposition.NOT_REQUESTED,
352
- )
327
+ coverage.extend(
328
+ _source_analyzer_coverage(
329
+ selected_groups,
330
+ adopted,
331
+ full=rule_selection is None and not upstream_rules.ids,
332
+ python_type_check=python_type_check,
333
+ eslint=eslint,
353
334
  )
335
+ )
354
336
 
355
337
  def external_analysis() -> tuple[ToolReport, ...]:
356
338
  return _selected_external_analysis(
@@ -573,6 +555,57 @@ def _operation_result(
573
555
  return Result(status, findings, changes, exit_code)
574
556
 
575
557
 
558
+ def _source_analyzer_coverage(
559
+ selected_groups: GroupedPaths,
560
+ adopted: Manifest | None,
561
+ *,
562
+ full: bool,
563
+ python_type_check: bool,
564
+ eslint: bool,
565
+ ) -> list[CoverageNotice]:
566
+ coverage: list[CoverageNotice] = []
567
+ if full and selected_groups.python and adopted is not None:
568
+ requested_python_tools = ("ruff", "pyright") if python_type_check else ("ruff",)
569
+ coverage.extend(
570
+ CoverageNotice(
571
+ "basedpyright" if tool == "pyright" else tool,
572
+ "disabled by repository capabilities",
573
+ len(selected_groups.python),
574
+ CoverageDisposition.NOT_REQUESTED,
575
+ )
576
+ for tool in requested_python_tools
577
+ if tool not in adopted.enabled_capabilities
578
+ )
579
+ if selected_groups.typescript and not eslint:
580
+ coverage.append(
581
+ CoverageNotice(
582
+ "eslint",
583
+ "ESLint is left to the repository's own CI",
584
+ len(selected_groups.typescript),
585
+ CoverageDisposition.NOT_REQUESTED,
586
+ )
587
+ )
588
+ elif selected_groups.typescript and adopted is not None and "eslint" not in adopted.configs:
589
+ coverage.append(
590
+ CoverageNotice(
591
+ "eslint",
592
+ "disabled by repository capabilities",
593
+ len(selected_groups.typescript),
594
+ CoverageDisposition.NOT_REQUESTED,
595
+ )
596
+ )
597
+ if selected_groups.python and not python_type_check:
598
+ coverage.append(
599
+ CoverageNotice(
600
+ "basedpyright",
601
+ "Python type checking is left to the repository's own CI",
602
+ len(selected_groups.python),
603
+ CoverageDisposition.NOT_REQUESTED,
604
+ )
605
+ )
606
+ return coverage
607
+
608
+
576
609
  def _prepared_only_analysis(
577
610
  root: Path,
578
611
  adopted: Manifest | None,
@@ -820,7 +853,7 @@ def _with_library_policy(
820
853
 
821
854
 
822
855
  def _with_repository_analysis(root: Path, native: AnalysisReport, *, staged: bool) -> AnalysisReport:
823
- from .libs.linting.repo_standards import ( # ruff: ignore[import-outside-top-level]
856
+ from .libs.linting.repo_standards import ( # ruff: ignore[import-outside-top-level] -- load libs.linting.repo_standards only when this selected operation executes.
824
857
  analyze as analyze_repository,
825
858
  )
826
859
 
@@ -926,7 +959,7 @@ def _rule_selection(values: Sequence[str | RuleSelector] | None) -> RuleSelectio
926
959
  from sarj_standards.libs.linting import ( # ruff: ignore[import-outside-top-level] -- load the upstream selectors with the catalog.
927
960
  security_tools,
928
961
  )
929
- from sarj_standards.libs.repository import ( # ruff: ignore[import-outside-top-level]
962
+ from sarj_standards.libs.repository import ( # ruff: ignore[import-outside-top-level] -- load sarj_standards.libs.repository only when this selected operation executes.
930
963
  rule_catalog_artifact,
931
964
  )
932
965
 
@@ -953,7 +986,7 @@ def _rule_selection(values: Sequence[str | RuleSelector] | None) -> RuleSelectio
953
986
 
954
987
 
955
988
  def _routed_for_selection(grouped: object, selected: RuleSelection | None) -> set[str]:
956
- from sarj_standards.libs.linting.runner import ( # ruff: ignore[import-outside-top-level]
989
+ from sarj_standards.libs.linting.runner import ( # ruff: ignore[import-outside-top-level] -- load sarj_standards.libs.linting.runner only when this selected operation executes.
957
990
  GroupedPaths,
958
991
  )
959
992
 
@@ -996,10 +1029,10 @@ def _filter_report_selectors(
996
1029
 
997
1030
 
998
1031
  def _warning_rule_keys(mode: AnalysisMode, selected: RuleSelection | None) -> frozenset[RuleSelector]:
999
- from sarj_standards.libs.linting.policy import ( # ruff: ignore[import-outside-top-level]
1032
+ from sarj_standards.libs.linting.policy import ( # ruff: ignore[import-outside-top-level] -- load sarj_standards.libs.linting.policy only when this selected operation executes.
1000
1033
  warning_selectors,
1001
1034
  )
1002
- from sarj_standards.libs.linting.test_value import SELECTORS # ruff: ignore[import-outside-top-level]
1035
+ from sarj_standards.libs.linting.test_value import SELECTORS # ruff: ignore[import-outside-top-level] -- load sarj_standards.libs.linting.test_value only when this selected operation executes.
1003
1036
 
1004
1037
  warnings = warning_selectors()
1005
1038
  if mode is AnalysisMode.OBSERVE and selected is not None:
@@ -1020,8 +1053,11 @@ def _with_warning_severity(
1020
1053
  tool,
1021
1054
  diagnostics=tuple(
1022
1055
  replace(item, severity=Severity.WARNING)
1023
- if _selector_for_diagnostic(item) in selectors
1024
- or (tool.name == "eslint" and upstream_rules.warning_only and item.rule_id in upstream_rules.ids)
1056
+ if "required-source-policy" not in item.tags
1057
+ and (
1058
+ _selector_for_diagnostic(item) in selectors
1059
+ or (tool.name == "eslint" and upstream_rules.warning_only and item.rule_id in upstream_rules.ids)
1060
+ )
1025
1061
  else item
1026
1062
  for item in tool.diagnostics
1027
1063
  ),