code-standards 8.147.0__tar.gz → 8.150.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 (209) hide show
  1. {code_standards-8.147.0 → code_standards-8.150.0}/PKG-INFO +3 -3
  2. {code_standards-8.147.0 → code_standards-8.150.0}/pyproject.toml +3 -3
  3. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/cli-reference.v1.json +2 -2
  4. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/rule-calibration-campaign.v1.json +96 -0
  5. code_standards-8.150.0/src/sarj_standards/configs/rule-inventory.v1.json +1 -0
  6. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/rule-ledger.json +26 -2
  7. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/manifest.py +2 -2
  8. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/json_boundary.py +14 -0
  9. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/rollout.py +159 -36
  10. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/rule_changes.py +3 -0
  11. code_standards-8.150.0/src/sarj_standards/schemas/rule-catalog.v1.json +1 -0
  12. code_standards-8.147.0/src/sarj_standards/configs/rule-inventory.v1.json +0 -1
  13. code_standards-8.147.0/src/sarj_standards/schemas/rule-catalog.v1.json +0 -1
  14. {code_standards-8.147.0 → code_standards-8.150.0}/.gitignore +0 -0
  15. {code_standards-8.147.0 → code_standards-8.150.0}/LICENSE +0 -0
  16. {code_standards-8.147.0 → code_standards-8.150.0}/README.md +0 -0
  17. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/__init__.py +0 -0
  18. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/__main__.py +0 -0
  19. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/_meta.py +0 -0
  20. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/api.py +0 -0
  21. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/cli/__init__.py +0 -0
  22. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/cli/main.py +0 -0
  23. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/Mintfile.mobile.strict +0 -0
  24. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/action-parser/LICENSE.actions +0 -0
  25. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/action-parser/LICENSE.cronstrue +0 -0
  26. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/action-parser/LICENSE.yaml +0 -0
  27. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/action-parser/generate.mts +0 -0
  28. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/action-parser/index.mts +0 -0
  29. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/action-parser/package-lock.json +0 -0
  30. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/action-parser/package.json +0 -0
  31. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/action-parser/upstream.json +0 -0
  32. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/action-parser.cjs +0 -0
  33. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/actionlint.strict.yaml +0 -0
  34. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/basedpyright.python315-watch.json +0 -0
  35. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/basedpyright.strict.json +0 -0
  36. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/checkov.strict.yml +0 -0
  37. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/compile-eslint.mts +0 -0
  38. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/detekt.strict.yml +0 -0
  39. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/devops-verification.v1.json +0 -0
  40. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/doctor.config.json +0 -0
  41. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/eslint-compact-formatter.mts +0 -0
  42. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/eslint-required-policy.mts +0 -0
  43. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/eslint-selected-rules.mts +0 -0
  44. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/eslint.application.mjs +0 -0
  45. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/eslint.peers.json +0 -0
  46. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/eslint.strict.mjs +0 -0
  47. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/eslint.strict.ts +0 -0
  48. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/hadolint.strict.yaml +0 -0
  49. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/ktlint.strict.editorconfig +0 -0
  50. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/markdownlint.strict.yaml +0 -0
  51. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/mobile-tools.versions.json +0 -0
  52. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/mobsf.strict.yml +0 -0
  53. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/pyright.strict.json +0 -0
  54. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/ruff.application.toml +0 -0
  55. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/ruff.cast.toml +0 -0
  56. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/ruff.python315-watch.toml +0 -0
  57. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/ruff.required.toml +0 -0
  58. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/ruff.strict.toml +0 -0
  59. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/rule-level-source.mts +0 -0
  60. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/schemas/SKAFFOLD-LICENSE +0 -0
  61. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/schemas/google-build-v1-schema.json +0 -0
  62. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/schemas/google-build-v1.LICENSE +0 -0
  63. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/schemas/skaffold-v4beta7.json +0 -0
  64. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/schemas/upstream-schemas.json +0 -0
  65. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/semgrep-overrides.txt +0 -0
  66. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/shellcheck.strict.rc +0 -0
  67. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/swiftformat.strict +0 -0
  68. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/swiftlint.strict.yml +0 -0
  69. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/taplo.strict.toml +0 -0
  70. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/tflint.strict.hcl +0 -0
  71. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/tflint.version.hcl +0 -0
  72. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/tool-json.mts +0 -0
  73. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/yamllint.strict.yaml +0 -0
  74. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/configs/zizmor.strict.yml +0 -0
  75. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/__init__.py +0 -0
  76. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/__init__.py +0 -0
  77. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/age_transition.py +0 -0
  78. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/configs.py +0 -0
  79. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/devops.py +0 -0
  80. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/doctor.py +0 -0
  81. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/exclusions.py +0 -0
  82. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/hooks.py +0 -0
  83. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/launcher.py +0 -0
  84. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/lifecycle.py +0 -0
  85. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/native_bootstrap.py +0 -0
  86. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/packagemanager.py +0 -0
  87. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/repository_baseline.py +0 -0
  88. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/retired_suppressions.py +0 -0
  89. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/scaffold.py +0 -0
  90. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/service.py +0 -0
  91. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/transaction.py +0 -0
  92. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/upgrade.py +0 -0
  93. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/adoption/uvtool.py +0 -0
  94. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/catalogs/__init__.py +0 -0
  95. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/catalogs/slack_automations.py +0 -0
  96. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/corpus/__init__.py +0 -0
  97. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/corpus/manifest.py +0 -0
  98. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/corpus/snapshot.py +0 -0
  99. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/diagnostics/__init__.py +0 -0
  100. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/diagnostics/analysis.schema.json +0 -0
  101. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/diagnostics/baseline.py +0 -0
  102. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/diagnostics/initial_import.py +0 -0
  103. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/diagnostics/models.py +0 -0
  104. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/diagnostics/serialize.py +0 -0
  105. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/diagnostics/source.py +0 -0
  106. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/filesystem.py +0 -0
  107. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/__init__.py +0 -0
  108. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/_cloudbuild_autofix.py +0 -0
  109. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/action_metadata.py +0 -0
  110. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/analysis.py +0 -0
  111. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/autofix.py +0 -0
  112. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/chart_schemas.py +0 -0
  113. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/cloudbuild.py +0 -0
  114. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/cloudbuild_schema.py +0 -0
  115. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/complexity_baseline.py +0 -0
  116. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/devops_programs.py +0 -0
  117. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/devops_schema.py +0 -0
  118. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/devops_source.py +0 -0
  119. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/devops_tools.py +0 -0
  120. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/duplicate_code.py +0 -0
  121. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/embedded_shell.py +0 -0
  122. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/external.py +0 -0
  123. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/kubernetes_context.py +0 -0
  124. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/library_policy.py +0 -0
  125. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/mobile_tools.py +0 -0
  126. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/policy.py +0 -0
  127. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/prepared_devops.py +0 -0
  128. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/prepared_kubernetes.py +0 -0
  129. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/prepared_native.py +0 -0
  130. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/python_fixes.py +0 -0
  131. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/repo_standards.py +0 -0
  132. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/runner.py +0 -0
  133. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/scheduling.py +0 -0
  134. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/security_tools.py +0 -0
  135. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/shell_ast.py +0 -0
  136. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/shell_format.py +0 -0
  137. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/shell_policy.py +0 -0
  138. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/test_value.py +0 -0
  139. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/text_rule_base.py +0 -0
  140. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/text_rules/__init__.py +0 -0
  141. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/text_rules/_registry.py +0 -0
  142. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/text_rules/_slack_payload.py +0 -0
  143. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/text_rules/cloudbuild_contract.py +0 -0
  144. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/text_rules/slack_event_text_in_mrkdwn.py +0 -0
  145. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/textlint.py +0 -0
  146. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/toml_literals.py +0 -0
  147. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/linting/unused_modules.py +0 -0
  148. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/__init__.py +0 -0
  149. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/_values.py +0 -0
  150. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/artifacts.py +0 -0
  151. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/causality.py +0 -0
  152. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/changes.py +0 -0
  153. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/ci_artifacts.py +0 -0
  154. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/make_checks.py +0 -0
  155. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/metadata_verification.py +0 -0
  156. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/native_test_setup.py +0 -0
  157. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/process.py +0 -0
  158. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/publish.py +0 -0
  159. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/registry.py +0 -0
  160. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/release_age.py +0 -0
  161. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/release_detect.py +0 -0
  162. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/retirement.py +0 -0
  163. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/reviewed_analysis.py +0 -0
  164. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/status.py +0 -0
  165. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/tags.py +0 -0
  166. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/test_selection.py +0 -0
  167. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/typescript.py +0 -0
  168. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/verification_process.py +0 -0
  169. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/release/wheel_tests.py +0 -0
  170. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/__init__.py +0 -0
  171. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/cli_examples.py +0 -0
  172. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/cli_reference_artifact.py +0 -0
  173. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/cloudbuild_schema_projection.py +0 -0
  174. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/comment_corpus.py +0 -0
  175. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/config_generation.py +0 -0
  176. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/docs.py +0 -0
  177. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/hooks.py +0 -0
  178. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/immutable_git.py +0 -0
  179. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/ledger.py +0 -0
  180. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/repository.py +0 -0
  181. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/ruff_freshness.py +0 -0
  182. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/rule_authoring.py +0 -0
  183. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/rule_catalog_artifact.py +0 -0
  184. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/rule_checkout.py +0 -0
  185. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/rule_dependencies.py +0 -0
  186. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/rule_examples.py +0 -0
  187. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/rule_imports.mts +0 -0
  188. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/rule_inventory_artifact.py +0 -0
  189. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/rule_level_source.py +0 -0
  190. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/rule_lifecycle.py +0 -0
  191. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/rule_maintenance.py +0 -0
  192. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/rule_registration.py +0 -0
  193. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/shell_checks.py +0 -0
  194. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/repository/third_party_catalog_artifact.py +0 -0
  195. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/rules/__init__.py +0 -0
  196. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/rules/catalog.py +0 -0
  197. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/rules/contracts.py +0 -0
  198. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/rules/corpus_runner.py +0 -0
  199. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/rules/evaluation.py +0 -0
  200. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/schema_boundary.py +0 -0
  201. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/setup/__init__.py +0 -0
  202. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/setup/repository.py +0 -0
  203. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/typed_containers.py +0 -0
  204. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/libs/yaml_boundary.py +0 -0
  205. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/py.typed +0 -0
  206. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/schemas/__init__.py +0 -0
  207. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/schemas/_paths.py +0 -0
  208. {code_standards-8.147.0 → code_standards-8.150.0}/src/sarj_standards/schemas/rule-catalog.v1.schema.json +0 -0
  209. {code_standards-8.147.0 → code_standards-8.150.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.147.0
3
+ Version: 8.150.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.14.0
32
32
  Requires-Dist: ruff==0.17.2
33
33
  Requires-Dist: sarj-iac-lint==0.30.3
34
- Requires-Dist: sarj-python-lint==1.84.0
34
+ Requires-Dist: sarj-python-lint==1.85.0
35
35
  Requires-Dist: sarj-rule-contracts==0.4.2
36
- Requires-Dist: sarj-sql-lint==0.30.1
36
+ Requires-Dist: sarj-sql-lint==0.31.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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "code-standards"
3
- version = "8.147.0"
3
+ version = "8.150.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.3",
35
- "sarj-python-lint==1.84.0",
36
- "sarj-sql-lint==0.30.1",
35
+ "sarj-python-lint==1.85.0",
36
+ "sarj-sql-lint==0.31.0",
37
37
  "typer==0.27.3",
38
38
  ]
39
39
 
@@ -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.147.0).",
3320
- "version": "8.147.0"
3319
+ "summary": "Adopt, check, fix, diagnose, and update sarj-ai standards (v8.150.0).",
3320
+ "version": "8.150.0"
3321
3321
  }
@@ -2949,6 +2949,102 @@
2949
2949
  "state": "pending",
2950
2950
  "evidence": "Known Any/object/JsonValue string mappings, unchecked JSON, local returns, aliases and chained reads have paired controls. Precise maps, TypedDicts, raw normalization callbacks and unproven receivers retain their documented boundaries. The pinned pre-integration record packages/python/benchmarks/typed-python-boundaries.json covers five affected rules with 111 valid labeled cases (51 TP, 60 TN, zero inspected FP/FN) and three explicit malformed-source rejections. Its repeated cold/warm measurements retain their historical source frame; they are not fleet-recall or combined-current-engine performance claims. Private source and identifying pins remain private. Broader field calibration remains pending.",
2951
2951
  "outcome": "Ship SARJ535 at WARNING without autofix. Validate external data into named models and use precise trusted internal contracts. Preserve typed get calls and review missing-field/default behavior manually; field calibration remains pending."
2952
+ },
2953
+ {
2954
+ "task": "rule-audit/python/prefer-optional-composite",
2955
+ "family": "python",
2956
+ "ruleId": "prefer-optional-composite",
2957
+ "state": "pending",
2958
+ "evidence": "2026-10-28 bounded SQL/model review. Focused examples and regressions cover explicitly nullable field groups, annotation ownership, aliases, overlapping prefixes, and valid independent state. The shared immutable 35-file comparison against published 8.147.0 reports 71 reviewed additions, zero removals or duplicates, and six repaired false-positive controls clear across the affected owners. These aggregate observations are not per-rule precision or recall estimates. Broader field calibration remains pending.",
2959
+ "outcome": "SARJ541: Stage at WARNING without autofix. Review an optional composite without inferring joint presence from a name prefix; preserve public wire/schema contracts and independent nullability. Full campaign completion is not claimed."
2960
+ },
2961
+ {
2962
+ "task": "rule-audit/python/no-custom-control-flow-exception",
2963
+ "family": "python",
2964
+ "ruleId": "no-custom-control-flow-exception",
2965
+ "state": "pending",
2966
+ "evidence": "2026-10-28 bounded SQL/model review. Focused examples and regressions cover directly raised name-only local exceptions, stable identities, payload-bearing exceptions, validator protocols, and exact suppressions. The shared immutable 35-file comparison against published 8.147.0 reports 71 reviewed additions, zero removals or duplicates, and six repaired false-positive controls clear across the affected owners. These aggregate observations are not per-rule precision or recall estimates. Broader field calibration remains pending.",
2967
+ "outcome": "SARJ542: Stage at WARNING without autofix. Consider typed outcomes for expected domain failures while preserving framework validation, cancellation, unwinding, and genuine exceptional protocols. Full campaign completion is not claimed."
2968
+ },
2969
+ {
2970
+ "task": "rule-audit/python/no-redundant-sql-alias",
2971
+ "family": "python",
2972
+ "ruleId": "no-redundant-sql-alias",
2973
+ "state": "pending",
2974
+ "evidence": "2026-10-28 bounded SQL/model review. Focused examples and regressions cover direct same-name SQL aliases, quoted identifiers, recoverable Psycopg SQL, namespace mutations, and exact suppressions. The shared immutable 35-file comparison against published 8.147.0 reports 71 reviewed additions, zero removals or duplicates, and six repaired false-positive controls clear across the affected owners. These aggregate observations are not per-rule precision or recall estimates. Broader field calibration remains pending.",
2975
+ "outcome": "SARJ543: Stage at WARNING without autofix. Review only proven redundant projection or table aliases; preserve different output names, unresolved expressions, and dynamic SQL identities. Full campaign completion is not claimed."
2976
+ },
2977
+ {
2978
+ "task": "rule-audit/python/no-recording-store",
2979
+ "family": "python",
2980
+ "ruleId": "no-recording-store",
2981
+ "state": "pending",
2982
+ "evidence": "2026-10-28 bounded SQL/model review. Focused examples and regressions cover source-visible get/upsert contracts, recording implementations, value construction, delegated spies, unknown effects, and exact suppressions. The shared immutable 35-file comparison against published 8.147.0 reports 71 reviewed additions, zero removals or duplicates, and six repaired false-positive controls clear across the affected owners. These aggregate observations are not per-rule precision or recall estimates. Broader field calibration remains pending.",
2983
+ "outcome": "SARJ544: Stage at WARNING without autofix. Prefer isolated PostgreSQL fixtures for recording-only persistence doubles; preserve real delegation, SQL-backed stores, and unsupported contracts. Full campaign completion is not claimed."
2984
+ },
2985
+ {
2986
+ "task": "rule-audit/python/prefer-application-model-joins",
2987
+ "family": "python",
2988
+ "ruleId": "prefer-application-model-joins",
2989
+ "state": "pending",
2990
+ "evidence": "2026-10-28 bounded SQL/model review. Focused examples and regressions cover distinct concrete relations, same-relation joins, query ownership, unresolved fragments, lock-sensitive shapes, and exact suppressions. The shared immutable 35-file comparison against published 8.147.0 reports 71 reviewed additions, zero removals or duplicates, and six repaired false-positive controls clear across the affected owners. These aggregate observations are not per-rule precision or recall estimates. Broader field calibration remains pending.",
2991
+ "outcome": "SARJ545: Stage at WARNING without autofix. Treat distinct-relation joins as architecture review candidates; preserve atomicity, consistency, lock scope, and justified database joins. Full campaign completion is not claimed."
2992
+ },
2993
+ {
2994
+ "task": "rule-audit/python/store-mutation-command-fanout",
2995
+ "family": "python",
2996
+ "ruleId": "store-mutation-command-fanout",
2997
+ "state": "pending",
2998
+ "evidence": "2026-10-28 bounded SQL/model review. Focused examples and regressions cover model write commands beside mutation-method fanout, delegation, distinct contracts, unsupported method shapes, and exact suppressions. The shared immutable 35-file comparison against published 8.147.0 reports 71 reviewed additions, zero removals or duplicates, and six repaired false-positive controls clear across the affected owners. These aggregate observations are not per-rule precision or recall estimates. Broader field calibration remains pending.",
2999
+ "outcome": "SARJ546: Stage at WARNING without autofix. Review consolidation around the existing model write command while preserving update-only, partial-update, concurrency, and distinct command semantics. Full campaign completion is not claimed."
3000
+ },
3001
+ {
3002
+ "task": "rule-audit/python/store-insert-requires-explicit-conflict-policy",
3003
+ "family": "python",
3004
+ "ruleId": "store-insert-requires-explicit-conflict-policy",
3005
+ "state": "pending",
3006
+ "evidence": "2026-10-28 bounded SQL/model review. Focused examples and regressions cover store INSERTs without SQL ON CONFLICT, supported query wrappers, insert-select shapes, explicit policies, and exact suppressions. The shared immutable 35-file comparison against published 8.147.0 reports 71 reviewed additions, zero removals or duplicates, and six repaired false-positive controls clear across the affected owners. These aggregate observations are not per-rule precision or recall estimates. Broader field calibration remains pending.",
3007
+ "outcome": "SARJ547: Stage at WARNING without autofix. Require review of missing SQL ON CONFLICT regardless of the Python method name; choose conflict targets and duplicate behavior explicitly. Full campaign completion is not claimed."
3008
+ },
3009
+ {
3010
+ "task": "rule-audit/python/no-discarded-tagged-outcome",
3011
+ "family": "python",
3012
+ "ruleId": "no-discarded-tagged-outcome",
3013
+ "state": "pending",
3014
+ "evidence": "2026-10-28 bounded SQL/model review. Focused examples and regressions cover discarded module-function outcomes, string-tagged record proofs, prepared imports, rebinding, class shadows, async calls, and consumed values. The shared immutable 35-file comparison against published 8.147.0 reports 71 reviewed additions, zero removals or duplicates, and six repaired false-positive controls clear across the affected owners. These aggregate observations are not per-rule precision or recall estimates. Broader field calibration remains pending.",
3015
+ "outcome": "SARJ548: Stage at WARNING without autofix. Use or forward source-proven tagged outcomes; consuming a value does not prove exhaustive handling. Preserve unknown methods, generic contracts, and unresolved providers. Full campaign completion is not claimed."
3016
+ },
3017
+ {
3018
+ "task": "rule-audit/sql/combine-alter-table",
3019
+ "family": "sql",
3020
+ "ruleId": "combine-alter-table",
3021
+ "state": "pending",
3022
+ "evidence": "2026-10-28 bounded SQL/model review. Focused examples and regressions cover adjacent compatible ALTER actions, exact relation identity, transaction/section boundaries, modifiers, dependencies, and exact suppressions. The shared immutable 35-file comparison against published 8.147.0 reports 71 reviewed additions, zero removals or duplicates, and six repaired false-positive controls clear across the affected owners. These aggregate observations are not per-rule precision or recall estimates. Broader field calibration remains pending.",
3023
+ "outcome": "SARJ123: Retain the explicitly approved ERROR policy without autofix. Combine only proven compatible adjacent ALTER TABLE statements; preserve command, migration, relation, and dependency boundaries. Full campaign completion is not claimed."
3024
+ },
3025
+ {
3026
+ "task": "rule-audit/sql/no-null-comparison",
3027
+ "family": "sql",
3028
+ "ruleId": "no-null-comparison",
3029
+ "state": "pending",
3030
+ "evidence": "2026-10-28 bounded SQL/model review. Focused examples and regressions cover ordinary NULL comparisons, NULL-bearing scalar NOT IN lists, valid row cases, parser boundaries, and exact suppressions. The shared immutable 35-file comparison against published 8.147.0 reports 71 reviewed additions, zero removals or duplicates, and six repaired false-positive controls clear across the affected owners. These aggregate observations are not per-rule precision or recall estimates. Broader field calibration remains pending.",
3031
+ "outcome": "SARJ124: Stage at WARNING without autofix. Review explicit NULL intent while preserving PostgreSQL three-valued logic, row semantics, and unsupported expression boundaries. Full campaign completion is not claimed."
3032
+ },
3033
+ {
3034
+ "task": "rule-audit/sql/invalid-concurrent-ddl",
3035
+ "family": "sql",
3036
+ "ruleId": "invalid-concurrent-ddl",
3037
+ "state": "pending",
3038
+ "evidence": "2026-10-28 bounded SQL/model review. Focused examples and regressions cover complete concurrent DDL forms, explicit transaction contexts, multiple-index restrictions, valid options, and exact suppressions. The shared immutable 35-file comparison against published 8.147.0 reports 71 reviewed additions, zero removals or duplicates, and six repaired false-positive controls clear across the affected owners. These aggregate observations are not per-rule precision or recall estimates. Broader field calibration remains pending.",
3039
+ "outcome": "SARJ125: Stage at WARNING without autofix. Report source-proven invalid concurrent DDL contexts/options; preserve valid PostgreSQL forms and unknown caller or migration-runner contexts. Full campaign completion is not claimed."
3040
+ },
3041
+ {
3042
+ "task": "rule-audit/sql/invalid-postgres-ddl",
3043
+ "family": "sql",
3044
+ "ruleId": "invalid-postgres-ddl",
3045
+ "state": "pending",
3046
+ "evidence": "2026-10-28 bounded SQL/model review. Focused examples and regressions cover known invalid PostgreSQL index/constraint combinations, valid neighboring forms, unsupported syntax, and exact suppressions. The shared immutable 35-file comparison against published 8.147.0 reports 71 reviewed additions, zero removals or duplicates, and six repaired false-positive controls clear across the affected owners. These aggregate observations are not per-rule precision or recall estimates. Broader field calibration remains pending.",
3047
+ "outcome": "SARJ126: Stage at WARNING without autofix. Review only supported invalid PostgreSQL forms; preserve valid index/constraint options and avoid inventing an automatic schema rewrite. Full campaign completion is not claimed."
2952
3048
  }
2953
3049
  ]
2954
3050
  }
@@ -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":"SARJ540","family":"python","id":"async-executor-shutdown","source":"packages/python/src/sarj_python_lint/rules/async_executor_shutdown.py","test":"packages/python/tests/rules/test_async_executor_shutdown.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":"SARJ537","family":"python","id":"async-subprocess-cancellation-cleanup","source":"packages/python/src/sarj_python_lint/rules/async_subprocess_cancellation_cleanup.py","test":"packages/python/tests/rules/test_async_subprocess_cancellation_cleanup.py"},{"code":"SARJ536","family":"python","id":"cancel-owned-task-without-join","source":"packages/python/src/sarj_python_lint/rules/cancel_owned_task_without_join.py","test":"packages/python/tests/rules/test_cancel_owned_task_without_join.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":"SARJ538","family":"python","id":"failed-probe-zero-threshold","source":"packages/python/src/sarj_python_lint/rules/failed_probe_zero_threshold.py","test":"packages/python/tests/rules/test_failed_probe_zero_threshold.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":"SARJ539","family":"python","id":"nan-hidden-by-builtin-min","source":"packages/python/src/sarj_python_lint/rules/nan_hidden_by_builtin_min.py","test":"packages/python/tests/rules/test_nan_hidden_by_builtin_min.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":"SARJ542","family":"python","id":"no-custom-control-flow-exception","source":"packages/python/src/sarj_python_lint/rules/no_custom_control_flow_exception.py","test":"packages/python/tests/rules/test_no_custom_control_flow_exception.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":"SARJ548","family":"python","id":"no-discarded-tagged-outcome","source":"packages/python/src/sarj_python_lint/rules/no_discarded_tagged_outcome.py","test":"packages/python/tests/rules/test_no_discarded_tagged_outcome.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":"SARJ544","family":"python","id":"no-recording-store","source":"packages/python/src/sarj_python_lint/rules/no_recording_store.py","test":"packages/python/tests/rules/test_no_recording_store.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":"SARJ543","family":"python","id":"no-redundant-sql-alias","source":"packages/python/src/sarj_python_lint/rules/no_redundant_sql_alias.py","test":"packages/python/tests/rules/test_no_redundant_sql_alias.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":"SARJ545","family":"python","id":"prefer-application-model-joins","source":"packages/python/src/sarj_python_lint/rules/prefer_application_model_joins.py","test":"packages/python/tests/rules/test_prefer_application_model_joins.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":"SARJ541","family":"python","id":"prefer-optional-composite","source":"packages/python/src/sarj_python_lint/rules/prefer_optional_composite.py","test":"packages/python/tests/rules/test_prefer_optional_composite.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":"SARJ534","family":"python","id":"prefer-runtime-validation","source":"packages/python/src/sarj_python_lint/rules/prefer_runtime_validation.py","test":"packages/python/tests/rules/test_prefer_runtime_validation.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":"SARJ533","family":"python","id":"prefer-typed-cli","source":"packages/python/src/sarj_python_lint/rules/prefer_typed_cli.py","test":"packages/python/tests/rules/test_prefer_typed_cli.py"},{"code":"SARJ535","family":"python","id":"prefer-typed-mapping-get","source":"packages/python/src/sarj_python_lint/rules/prefer_typed_mapping_get.py","test":"packages/python/tests/rules/test_prefer_typed_mapping_get.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":"SARJ547","family":"python","id":"store-insert-requires-explicit-conflict-policy","source":"packages/python/src/sarj_python_lint/rules/store_insert_requires_explicit_conflict_policy.py","test":"packages/python/tests/rules/test_store_insert_requires_explicit_conflict_policy.py"},{"code":"SARJ546","family":"python","id":"store-mutation-command-fanout","source":"packages/python/src/sarj_python_lint/rules/store_mutation_command_fanout.py","test":"packages/python/tests/rules/test_store_mutation_command_fanout.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":"SARJ123","family":"sql","id":"combine-alter-table","source":"packages/sql/src/sarj_sql_lint/rules/combine_alter_table.py","test":"packages/sql/tests/rules/test_combine_alter_table.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":"SARJ125","family":"sql","id":"invalid-concurrent-ddl","source":"packages/sql/src/sarj_sql_lint/rules/invalid_concurrent_ddl.py","test":"packages/sql/tests/rules/test_invalid_concurrent_ddl.py"},{"code":"SARJ126","family":"sql","id":"invalid-postgres-ddl","source":"packages/sql/src/sarj_sql_lint/rules/invalid_postgres_ddl.py","test":"packages/sql/tests/rules/test_invalid_postgres_ddl.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":"SARJ121","family":"sql","id":"new-table-inline-constraints","source":"packages/sql/src/sarj_sql_lint/rules/new_table_inline_constraints.py","test":"packages/sql/tests/rules/test_new_table_inline_constraints.py"},{"code":"SARJ122","family":"sql","id":"no-analytical-queries-in-transactional-db","source":"packages/sql/src/sarj_sql_lint/rules/no_analytical_queries_in_transactional_db.py","test":"packages/sql/tests/rules/test_no_analytical_queries_in_transactional_db.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":"SARJ124","family":"sql","id":"no-null-comparison","source":"packages/sql/src/sarj_sql_lint/rules/no_null_comparison.py","test":"packages/sql/tests/rules/test_no_null_comparison.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":"SARJ316","family":"text","id":"slack-event-text-in-mrkdwn","source":"packages/standards/src/sarj_standards/libs/linting/text_rules/slack_event_text_in_mrkdwn.py","test":"packages/standards/tests/text_rules/test_slack_event_text_in_mrkdwn.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}
@@ -62,9 +62,11 @@
62
62
  "no-copied-inherited-docstring",
63
63
  "no-cors-wildcard-with-credentials",
64
64
  "no-create-verb-in-post-path",
65
+ "no-custom-control-flow-exception",
65
66
  "no-database-programmability",
66
67
  "no-defaulted-environment-setting",
67
68
  "no-delete-statement",
69
+ "no-discarded-tagged-outcome",
68
70
  "no-discarded-validation-result",
69
71
  "no-docstring-type-restatement",
70
72
  "no-dual-shape-model-field-reader",
@@ -105,8 +107,10 @@
105
107
  "no-random-uuid-in-sql",
106
108
  "no-raw-connection-in-tests",
107
109
  "no-raw-source-text-test-oracle",
110
+ "no-recording-store",
108
111
  "no-redundant-local-alias",
109
112
  "no-redundant-module-alias-exports",
113
+ "no-redundant-sql-alias",
110
114
  "no-repeated-structured-string-literal",
111
115
  "no-repeated-test-body",
112
116
  "no-repeated-unseeded-stdlib-random-in-test",
@@ -134,6 +138,7 @@
134
138
  "no-work-verb-get-route",
135
139
  "opaque-parametrize-case-needs-id",
136
140
  "over-mocked-test",
141
+ "prefer-application-model-joins",
137
142
  "prefer-autospec-for-callable-mock",
138
143
  "prefer-bulk-upsert",
139
144
  "prefer-class-row",
@@ -157,6 +162,7 @@
157
162
  "prefer-native-string-check",
158
163
  "prefer-nominal-id-types",
159
164
  "prefer-non-nullable-collection",
165
+ "prefer-optional-composite",
160
166
  "prefer-or-pattern",
161
167
  "prefer-precise-object-contract",
162
168
  "prefer-psycopg-executemany",
@@ -210,6 +216,8 @@
210
216
  "stepdown",
211
217
  "store-field-update-reuses-upsert",
212
218
  "store-get-delegates-to-bulk-read",
219
+ "store-insert-requires-explicit-conflict-policy",
220
+ "store-mutation-command-fanout",
213
221
  "subprocess-kill-without-reap",
214
222
  "test-without-explicit-oracle",
215
223
  "timestamp-order-requires-tiebreaker",
@@ -217,12 +225,15 @@
217
225
  "unused-test-factory-option"
218
226
  ],
219
227
  "sql": [
228
+ "combine-alter-table",
220
229
  "enforce-timestamptz",
221
230
  "excess-migration-index-requires-justification",
222
231
  "existing-table-check-or-foreign-key-requires-not-valid",
223
232
  "idempotent-ddl",
224
233
  "index-concurrently",
225
234
  "insert-requires-replay-policy",
235
+ "invalid-concurrent-ddl",
236
+ "invalid-postgres-ddl",
226
237
  "mixed-migration-phases",
227
238
  "new-table-inline-constraints",
228
239
  "no-analytical-queries-in-transactional-db",
@@ -232,6 +243,7 @@
232
243
  "no-duplicate-index",
233
244
  "no-long-migration-narration",
234
245
  "no-migration-comment-cruft",
246
+ "no-null-comparison",
235
247
  "no-offset-pagination",
236
248
  "no-pg-enum",
237
249
  "prefer-jsonb",
@@ -598,7 +610,15 @@
598
610
  "SARJ537",
599
611
  "SARJ538",
600
612
  "SARJ539",
601
- "SARJ540"
613
+ "SARJ540",
614
+ "SARJ541",
615
+ "SARJ542",
616
+ "SARJ543",
617
+ "SARJ544",
618
+ "SARJ545",
619
+ "SARJ546",
620
+ "SARJ547",
621
+ "SARJ548"
602
622
  ],
603
623
  "sql": [
604
624
  "SARJ101",
@@ -622,7 +642,11 @@
622
642
  "SARJ119",
623
643
  "SARJ120",
624
644
  "SARJ121",
625
- "SARJ122"
645
+ "SARJ122",
646
+ "SARJ123",
647
+ "SARJ124",
648
+ "SARJ125",
649
+ "SARJ126"
626
650
  ],
627
651
  "iac": [
628
652
  "SARJ201",
@@ -57,8 +57,8 @@ _PYTHON_LINT: Final = "sarj-python-lint"
57
57
  SIBLING_PACKAGES: Final = (_PYTHON_LINT, "sarj-sql-lint", "sarj-iac-lint")
58
58
  REPO_STANDARDS_VERSION: Final = "6.14.0"
59
59
  # Actions can receive delivery fixes independently of the consumer topology policy.
60
- REPO_STANDARDS_ACTION_VERSION: Final = "6.13.0"
61
- REPO_STANDARDS_REVISION: Final = "c61146c7137c764ac1371a99508771fc255a1767"
60
+ REPO_STANDARDS_ACTION_VERSION: Final = "6.14.0"
61
+ REPO_STANDARDS_REVISION: Final = "a71263817fa4ce54cddf096e9d47d2643e0a1266"
62
62
 
63
63
 
64
64
  def adopted_version() -> str: