code-standards 8.147.21__tar.gz → 8.151.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 (212) hide show
  1. {code_standards-8.147.21 → code_standards-8.151.0}/PKG-INFO +7 -5
  2. {code_standards-8.147.21 → code_standards-8.151.0}/README.md +2 -0
  3. {code_standards-8.147.21 → code_standards-8.151.0}/pyproject.toml +5 -5
  4. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/api.py +19 -6
  5. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/cli-reference.v1.json +2 -2
  6. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/rule-calibration-campaign.v1.json +96 -0
  7. code_standards-8.151.0/src/sarj_standards/configs/rule-inventory.v1.json +1 -0
  8. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/rule-ledger.json +26 -2
  9. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/devops.py +4 -4
  10. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/manifest.py +2 -2
  11. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/diagnostics/analysis.schema.json +2 -1
  12. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/diagnostics/models.py +45 -14
  13. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/diagnostics/serialize.py +5 -2
  14. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/diagnostics/source.py +8 -2
  15. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/action_metadata.py +6 -6
  16. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/analysis.py +82 -23
  17. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/devops_source.py +9 -9
  18. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/devops_tools.py +17 -14
  19. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/duplicate_code.py +3 -3
  20. code_standards-8.151.0/src/sarj_standards/libs/linting/execution_plan.py +59 -0
  21. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/external.py +300 -199
  22. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/prepared_devops.py +17 -7
  23. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/prepared_native.py +3 -3
  24. code_standards-8.151.0/src/sarj_standards/libs/linting/process.py +114 -0
  25. code_standards-8.151.0/src/sarj_standards/libs/linting/scheduling.py +38 -0
  26. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/unused_modules.py +3 -3
  27. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/docs.py +17 -2
  28. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/rule_changes.py +3 -0
  29. code_standards-8.151.0/src/sarj_standards/schemas/rule-catalog.v1.json +1 -0
  30. code_standards-8.147.21/src/sarj_standards/configs/rule-inventory.v1.json +0 -1
  31. code_standards-8.147.21/src/sarj_standards/libs/linting/scheduling.py +0 -41
  32. code_standards-8.147.21/src/sarj_standards/schemas/rule-catalog.v1.json +0 -1
  33. {code_standards-8.147.21 → code_standards-8.151.0}/.gitignore +0 -0
  34. {code_standards-8.147.21 → code_standards-8.151.0}/LICENSE +0 -0
  35. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/__init__.py +0 -0
  36. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/__main__.py +0 -0
  37. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/_meta.py +0 -0
  38. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/cli/__init__.py +0 -0
  39. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/cli/main.py +0 -0
  40. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/Mintfile.mobile.strict +0 -0
  41. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/action-parser/LICENSE.actions +0 -0
  42. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/action-parser/LICENSE.cronstrue +0 -0
  43. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/action-parser/LICENSE.yaml +0 -0
  44. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/action-parser/generate.mts +0 -0
  45. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/action-parser/index.mts +0 -0
  46. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/action-parser/package-lock.json +0 -0
  47. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/action-parser/package.json +0 -0
  48. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/action-parser/upstream.json +0 -0
  49. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/action-parser.cjs +0 -0
  50. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/actionlint.strict.yaml +0 -0
  51. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/basedpyright.python315-watch.json +0 -0
  52. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/basedpyright.strict.json +0 -0
  53. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/checkov.strict.yml +0 -0
  54. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/compile-eslint.mts +0 -0
  55. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/detekt.strict.yml +0 -0
  56. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/devops-verification.v1.json +0 -0
  57. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/doctor.config.json +0 -0
  58. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/eslint-compact-formatter.mts +0 -0
  59. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/eslint-required-policy.mts +0 -0
  60. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/eslint-selected-rules.mts +0 -0
  61. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/eslint.application.mjs +0 -0
  62. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/eslint.peers.json +0 -0
  63. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/eslint.strict.mjs +0 -0
  64. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/eslint.strict.ts +0 -0
  65. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/hadolint.strict.yaml +0 -0
  66. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/ktlint.strict.editorconfig +0 -0
  67. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/markdownlint.strict.yaml +0 -0
  68. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/mobile-tools.versions.json +0 -0
  69. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/mobsf.strict.yml +0 -0
  70. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/pyright.strict.json +0 -0
  71. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/ruff.application.toml +0 -0
  72. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/ruff.cast.toml +0 -0
  73. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/ruff.python315-watch.toml +0 -0
  74. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/ruff.required.toml +0 -0
  75. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/ruff.strict.toml +0 -0
  76. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/rule-level-source.mts +0 -0
  77. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/schemas/SKAFFOLD-LICENSE +0 -0
  78. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/schemas/google-build-v1-schema.json +0 -0
  79. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/schemas/google-build-v1.LICENSE +0 -0
  80. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/schemas/skaffold-v4beta7.json +0 -0
  81. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/schemas/upstream-schemas.json +0 -0
  82. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/semgrep-overrides.txt +0 -0
  83. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/shellcheck.strict.rc +0 -0
  84. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/swiftformat.strict +0 -0
  85. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/swiftlint.strict.yml +0 -0
  86. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/taplo.strict.toml +0 -0
  87. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/tflint.strict.hcl +0 -0
  88. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/tflint.version.hcl +0 -0
  89. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/tool-json.mts +0 -0
  90. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/yamllint.strict.yaml +0 -0
  91. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/configs/zizmor.strict.yml +0 -0
  92. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/__init__.py +0 -0
  93. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/__init__.py +0 -0
  94. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/age_transition.py +0 -0
  95. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/configs.py +0 -0
  96. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/doctor.py +0 -0
  97. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/exclusions.py +0 -0
  98. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/hooks.py +0 -0
  99. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/launcher.py +0 -0
  100. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/lifecycle.py +0 -0
  101. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/native_bootstrap.py +0 -0
  102. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/packagemanager.py +0 -0
  103. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/repository_baseline.py +0 -0
  104. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/retired_suppressions.py +0 -0
  105. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/scaffold.py +0 -0
  106. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/service.py +0 -0
  107. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/transaction.py +0 -0
  108. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/upgrade.py +0 -0
  109. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/adoption/uvtool.py +0 -0
  110. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/catalogs/__init__.py +0 -0
  111. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/catalogs/slack_automations.py +0 -0
  112. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/corpus/__init__.py +0 -0
  113. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/corpus/manifest.py +0 -0
  114. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/corpus/snapshot.py +0 -0
  115. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/diagnostics/__init__.py +0 -0
  116. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/diagnostics/baseline.py +0 -0
  117. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/diagnostics/initial_import.py +0 -0
  118. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/filesystem.py +0 -0
  119. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/json_boundary.py +0 -0
  120. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/__init__.py +0 -0
  121. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/_cloudbuild_autofix.py +0 -0
  122. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/autofix.py +0 -0
  123. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/chart_schemas.py +0 -0
  124. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/cloudbuild.py +0 -0
  125. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/cloudbuild_schema.py +0 -0
  126. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/complexity_baseline.py +0 -0
  127. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/devops_programs.py +0 -0
  128. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/devops_schema.py +0 -0
  129. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/embedded_shell.py +0 -0
  130. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/kubernetes_context.py +0 -0
  131. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/library_policy.py +0 -0
  132. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/mobile_tools.py +0 -0
  133. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/policy.py +0 -0
  134. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/prepared_kubernetes.py +0 -0
  135. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/python_fixes.py +0 -0
  136. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/repo_standards.py +0 -0
  137. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/runner.py +0 -0
  138. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/security_tools.py +0 -0
  139. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/shell_ast.py +0 -0
  140. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/shell_format.py +0 -0
  141. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/shell_policy.py +0 -0
  142. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/test_value.py +0 -0
  143. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/text_rule_base.py +0 -0
  144. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/text_rules/__init__.py +0 -0
  145. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/text_rules/_registry.py +0 -0
  146. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/text_rules/_slack_payload.py +0 -0
  147. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/text_rules/cloudbuild_contract.py +0 -0
  148. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/text_rules/slack_event_text_in_mrkdwn.py +0 -0
  149. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/textlint.py +0 -0
  150. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/linting/toml_literals.py +0 -0
  151. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/__init__.py +0 -0
  152. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/_values.py +0 -0
  153. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/artifacts.py +0 -0
  154. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/causality.py +0 -0
  155. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/changes.py +0 -0
  156. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/ci_artifacts.py +0 -0
  157. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/make_checks.py +0 -0
  158. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/metadata_verification.py +0 -0
  159. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/native_test_setup.py +0 -0
  160. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/process.py +0 -0
  161. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/publish.py +0 -0
  162. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/registry.py +0 -0
  163. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/release_age.py +0 -0
  164. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/release_detect.py +0 -0
  165. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/retirement.py +0 -0
  166. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/reviewed_analysis.py +0 -0
  167. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/rollout.py +0 -0
  168. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/status.py +0 -0
  169. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/tags.py +0 -0
  170. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/test_selection.py +0 -0
  171. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/typescript.py +0 -0
  172. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/verification_process.py +0 -0
  173. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/release/wheel_tests.py +0 -0
  174. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/__init__.py +0 -0
  175. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/cli_examples.py +0 -0
  176. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/cli_reference_artifact.py +0 -0
  177. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/cloudbuild_schema_projection.py +0 -0
  178. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/comment_corpus.py +0 -0
  179. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/config_generation.py +0 -0
  180. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/hooks.py +0 -0
  181. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/immutable_git.py +0 -0
  182. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/ledger.py +0 -0
  183. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/repository.py +0 -0
  184. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/ruff_freshness.py +0 -0
  185. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/rule_authoring.py +0 -0
  186. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/rule_catalog_artifact.py +0 -0
  187. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/rule_checkout.py +0 -0
  188. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/rule_dependencies.py +0 -0
  189. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/rule_examples.py +0 -0
  190. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/rule_imports.mts +0 -0
  191. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/rule_inventory_artifact.py +0 -0
  192. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/rule_level_source.py +0 -0
  193. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/rule_lifecycle.py +0 -0
  194. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/rule_maintenance.py +0 -0
  195. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/rule_registration.py +0 -0
  196. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/shell_checks.py +0 -0
  197. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/repository/third_party_catalog_artifact.py +0 -0
  198. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/rules/__init__.py +0 -0
  199. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/rules/catalog.py +0 -0
  200. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/rules/contracts.py +0 -0
  201. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/rules/corpus_runner.py +0 -0
  202. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/rules/evaluation.py +0 -0
  203. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/schema_boundary.py +0 -0
  204. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/setup/__init__.py +0 -0
  205. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/setup/repository.py +0 -0
  206. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/typed_containers.py +0 -0
  207. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/libs/yaml_boundary.py +0 -0
  208. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/py.typed +0 -0
  209. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/schemas/__init__.py +0 -0
  210. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/schemas/_paths.py +0 -0
  211. {code_standards-8.147.21 → code_standards-8.151.0}/src/sarj_standards/schemas/rule-catalog.v1.schema.json +0 -0
  212. {code_standards-8.147.21 → code_standards-8.151.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.21
3
+ Version: 8.151.0
4
4
  Summary: One deterministic quality gate for Sarj Python, TypeScript, Swift, Kotlin, shell, SQL, IaC, and repository policy.
5
5
  Project-URL: Homepage, https://code-standards.sarj.ai/
6
6
  Project-URL: Documentation, https://code-standards.sarj.ai/cli/
@@ -30,10 +30,10 @@ Requires-Dist: pyyaml==6.0.3
30
30
  Requires-Dist: referencing==0.37.0
31
31
  Requires-Dist: repo-standards==6.14.0
32
32
  Requires-Dist: ruff==0.17.2
33
- Requires-Dist: sarj-iac-lint==0.30.3
34
- Requires-Dist: sarj-python-lint==1.84.0
35
- Requires-Dist: sarj-rule-contracts==0.4.2
36
- Requires-Dist: sarj-sql-lint==0.30.1
33
+ Requires-Dist: sarj-iac-lint==0.31.0
34
+ Requires-Dist: sarj-python-lint==1.88.0
35
+ Requires-Dist: sarj-rule-contracts==0.5.0
36
+ Requires-Dist: sarj-sql-lint==0.33.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
@@ -105,6 +105,8 @@ Unused private Python test helpers require `reportUnusedFunction` set to `warnin
105
105
 
106
106
  `check --jobs 2` overlaps native analysis with the external-tool pipeline. The default is `--jobs 1`; external tools remain sequential and report ordering is deterministic.
107
107
 
108
+ Public Python suggested edits retain `expected_source_hash`, the lowercase SHA-256 digest of the exact captured source bytes, alongside `expected_text_hash` for the replaced slice. Use `to_json(report, include_fix_source_hashes=True)` or the same keyword on report, diagnostic, fix or edit `as_dict` to emit `expectedSourceHash`. The default JSON output is unchanged. Opted-in JSON requires the updated bundled `analysis.schema.json`; older strict v1 schemas reject the added field. This provenance does not apply edits or validate a current file, and SARIF output is unchanged.
109
+
108
110
  DevOps execution blocks may sequence existing commands without helper scripts. Keep interpreter source, control flow, logical chains, pipelines and substitutions in independently linted files; Python `-m` and script paths, and jq/awk `-f` files remain supported. SARJ310 is an error, including short inline programs. Cloud Build SARJ315 checks YAML and JSON for unique IDs, ordered step dependencies, script/argv exclusivity and untrusted substitutions in shell source; pass substitutions as quoted arguments to external scripts. JSON configs are discovered in operational directories or with `cloudbuild` in their filename; JSON syntax must be strict, with unique keys and finite numbers. Files named with `cloudbuild`, and Build-shaped files under a `cloudbuild` directory, use the bundled, digest-verified Google Build v1 field schema for field names, types, enums and protobuf durations/integers. The offline schema rejects output-only fields; trigger expansion, resource access and hosted admission require the deployment environment.
109
111
 
110
112
  The source gate uses pinned actionlint, shared ShellCheck, offline Zizmor, Hadolint and Skaffold v4beta7 schema validation. Every selected `action.yml`/`action.yaml` uses GitHub's pinned action parser and converter offline, including composite steps, expression syntax and available contexts, runtime requirements, step IDs and action-reference forms. This uses the core Node runtime and needs no referencing workflow, consumer npm setup or security capability. Cloud Deploy validation is a documented partial structural contract. Terraform validation and TFLint require explicit repository trust and prepared local providers; analysis never initializes or downloads them. Compose requires an exact consumer `[devops].compose_version`; its source check does not resolve environment inputs. Declare `compose_projects = [["base.yaml", "overlays/production.yaml"]]` in `[devops]` to validate custom filenames and overlays in invocation order. Selecting any member checks the whole project; declared fragments are not checked independently. Undeclared conventional filenames remain standalone projects. Missing inputs and native field errors fail coverage. Source checks use Compose's partially resolved model; full consistency requires the actual deployment environment.
@@ -65,6 +65,8 @@ Unused private Python test helpers require `reportUnusedFunction` set to `warnin
65
65
 
66
66
  `check --jobs 2` overlaps native analysis with the external-tool pipeline. The default is `--jobs 1`; external tools remain sequential and report ordering is deterministic.
67
67
 
68
+ Public Python suggested edits retain `expected_source_hash`, the lowercase SHA-256 digest of the exact captured source bytes, alongside `expected_text_hash` for the replaced slice. Use `to_json(report, include_fix_source_hashes=True)` or the same keyword on report, diagnostic, fix or edit `as_dict` to emit `expectedSourceHash`. The default JSON output is unchanged. Opted-in JSON requires the updated bundled `analysis.schema.json`; older strict v1 schemas reject the added field. This provenance does not apply edits or validate a current file, and SARIF output is unchanged.
69
+
68
70
  DevOps execution blocks may sequence existing commands without helper scripts. Keep interpreter source, control flow, logical chains, pipelines and substitutions in independently linted files; Python `-m` and script paths, and jq/awk `-f` files remain supported. SARJ310 is an error, including short inline programs. Cloud Build SARJ315 checks YAML and JSON for unique IDs, ordered step dependencies, script/argv exclusivity and untrusted substitutions in shell source; pass substitutions as quoted arguments to external scripts. JSON configs are discovered in operational directories or with `cloudbuild` in their filename; JSON syntax must be strict, with unique keys and finite numbers. Files named with `cloudbuild`, and Build-shaped files under a `cloudbuild` directory, use the bundled, digest-verified Google Build v1 field schema for field names, types, enums and protobuf durations/integers. The offline schema rejects output-only fields; trigger expansion, resource access and hosted admission require the deployment environment.
69
71
 
70
72
  The source gate uses pinned actionlint, shared ShellCheck, offline Zizmor, Hadolint and Skaffold v4beta7 schema validation. Every selected `action.yml`/`action.yaml` uses GitHub's pinned action parser and converter offline, including composite steps, expression syntax and available contexts, runtime requirements, step IDs and action-reference forms. This uses the core Node runtime and needs no referencing workflow, consumer npm setup or security capability. Cloud Deploy validation is a documented partial structural contract. Terraform validation and TFLint require explicit repository trust and prepared local providers; analysis never initializes or downloads them. Compose requires an exact consumer `[devops].compose_version`; its source check does not resolve environment inputs. Declare `compose_projects = [["base.yaml", "overlays/production.yaml"]]` in `[devops]` to validate custom filenames and overlays in invocation order. Selecting any member checks the whole project; declared fragments are not checked independently. Undeclared conventional filenames remain standalone projects. Missing inputs and native field errors fail coverage. Source checks use Compose's partially resolved model; full consistency requires the actual deployment environment.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "code-standards"
3
- version = "8.147.21"
3
+ version = "8.151.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"
@@ -17,7 +17,7 @@ classifiers = [
17
17
  "Topic :: Software Development :: Quality Assurance",
18
18
  ]
19
19
  dependencies = [
20
- "sarj-rule-contracts==0.4.2",
20
+ "sarj-rule-contracts==0.5.0",
21
21
  "pathspec==1.1.1",
22
22
  "basedpyright==1.40.2",
23
23
  "deptry==0.25.1",
@@ -31,9 +31,9 @@ dependencies = [
31
31
  "repo-standards==6.14.0",
32
32
  "ruff==0.17.2",
33
33
  "shellcheck-py==0.11.0.1; (sys_platform == 'darwin' and platform_machine == 'arm64') or (sys_platform == 'darwin' and platform_machine == 'x86_64') or (sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'win32' and platform_machine == 'AMD64')",
34
- "sarj-iac-lint==0.30.3",
35
- "sarj-python-lint==1.84.0",
36
- "sarj-sql-lint==0.30.1",
34
+ "sarj-iac-lint==0.31.0",
35
+ "sarj-python-lint==1.88.0",
36
+ "sarj-sql-lint==0.33.0",
37
37
  "typer==0.27.3",
38
38
  ]
39
39
 
@@ -56,6 +56,7 @@ from .libs.diagnostics import (
56
56
  from .libs.filesystem import is_link_like
57
57
  from .libs.linting.analysis import analyze as analyze_paths, report_from_tools
58
58
  from .libs.linting.complexity_baseline import ComplexityBaselineResolver
59
+ from .libs.linting.execution_plan import analysis_jobs
59
60
  from .libs.linting.external import UpstreamESLintRules, analyze_external
60
61
  from .libs.linting.library_policy import (
61
62
  ManifestPolicyError,
@@ -137,6 +138,17 @@ class Result:
137
138
  changes: tuple[Change, ...] = ()
138
139
  exit_code: int = 0
139
140
 
141
+ def __post_init__(self) -> None:
142
+ if type(self.status) is not Status:
143
+ msg = "result status must be a Status"
144
+ raise TypeError(msg)
145
+ if isinstance(self.exit_code, bool) or not isinstance(self.exit_code, int): # pyright: ignore[reportUnnecessaryIsInstance] -- validate untyped public constructor and dataclass replacement calls as well as typed callers.
146
+ msg = "result exit code must be an integer"
147
+ raise TypeError(msg)
148
+ if (self.status in {Status.OK, Status.CHANGED}) != (self.exit_code == 0):
149
+ msg = "result status and exit code must agree on success"
150
+ raise ValueError(msg)
151
+
140
152
  @property
141
153
  def ok(self) -> bool:
142
154
  return self.exit_code == 0
@@ -269,10 +281,9 @@ class Standards:
269
281
  ) -> AnalysisReport:
270
282
  try:
271
283
  import_context = initial_import.load(self.root, staged=staged)
284
+ analysis_jobs(jobs)
272
285
  except ValueError as exc:
273
286
  return _failed_analysis(self.root, "invalid-input", str(exc))
274
- if jobs not in {1, 2}:
275
- return _failed_analysis(self.root, "invalid-input", "analysis jobs must be 1 or 2")
276
287
  external = external or bool(upstream_rules.ids)
277
288
  try:
278
289
  normalized_trust = TrustMode(trust)
@@ -300,7 +311,7 @@ class Standards:
300
311
  try:
301
312
  selection_policy = _selection_policy(self.root, adopted, normalized_mode)
302
313
  rule_selection = _rule_selection(rules)
303
- selected = _analysis_inputs(self.root, paths, mode=normalized_mode)
314
+ selected = _analysis_inputs(self.root, paths, adopted=adopted, mode=normalized_mode)
304
315
  except (OSError, TypeError, ValueError) as exc:
305
316
  return _failed_analysis(self.root, "invalid-input", str(exc))
306
317
  try:
@@ -512,7 +523,8 @@ class Standards:
512
523
  )
513
524
  return Result(Status.FAILED, findings=(finding,), exit_code=1)
514
525
  finding = Finding("update.latest.failed", "error", output or "latest standards update failed")
515
- return Result(Status.FAILED, findings=(finding,), exit_code=completed.returncode)
526
+ status = Status.INTERRUPTED if completed.returncode == _INTERRUPTED_EXIT else Status.FAILED
527
+ return Result(status, findings=(finding,), exit_code=completed.returncode)
516
528
 
517
529
  def inspect(self) -> Inspection:
518
530
  return inspect(self.root)
@@ -823,13 +835,14 @@ def _with_coverage(report: AnalysisReport, coverage: Sequence[CoverageNotice]) -
823
835
  return AnalysisReport(report.root, completion, conclusion, report.tools, notices)
824
836
 
825
837
 
826
- def _analysis_inputs(root: Path, paths: Sequence[str] | None, *, mode: AnalysisMode = AnalysisMode.POLICY) -> list[str]:
838
+ def _analysis_inputs(
839
+ root: Path, paths: Sequence[str] | None, *, adopted: Manifest | None, mode: AnalysisMode
840
+ ) -> list[str]:
827
841
  if paths is not None:
828
842
  selected = _contained_paths(root, paths)
829
843
  return selected if mode is AnalysisMode.RAW else _with_tracked_terraform_tests(root, selected)
830
844
  if mode is AnalysisMode.RAW:
831
845
  return [str(root)]
832
- adopted = load_manifest(root)
833
846
  verify_paths = adopted.verify_paths if adopted is not None else (".",)
834
847
  return _with_tracked_terraform_tests(root, [str(root / path) for path in verify_paths])
835
848
 
@@ -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.21).",
3320
- "version": "8.147.21"
3319
+ "summary": "Adopt, check, fix, diagnose, and update sarj-ai standards (v8.151.0).",
3320
+ "version": "8.151.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
  }