code-standards 8.142.3__tar.gz → 8.147.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 (208) hide show
  1. {code_standards-8.142.3 → code_standards-8.147.0}/PKG-INFO +5 -3
  2. {code_standards-8.142.3 → code_standards-8.147.0}/README.md +2 -0
  3. {code_standards-8.142.3 → code_standards-8.147.0}/pyproject.toml +3 -3
  4. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/__main__.py +2 -1
  5. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/api.py +63 -13
  6. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/cli/main.py +4 -1
  7. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/cli-reference.v1.json +2 -2
  8. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/rule-calibration-campaign.v1.json +29 -5
  9. code_standards-8.147.0/src/sarj_standards/configs/rule-inventory.v1.json +1 -0
  10. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/rule-ledger.json +6 -0
  11. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/manifest.py +1 -1
  12. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/repository_baseline.py +5 -2
  13. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/scaffold.py +6 -1
  14. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/diagnostics/baseline.py +33 -1
  15. code_standards-8.147.0/src/sarj_standards/libs/diagnostics/initial_import.py +142 -0
  16. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/text_rules/_slack_payload.py +7 -4
  17. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/make_checks.py +5 -1
  18. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/test_selection.py +7 -4
  19. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/cloudbuild_schema_projection.py +11 -8
  20. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/docs.py +11 -0
  21. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/hooks.py +4 -1
  22. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/rule_changes.py +4 -0
  23. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/schemas/rule-catalog.v1.json +1 -1
  24. code_standards-8.142.3/src/sarj_standards/configs/rule-inventory.v1.json +0 -1
  25. {code_standards-8.142.3 → code_standards-8.147.0}/.gitignore +0 -0
  26. {code_standards-8.142.3 → code_standards-8.147.0}/LICENSE +0 -0
  27. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/__init__.py +0 -0
  28. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/_meta.py +0 -0
  29. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/cli/__init__.py +0 -0
  30. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/Mintfile.mobile.strict +0 -0
  31. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/action-parser/LICENSE.actions +0 -0
  32. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/action-parser/LICENSE.cronstrue +0 -0
  33. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/action-parser/LICENSE.yaml +0 -0
  34. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/action-parser/generate.mts +0 -0
  35. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/action-parser/index.mts +0 -0
  36. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/action-parser/package-lock.json +0 -0
  37. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/action-parser/package.json +0 -0
  38. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/action-parser/upstream.json +0 -0
  39. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/action-parser.cjs +0 -0
  40. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/actionlint.strict.yaml +0 -0
  41. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/basedpyright.python315-watch.json +0 -0
  42. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/basedpyright.strict.json +0 -0
  43. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/checkov.strict.yml +0 -0
  44. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/compile-eslint.mts +0 -0
  45. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/detekt.strict.yml +0 -0
  46. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/devops-verification.v1.json +0 -0
  47. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/doctor.config.json +0 -0
  48. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/eslint-compact-formatter.mts +0 -0
  49. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/eslint-required-policy.mts +0 -0
  50. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/eslint-selected-rules.mts +0 -0
  51. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/eslint.application.mjs +0 -0
  52. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/eslint.peers.json +0 -0
  53. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/eslint.strict.mjs +0 -0
  54. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/eslint.strict.ts +0 -0
  55. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/hadolint.strict.yaml +0 -0
  56. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/ktlint.strict.editorconfig +0 -0
  57. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/markdownlint.strict.yaml +0 -0
  58. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/mobile-tools.versions.json +0 -0
  59. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/mobsf.strict.yml +0 -0
  60. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/pyright.strict.json +0 -0
  61. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/ruff.application.toml +0 -0
  62. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/ruff.cast.toml +0 -0
  63. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/ruff.python315-watch.toml +0 -0
  64. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/ruff.required.toml +0 -0
  65. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/ruff.strict.toml +0 -0
  66. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/rule-level-source.mts +0 -0
  67. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/schemas/SKAFFOLD-LICENSE +0 -0
  68. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/schemas/google-build-v1-schema.json +0 -0
  69. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/schemas/google-build-v1.LICENSE +0 -0
  70. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/schemas/skaffold-v4beta7.json +0 -0
  71. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/schemas/upstream-schemas.json +0 -0
  72. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/semgrep-overrides.txt +0 -0
  73. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/shellcheck.strict.rc +0 -0
  74. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/swiftformat.strict +0 -0
  75. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/swiftlint.strict.yml +0 -0
  76. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/taplo.strict.toml +0 -0
  77. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/tflint.strict.hcl +0 -0
  78. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/tflint.version.hcl +0 -0
  79. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/tool-json.mts +0 -0
  80. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/yamllint.strict.yaml +0 -0
  81. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/configs/zizmor.strict.yml +0 -0
  82. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/__init__.py +0 -0
  83. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/__init__.py +0 -0
  84. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/age_transition.py +0 -0
  85. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/configs.py +0 -0
  86. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/devops.py +0 -0
  87. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/doctor.py +0 -0
  88. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/exclusions.py +0 -0
  89. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/hooks.py +0 -0
  90. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/launcher.py +0 -0
  91. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/lifecycle.py +0 -0
  92. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/native_bootstrap.py +0 -0
  93. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/packagemanager.py +0 -0
  94. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/retired_suppressions.py +0 -0
  95. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/service.py +0 -0
  96. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/transaction.py +0 -0
  97. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/upgrade.py +0 -0
  98. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/adoption/uvtool.py +0 -0
  99. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/catalogs/__init__.py +0 -0
  100. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/catalogs/slack_automations.py +0 -0
  101. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/corpus/__init__.py +0 -0
  102. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/corpus/manifest.py +0 -0
  103. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/corpus/snapshot.py +0 -0
  104. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/diagnostics/__init__.py +0 -0
  105. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/diagnostics/analysis.schema.json +0 -0
  106. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/diagnostics/models.py +0 -0
  107. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/diagnostics/serialize.py +0 -0
  108. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/diagnostics/source.py +0 -0
  109. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/filesystem.py +0 -0
  110. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/json_boundary.py +0 -0
  111. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/__init__.py +0 -0
  112. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/_cloudbuild_autofix.py +0 -0
  113. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/action_metadata.py +0 -0
  114. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/analysis.py +0 -0
  115. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/autofix.py +0 -0
  116. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/chart_schemas.py +0 -0
  117. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/cloudbuild.py +0 -0
  118. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/cloudbuild_schema.py +0 -0
  119. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/complexity_baseline.py +0 -0
  120. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/devops_programs.py +0 -0
  121. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/devops_schema.py +0 -0
  122. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/devops_source.py +0 -0
  123. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/devops_tools.py +0 -0
  124. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/duplicate_code.py +0 -0
  125. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/embedded_shell.py +0 -0
  126. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/external.py +0 -0
  127. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/kubernetes_context.py +0 -0
  128. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/library_policy.py +0 -0
  129. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/mobile_tools.py +0 -0
  130. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/policy.py +0 -0
  131. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/prepared_devops.py +0 -0
  132. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/prepared_kubernetes.py +0 -0
  133. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/prepared_native.py +0 -0
  134. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/python_fixes.py +0 -0
  135. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/repo_standards.py +0 -0
  136. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/runner.py +0 -0
  137. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/scheduling.py +0 -0
  138. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/security_tools.py +0 -0
  139. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/shell_ast.py +0 -0
  140. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/shell_format.py +0 -0
  141. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/shell_policy.py +0 -0
  142. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/test_value.py +0 -0
  143. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/text_rule_base.py +0 -0
  144. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/text_rules/__init__.py +0 -0
  145. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/text_rules/_registry.py +0 -0
  146. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/text_rules/cloudbuild_contract.py +0 -0
  147. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/text_rules/slack_event_text_in_mrkdwn.py +0 -0
  148. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/textlint.py +0 -0
  149. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/toml_literals.py +0 -0
  150. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/linting/unused_modules.py +0 -0
  151. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/__init__.py +0 -0
  152. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/_values.py +0 -0
  153. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/artifacts.py +0 -0
  154. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/causality.py +0 -0
  155. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/changes.py +0 -0
  156. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/ci_artifacts.py +0 -0
  157. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/metadata_verification.py +0 -0
  158. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/native_test_setup.py +0 -0
  159. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/process.py +0 -0
  160. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/publish.py +0 -0
  161. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/registry.py +0 -0
  162. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/release_age.py +0 -0
  163. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/release_detect.py +0 -0
  164. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/retirement.py +0 -0
  165. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/reviewed_analysis.py +0 -0
  166. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/rollout.py +0 -0
  167. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/status.py +0 -0
  168. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/tags.py +0 -0
  169. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/typescript.py +0 -0
  170. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/verification_process.py +0 -0
  171. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/release/wheel_tests.py +0 -0
  172. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/__init__.py +0 -0
  173. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/cli_examples.py +0 -0
  174. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/cli_reference_artifact.py +0 -0
  175. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/comment_corpus.py +0 -0
  176. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/config_generation.py +0 -0
  177. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/immutable_git.py +0 -0
  178. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/ledger.py +0 -0
  179. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/repository.py +0 -0
  180. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/ruff_freshness.py +0 -0
  181. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/rule_authoring.py +0 -0
  182. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/rule_catalog_artifact.py +0 -0
  183. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/rule_checkout.py +0 -0
  184. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/rule_dependencies.py +0 -0
  185. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/rule_examples.py +0 -0
  186. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/rule_imports.mts +0 -0
  187. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/rule_inventory_artifact.py +0 -0
  188. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/rule_level_source.py +0 -0
  189. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/rule_lifecycle.py +0 -0
  190. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/rule_maintenance.py +0 -0
  191. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/rule_registration.py +0 -0
  192. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/shell_checks.py +0 -0
  193. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/repository/third_party_catalog_artifact.py +0 -0
  194. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/rules/__init__.py +0 -0
  195. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/rules/catalog.py +0 -0
  196. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/rules/contracts.py +0 -0
  197. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/rules/corpus_runner.py +0 -0
  198. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/rules/evaluation.py +0 -0
  199. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/schema_boundary.py +0 -0
  200. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/setup/__init__.py +0 -0
  201. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/setup/repository.py +0 -0
  202. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/typed_containers.py +0 -0
  203. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/libs/yaml_boundary.py +0 -0
  204. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/py.typed +0 -0
  205. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/schemas/__init__.py +0 -0
  206. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/schemas/_paths.py +0 -0
  207. {code_standards-8.142.3 → code_standards-8.147.0}/src/sarj_standards/schemas/rule-catalog.v1.schema.json +0 -0
  208. {code_standards-8.142.3 → code_standards-8.147.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.142.3
3
+ Version: 8.147.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/
@@ -28,10 +28,10 @@ Requires-Dist: pre-commit==4.7.0
28
28
  Requires-Dist: pydantic==2.14.1
29
29
  Requires-Dist: pyyaml==6.0.3
30
30
  Requires-Dist: referencing==0.37.0
31
- Requires-Dist: repo-standards==6.13.0
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.83.1
34
+ Requires-Dist: sarj-python-lint==1.84.0
35
35
  Requires-Dist: sarj-rule-contracts==0.4.2
36
36
  Requires-Dist: sarj-sql-lint==0.30.1
37
37
  Requires-Dist: shellcheck-py==0.11.0.1; (sys_platform == 'darwin' and platform_machine == 'arm64') or (sys_platform == 'darwin' and platform_machine == 'x86_64') or (sys_platform == 'linux' and platform_machine == 'x86_64') or (sys_platform == 'win32' and platform_machine == 'AMD64')
@@ -67,6 +67,8 @@ New ESLint setups use `eslint.config.ts` and the compiler-checked `eslint.strict
67
67
 
68
68
  Use repeatable `check --rule ENGINE:ID` selectors to select native rules, ESLint rules, or managed security audits. Exclusions, baselines, and severities still apply; Ruff selectors are not supported. Native linters and ESLint execute only selected rules. ESLint retains configured parsers, options, severities, and suppression directives.
69
69
 
70
+ For a history-free initial import, set `SARJ_STANDARDS_INITIAL_IMPORT_SOURCE` only on the initial commit process to the full lowercase object ID of an available source commit with exactly one available parent. HEAD must be an unborn branch; the entire staged tree must equal that commit, tracked worktree files must match the index without hidden index flags, and nonignored files must be staged. Native staged checks compare the source commit with its parent, preserving the usual changed-line failures for findings introduced in that commit while allowing inherited diagnostic budgets. Validation runs before and after analysis; all analyzers and baseline limits still apply. The caller must qualify the source commit separately. Git replacement objects and lazy fetching are disabled; explicitly supplied temporary object alternates may provide the source history without copying it into the new repository. Remove the input and alternates before subsequent commits, pushes, and CI. Invalid or changed import context fails analysis, including clean reports; ordinary checks without this input retain their existing behavior.
71
+
70
72
  Selected ESLint checks apply live inline suppressions and validate selected bulk suppression counts. The complete lint gate owns unused inline-directive and inline-configuration checks: a partial run cannot establish whether an unselected rule's directive is needed.
71
73
 
72
74
  The complete Python and JavaScript/TypeScript source gate requires named, line-local exceptions with concrete reasons. SARJ523 rejects blanket Python waivers, scoped Ruff file/range disables and weakened Pyright source settings; SARJ419 also rejects missing explanations. Bare sarj-noqa markers cannot waive Python, SQL or IaC findings. Required Ruff blanket-ignore checks and an independent ESLint suppression-policy pass remain active despite source disables, consumer rule configuration, rule exclusions and diagnostic baselines. The ESLint pass bans file/range disables, ts-ignore and ts-nocheck while retaining described local ts-expect-error exceptions. Generated-source headers cannot authorize their own waiver; explicit whole-path exclusions retain that boundary. A reason is not proof that an exception is justified. Native parse/read/size failures make checks incomplete. Explicit tool delegation, partial and own-CI options retain their declared scope and coverage notices.
@@ -27,6 +27,8 @@ New ESLint setups use `eslint.config.ts` and the compiler-checked `eslint.strict
27
27
 
28
28
  Use repeatable `check --rule ENGINE:ID` selectors to select native rules, ESLint rules, or managed security audits. Exclusions, baselines, and severities still apply; Ruff selectors are not supported. Native linters and ESLint execute only selected rules. ESLint retains configured parsers, options, severities, and suppression directives.
29
29
 
30
+ For a history-free initial import, set `SARJ_STANDARDS_INITIAL_IMPORT_SOURCE` only on the initial commit process to the full lowercase object ID of an available source commit with exactly one available parent. HEAD must be an unborn branch; the entire staged tree must equal that commit, tracked worktree files must match the index without hidden index flags, and nonignored files must be staged. Native staged checks compare the source commit with its parent, preserving the usual changed-line failures for findings introduced in that commit while allowing inherited diagnostic budgets. Validation runs before and after analysis; all analyzers and baseline limits still apply. The caller must qualify the source commit separately. Git replacement objects and lazy fetching are disabled; explicitly supplied temporary object alternates may provide the source history without copying it into the new repository. Remove the input and alternates before subsequent commits, pushes, and CI. Invalid or changed import context fails analysis, including clean reports; ordinary checks without this input retain their existing behavior.
31
+
30
32
  Selected ESLint checks apply live inline suppressions and validate selected bulk suppression counts. The complete lint gate owns unused inline-directive and inline-configuration checks: a partial run cannot establish whether an unselected rule's directive is needed.
31
33
 
32
34
  The complete Python and JavaScript/TypeScript source gate requires named, line-local exceptions with concrete reasons. SARJ523 rejects blanket Python waivers, scoped Ruff file/range disables and weakened Pyright source settings; SARJ419 also rejects missing explanations. Bare sarj-noqa markers cannot waive Python, SQL or IaC findings. Required Ruff blanket-ignore checks and an independent ESLint suppression-policy pass remain active despite source disables, consumer rule configuration, rule exclusions and diagnostic baselines. The ESLint pass bans file/range disables, ts-ignore and ts-nocheck while retaining described local ts-expect-error exceptions. Generated-source headers cannot authorize their own waiver; explicit whole-path exclusions retain that boundary. A reason is not proof that an exception is justified. Native parse/read/size failures make checks incomplete. Explicit tool delegation, partial and own-CI options retain their declared scope and coverage notices.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "code-standards"
3
- version = "8.142.3"
3
+ version = "8.147.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"
@@ -28,11 +28,11 @@ dependencies = [
28
28
  "PyYAML==6.0.3",
29
29
  "jsonschema==4.26.0",
30
30
  "referencing==0.37.0",
31
- "repo-standards==6.13.0",
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
34
  "sarj-iac-lint==0.30.3",
35
- "sarj-python-lint==1.83.1",
35
+ "sarj-python-lint==1.84.0",
36
36
  "sarj-sql-lint==0.30.1",
37
37
  "typer==0.27.3",
38
38
  ]
@@ -6,7 +6,8 @@ from sarj_standards import __version__
6
6
 
7
7
 
8
8
  def main(argv: list[str] | None = None) -> int:
9
- arguments = sys.argv[1:] if argv is None else argv
9
+ # The launcher probes the exact version before typed Typer dispatch.
10
+ arguments = sys.argv[1:] if argv is None else argv # sarj-noqa: SARJ533 -- typed CLI forwarding
10
11
  if arguments == ["--version"]:
11
12
  sys.stdout.write(f"code-standards {__version__}\n")
12
13
  return 0
@@ -47,6 +47,7 @@ from .libs.diagnostics import (
47
47
  ToolReport as ToolReport,
48
48
  TrustMode as TrustMode,
49
49
  baseline as diagnostic_baseline,
50
+ initial_import,
50
51
  to_github as to_github,
51
52
  to_json as to_json,
52
53
  to_sarif as to_sarif,
@@ -266,6 +267,10 @@ class Standards:
266
267
  python_type_check: bool = True,
267
268
  eslint: bool = True,
268
269
  ) -> AnalysisReport:
270
+ try:
271
+ import_context = initial_import.load(self.root, staged=staged)
272
+ except ValueError as exc:
273
+ return _failed_analysis(self.root, "invalid-input", str(exc))
269
274
  if jobs not in {1, 2}:
270
275
  return _failed_analysis(self.root, "invalid-input", "analysis jobs must be 1 or 2")
271
276
  external = external or bool(upstream_rules.ids)
@@ -279,8 +284,18 @@ class Standards:
279
284
  except (OSError, TypeError, ValueError) as exc:
280
285
  return _failed_analysis(self.root, "invalid-input", str(exc))
281
286
  if prepared_only:
282
- return _prepared_only_analysis(
283
- self.root, adopted, prepared_devops, prepared_targets, paths=paths, rules=rules, trust=normalized_trust
287
+ return _validated_initial_import(
288
+ _prepared_only_analysis(
289
+ self.root,
290
+ adopted,
291
+ prepared_devops,
292
+ prepared_targets,
293
+ paths=paths,
294
+ rules=rules,
295
+ trust=normalized_trust,
296
+ ),
297
+ import_context,
298
+ staged=staged,
284
299
  )
285
300
  try:
286
301
  selection_policy = _selection_policy(self.root, adopted, normalized_mode)
@@ -321,16 +336,24 @@ class Standards:
321
336
  )
322
337
  coverage.extend(_prepared_coverage(adopted, prepared_devops))
323
338
  if not external:
324
- native = report_from_tools(self.root, native_analysis())
325
- changed_scope = _analysis_changed_scope(self.root, native, baseline_budget, staged=staged)
339
+ combined = report_from_tools(self.root, native_analysis())
340
+ changed_scope = _analysis_changed_scope(self.root, combined, baseline_budget, staged=staged)
326
341
  _native_typescript_coverage(selected_groups, adopted, rule_selection, coverage)
327
342
  if normalized_mode in {AnalysisMode.POLICY, AnalysisMode.OBSERVE}:
328
- native = _with_warning_severity(native, _warning_rule_keys(normalized_mode, rule_selection))
329
- return _with_coverage(
330
- _without_baselined_diagnostics(
331
- native, baseline_budget.counts, changed_scope=changed_scope, provenance=baseline_budget.provenance
343
+ combined = _with_warning_severity(combined, _warning_rule_keys(normalized_mode, rule_selection))
344
+ return _validated_initial_import(
345
+ _with_coverage(
346
+ _without_baselined_diagnostics(
347
+ combined,
348
+ baseline_budget.counts,
349
+ changed_scope=changed_scope,
350
+ provenance=baseline_budget.provenance,
351
+ ),
352
+ coverage,
332
353
  ),
333
- coverage,
354
+ import_context,
355
+ staged=staged,
356
+ changed_scope=changed_scope,
334
357
  )
335
358
  coverage.extend(
336
359
  _source_analyzer_coverage(
@@ -375,11 +398,16 @@ class Standards:
375
398
  else frozenset(),
376
399
  upstream_rules=upstream_rules,
377
400
  )
378
- return _with_coverage(
379
- _without_baselined_diagnostics(
380
- combined, baseline_budget.counts, changed_scope=changed_scope, provenance=baseline_budget.provenance
401
+ return _validated_initial_import(
402
+ _with_coverage(
403
+ _without_baselined_diagnostics(
404
+ combined, baseline_budget.counts, changed_scope=changed_scope, provenance=baseline_budget.provenance
405
+ ),
406
+ coverage,
381
407
  ),
382
- coverage,
408
+ import_context,
409
+ staged=staged,
410
+ changed_scope=changed_scope,
383
411
  )
384
412
 
385
413
  def run(
@@ -670,6 +698,28 @@ def _failed_analysis(root: Path, kind: str, message: str) -> AnalysisReport:
670
698
  return AnalysisReport(root, Completion.FAILED, Conclusion.INCONCLUSIVE, (tool,))
671
699
 
672
700
 
701
+ def _validated_initial_import(
702
+ report: AnalysisReport,
703
+ context: initial_import.InitialImport | None,
704
+ *,
705
+ staged: bool,
706
+ changed_scope: diagnostic_baseline.ChangedLineScope | None = None,
707
+ ) -> AnalysisReport:
708
+ failure: str | None = None
709
+ try:
710
+ initial_import.validate(report.root, context, staged=staged)
711
+ except ValueError as exc:
712
+ failure = str(exc)
713
+ if failure is None and context is not None and changed_scope is not None and changed_scope.failed:
714
+ failure = "initial-import changed-line comparison failed"
715
+ if failure is None:
716
+ return report
717
+ return _with_coverage(
718
+ report_from_tools(report.root, (*report.tools, *_failed_analysis(report.root, "invalid-input", failure).tools)),
719
+ report.coverage,
720
+ )
721
+
722
+
673
723
  def _analysis_changed_scope(
674
724
  root: Path,
675
725
  report: AnalysisReport,
@@ -2825,7 +2825,10 @@ def cmd_commit_message(args: _Args) -> int:
2825
2825
 
2826
2826
 
2827
2827
  def main(argv: list[str] | None = None) -> int:
2828
- raw_argv = _root_option_first(sys.argv[1:] if argv is None else argv)
2828
+ # Compatibility ordering preserves the complete argv for typed Typer.
2829
+ raw_argv = _root_option_first(
2830
+ sys.argv[1:] if argv is None else argv # sarj-noqa: SARJ533 -- typed CLI forwarding
2831
+ )
2829
2832
  status: int | None = None
2830
2833
 
2831
2834
  def dispatch(args: _Args) -> int:
@@ -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.142.3).",
3320
- "version": "8.142.3"
3319
+ "summary": "Adopt, check, fix, diagnose, and update sarj-ai standards (v8.147.0).",
3320
+ "version": "8.147.0"
3321
3321
  }
@@ -836,9 +836,9 @@
836
836
  "task": "rule-audit/python/prefer-match-type-dispatch",
837
837
  "family": "python",
838
838
  "ruleId": "prefer-match-type-dispatch",
839
- "state": "complete",
840
- "evidence": "226 focused type-dispatch/container cases pass, with three exclusions for decorated or explicit/unpacked-metaclass bindings. A runtime counterexample showed isinstance succeeding while the advised class pattern raised TypeError.",
841
- "outcome": "Keep class-pattern advice only when the binding is proven to be a class. Exclude decorated classes and explicit/unpacked metaclass construction; preserve existing type/value dispatch positives."
839
+ "state": "pending",
840
+ "evidence": "226 focused type-dispatch/container cases pass, with three exclusions for decorated or explicit/unpacked-metaclass bindings. A runtime counterexample showed isinstance succeeding while the advised class pattern raised TypeError. The typed-boundary extension covers two-arm ladders and repeated same-subject OR checks while preserving the earlier metaclass, mutation and target-version safeguards. 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.",
841
+ "outcome": "Retain SARJ080 at ERROR for the expanded proven runtime type dispatch policy. Preserve the prior binding-safety restrictions and narrow safe-autofix profile; the added two-arm/OR field calibration remains pending."
842
842
  },
843
843
  {
844
844
  "task": "rule-audit/python/prefer-module-level-constant",
@@ -2805,8 +2805,8 @@
2805
2805
  "family": "python",
2806
2806
  "ruleId": "prefer-precise-object-contract",
2807
2807
  "state": "pending",
2808
- "evidence": "Fifty labeled cases:21 expected advisories and29 valid controls. Raw Pydantic callbacks, model_validate boundaries, framework hooks, quoted aliases, sentinels and alias recursion are covered; the bounded traversal removes demonstrated exponential alias expansion. The frozen replay contains52 object-contract findings, including legitimate generic opaque contracts; these are not a zero-false-positive result. The unchanged calibration corpus contains 50 content-pinned files / 639,913 bytes across repository, Pydantic, pytest and private linked-source samples, replayed in fresh processes capped at 250 files. Initial paired measurements against a control with the eight affected rules disabled showed about 17% warm overhead and 2% peak-RSS overhead; prior warm measurements varied 8\u201326%. These are historical control measurements, not an unchanged shipped-registry comparison. The PR records refreshed complete-base-versus-candidate measurements after cohort integration. Private source, paths and identifying pins remain outside public artifacts. This finite sample does not establish whole-project recall or fleet performance.",
2809
- "outcome": "Ship SARJ528 at WARNING without autofix and keep calibration pending. Prefer domain models, Protocols, TypeVars, JsonValue and ModuleType while explicitly reviewing genuinely opaque library boundaries. Do not promote this broad advisory to ERROR on the present evidence."
2808
+ "evidence": "Fifty labeled cases:21 expected advisories and29 valid controls. Raw Pydantic callbacks, model_validate boundaries, framework hooks, quoted aliases, sentinels and alias recursion are covered; the bounded traversal removes demonstrated exponential alias expansion. The frozen replay contains52 object-contract findings, including legitimate generic opaque contracts; these are not a zero-false-positive result. The unchanged calibration corpus contains 50 content-pinned files / 639,913 bytes across repository, Pydantic, pytest and private linked-source samples, replayed in fresh processes capped at 250 files. Initial paired measurements against a control with the eight affected rules disabled showed about 17% warm overhead and 2% peak-RSS overhead; prior warm measurements varied 8\u201326%. These are historical control measurements, not an unchanged shipped-registry comparison. The PR records refreshed complete-base-versus-candidate measurements after cohort integration. Private source, paths and identifying pins remain outside public artifacts. This finite sample does not establish whole-project recall or fleet performance. The warning-first observations above are historical. Current main already treats SARJ528 as ERROR, and the typed-boundary request explicitly retains that policy; no new severity promotion is claimed. The typed-boundary record preserves separate labeled qualification and historical timing frames.",
2809
+ "outcome": "Retain the existing SARJ528 ERROR policy as explicitly requested. Prefer precise domain models, Protocols, TypeVars, JsonValue and ModuleType while reviewing genuinely opaque library boundaries. Historical broad-advisory observations are not a zero-false-positive field result; calibration remains pending."
2810
2810
  },
2811
2811
  {
2812
2812
  "task": "rule-audit/python/prefer-direct-import-module",
@@ -2925,6 +2925,30 @@
2925
2925
  "state": "pending",
2926
2926
  "evidence": "Locally owned asyncio children need cancellation settlement under the application policy. Standalone warning owner SARJ537 preserves the byte-identical synchronous SARJ464 ERROR owner and its native public-example contract. The corpus contains no legacy synchronous finding; preservation also relies on the separate native controls. There is no automatic termination or pipe-handling rewrite. Fresh revision 4 matched full-registry qualification after the upstream Python/SQL runtime integration of the six new owners has 14 inspected true-positive findings, six labeled true-negative cases and two unsupported numeric positives. There are no inspected false positives, unclassified target findings, returned duplicate tuples, non-target changes or legacy-owner changes. Fifty hash-ranked Python files, ten workflows and nine retained historical self-source controls have no target hits and remain unlabeled, not negatives or recall proof. All 34 workers and 68 analyses complete. Native preflight passes 1,729 Python metadata/new/legacy cases and 584 text cases including 91 Slack cases, with clean strict types and no blocking lint findings. All timing pairs and available process/child RSS are retained; shared-VM variation supplies no causal speedup or general overhead bound. See packages/standards/benchmarks/source-audit-python-slack-qualification-20261026.json. Canonical verification, independent commit review and required head CI remain separate delivery gates; field calibration stays pending. Earlier revision 3 raw observations remain historical. Bytecode caches are not normalized, so first-analysis and cold-total timings do not establish cold-start costs or causal speedups. A later incoming scoped-React parser change is qualified by a separate fresh workflow-only revision5 against its exact new baseline. All10workers/20analyses complete with the same originalSlack1/repair0,1TP/1TN,ten unlabeled sample zeroes and no inspectedFP/non-target changes/unknown/parser failures/duplicate tuples/repeat drift. These confirm existing cases and do not increase combined14TP/6TN totals. Three paired workflow rounds retain all timing/RSS observations; shared-VM and unnormalized caches prevent causal speedup or a worst-case bound. Original Pythonv4/TSv3 and the original full report retain their exact historical timing frames; old Python startup timers also hash changed Standards source, so whole-worker current equivalence is not claimed. Incoming complete native2file lint/types and364React tests pass; full direct canonical verification, normal hooks, immutable-commit review and exact-head requiredCI remain separate. A subsequent two-path verification-only Makefile/mise integration preserves every measured runtime/fixture/worker byte and actualnpm12.2.1 identity. Workflowrevision5 retains its d4d baseline/timestamps; no second benchmark or timing repin is claimed. Qualification preserves the original make's three successful native phases, six completed test groups, exit code 2 and failed fourth phase at their original tree. An exact upstream input comparison carries forward only source-compatible completed checks; fresh affected preflights, Standards tests, TypeScript configuration and repository/privacy/shell checks complete under the current final shared native lease. Every test group was actually executed; an older TypeScript result was not substituted. Inputs outside the reviewed transition remain unchanged. PYTEST_ARGS and PYTEST_ADDOPTS remain empty. The earlier evidence-only tree is linked by an exact scalar transition and fresh metadata checks. A subsequent authored-ESLint hook helper and regression-test repair suppresses only native file-ignored notices; real rule warnings and errors remain blocking. Exact input comparisons and fresh targeted native checks qualify that verification-only repair and these evidence clarifications without repeating unchanged engine tests. No earlier make is claimed to have executed these later changes. Earlier qualification counts and measurements remain historical; see post_a5_reconciliation in source-audit-rule-admission-20261026.json for the integrated source scope and separate verification requirements.",
2927
2927
  "outcome": "Stage SARJ537 at WARNING without autofix. Prove exclusive ownership, preserve all cancellation/provenance exclusions, verify registry/ledger/public examples, and require native qualification, canonical checks, independent exact-commit review and exact-head CI. Field calibration remains pending."
2928
+ },
2929
+ {
2930
+ "task": "rule-audit/python/prefer-typed-cli",
2931
+ "family": "python",
2932
+ "ruleId": "prefer-typed-cli",
2933
+ "state": "pending",
2934
+ "evidence": "Import-proven raw argv/parser construction and missing or erased local Typer parameter annotations have paired positive/negative controls; shadowing, stable aliases and native forwarding boundaries are covered. 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.",
2935
+ "outcome": "Ship SARJ533 at ERROR under the explicit user-approved typed Typer CLI policy. Preserve five explained exact-code native forwarding exceptions; review argument compatibility manually. No automatic rewrite; field calibration remains pending."
2936
+ },
2937
+ {
2938
+ "task": "rule-audit/python/prefer-runtime-validation",
2939
+ "family": "python",
2940
+ "ruleId": "prefer-runtime-validation",
2941
+ "state": "pending",
2942
+ "evidence": "Import-proven TypeGuard returns, quoted annotations, module aliases and shadowing boundaries have paired controls. The warning is an architecture preference even for a correctly implemented guard. 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.",
2943
+ "outcome": "Ship SARJ534 at WARNING without autofix. Prefer returning actually validated domain values; do not merely rename TypeGuard to TypeIs or insert casts. Preserve indispensable low-level refinements with an explained exact-code exception."
2944
+ },
2945
+ {
2946
+ "task": "rule-audit/python/prefer-typed-mapping-get",
2947
+ "family": "python",
2948
+ "ruleId": "prefer-typed-mapping-get",
2949
+ "state": "pending",
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
+ "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."
2928
2952
  }
2929
2953
  ]
2930
2954
  }