modelaudit 0.2.54__tar.gz → 0.2.55__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 (718) hide show
  1. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/README.md +1 -1
  2. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/nightly.yml +2 -1
  3. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/release-please.yml +3 -3
  4. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/test.yml +145 -18
  5. modelaudit-0.2.55/.release-please-manifest.json +4 -0
  6. {modelaudit-0.2.54 → modelaudit-0.2.55}/AGENTS.md +3 -3
  7. {modelaudit-0.2.54 → modelaudit-0.2.55}/CHANGELOG.md +86 -0
  8. {modelaudit-0.2.54 → modelaudit-0.2.55}/CONTRIBUTING.md +2 -2
  9. {modelaudit-0.2.54 → modelaudit-0.2.55}/Dockerfile +2 -2
  10. {modelaudit-0.2.54 → modelaudit-0.2.55}/Dockerfile.full +2 -2
  11. {modelaudit-0.2.54 → modelaudit-0.2.55}/Dockerfile.tensorflow +2 -2
  12. {modelaudit-0.2.54 → modelaudit-0.2.55}/PKG-INFO +19 -12
  13. {modelaudit-0.2.54 → modelaudit-0.2.55}/README.md +7 -5
  14. {modelaudit-0.2.54 → modelaudit-0.2.55}/SUPPORT.md +7 -5
  15. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/agents/dependencies.md +7 -1
  16. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/agents/picklescan-package-split.md +2 -2
  17. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/agents/release-process.md +2 -2
  18. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/maintainers/dependency-policy.md +1 -1
  19. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/maintainers/triage-playbook.md +1 -1
  20. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/user/metadata-extraction.md +10 -0
  21. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/auth/config.py +12 -50
  22. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/cache_policy.py +1 -0
  23. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/optimized_config.py +6 -17
  24. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/scan_results_cache.py +37 -60
  25. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cli.py +185 -374
  26. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/explanations.py +22 -54
  27. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/core.py +25 -82
  28. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/core_results.py +11 -22
  29. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/detectors/jit_script.py +52 -110
  30. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/detectors/network_comm.py +1 -10
  31. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/detectors/suspicious_symbols.py +4 -47
  32. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/jfrog.py +9 -13
  33. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/license_checker.py +13 -25
  34. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/mlflow.py +40 -303
  35. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/sbom_generator.py +8 -33
  36. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/metadata_extractor.py +3 -0
  37. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/models.py +4 -12
  38. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanner_registry_metadata.py +3 -46
  39. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanner_results.py +8 -13
  40. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanner_selection.py +0 -3
  41. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/archive_member_security.py +0 -15
  42. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/base.py +3 -12
  43. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/compressed_scanner.py +34 -113
  44. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/coreml_scanner.py +1 -24
  45. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/flax_msgpack_scanner.py +0 -196
  46. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/gguf_scanner.py +61 -3
  47. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/jinja2_template_scanner.py +0 -22
  48. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/keras_h5_scanner.py +1 -33
  49. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/keras_utils.py +35 -0
  50. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/keras_zip_scanner.py +1 -34
  51. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/manifest_scanner.py +2 -14
  52. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/oci_layer_scanner.py +5 -13
  53. modelaudit-0.2.55/modelaudit/scanners/onnx_scanner.py +19957 -0
  54. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/pickle_scanner.py +9 -5
  55. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/pytorch_binary_scanner.py +7 -40
  56. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/pytorch_zip_scanner.py +62 -247
  57. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/safetensors_scanner.py +2 -40
  58. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/tar_scanner.py +22 -23
  59. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/text_scanner.py +20 -52
  60. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/torchserve_mar_scanner.py +9 -81
  61. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/weight_distribution_scanner.py +30 -1
  62. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/zip_scanner.py +10 -24
  63. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/telemetry.py +2 -10
  64. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/detection.py +81 -3
  65. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/handlers.py +22 -77
  66. modelaudit-0.2.55/modelaudit/utils/helpers/json_limits.py +33 -0
  67. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/result_conversion.py +1 -4
  68. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/lfs.py +8 -15
  69. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/repository_context.py +6 -16
  70. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/_huggingface_cache.py +3 -27
  71. modelaudit-0.2.55/modelaudit/utils/sources/_routing.py +32 -0
  72. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/cloud_storage.py +59 -172
  73. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/huggingface.py +147 -277
  74. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/huggingface_paths.py +6 -0
  75. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/jfrog.py +25 -52
  76. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/pytorch_hub.py +4 -19
  77. {modelaudit-0.2.54 → modelaudit-0.2.55}/package-lock.json +3 -3
  78. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/AGENTS.md +5 -5
  79. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/CHANGELOG.md +39 -0
  80. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/Cargo.lock +17 -17
  81. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/Cargo.toml +3 -3
  82. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/README.md +4 -2
  83. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/pyproject.toml +2 -1
  84. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/expansion.rs +1 -7
  85. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/nested.rs +129 -195
  86. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/nested_surface.rs +2 -5
  87. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/opcode.rs +287 -323
  88. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/policy.rs +225 -449
  89. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/post_budget.rs +34 -100
  90. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/report.rs +0 -4
  91. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/stack.rs +49 -90
  92. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/state.rs +1120 -304
  93. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/strings.rs +5 -57
  94. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/src/modelaudit_picklescan/api.py +83 -226
  95. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/src/modelaudit_picklescan/call_graph.py +1989 -185
  96. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/src/modelaudit_picklescan/report.py +4 -8
  97. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_adversarial_pickle_oracle.py +116 -505
  98. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_api.py +784 -1623
  99. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_assignment_alias_cycle.py +148 -293
  100. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_import_statements.py +9284 -4711
  101. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_instance_defaults.py +45 -12
  102. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_safe_spec_resolution.py +1112 -313
  103. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_nested_budget_limits.py +16 -81
  104. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_protocol0_line_operands.py +59 -114
  105. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_rust_engine.py +4 -4
  106. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/uv.lock +1 -1
  107. {modelaudit-0.2.54 → modelaudit-0.2.55}/pyproject.toml +14 -7
  108. {modelaudit-0.2.54 → modelaudit-0.2.55}/renovate.json +2 -2
  109. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/analysis/test_anomaly_detector.py +47 -82
  110. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/cache/test_cache_correctness.py +249 -590
  111. modelaudit-0.2.55/tests/cache/test_optimized_config.py +126 -0
  112. modelaudit-0.2.55/tests/cache_lifecycle.py +17 -0
  113. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/conftest.py +3 -162
  114. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_jit_script_detector.py +388 -1403
  115. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_network_comm_detector.py +88 -316
  116. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_secrets_detector.py +11 -28
  117. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/__init__.py +0 -24
  118. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/file_creators.py +0 -42
  119. modelaudit-0.2.55/tests/helpers/frameworks.py +12 -0
  120. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_jfrog.py +793 -939
  121. modelaudit-0.2.55/tests/integrations/test_jfrog_integration.py +502 -0
  122. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_jfrog_redirect_security.py +22 -124
  123. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_license_checker.py +14 -46
  124. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_mlflow_integration.py +333 -520
  125. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_sarif_formatter.py +50 -123
  126. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_sbom_license_integration.py +40 -70
  127. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_sbom_symlink_containment.py +46 -97
  128. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_sbom_url_fixes.py +73 -70
  129. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/progress/test_base.py +63 -117
  130. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/progress/test_hooks_egress.py +56 -166
  131. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_base_scanner.py +59 -287
  132. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_cntk_scanner.py +5 -16
  133. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_compressed_scanner.py +8 -28
  134. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_executorch_scanner.py +8 -16
  135. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_flax_msgpack_scanner.py +18 -8
  136. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_gguf_scanner.py +309 -93
  137. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_jax_checkpoint_scanner.py +19 -57
  138. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_jinja2_template_scanner.py +20 -55
  139. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_keras_h5_scanner.py +1022 -1558
  140. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_keras_zip_scanner.py +963 -1500
  141. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_llamafile_scanner.py +31 -176
  142. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_manifest_scanner.py +6 -20
  143. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_metadata_scanner.py +2 -4
  144. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_nemo_scanner.py +215 -828
  145. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_oci_layer_scanner.py +3 -8
  146. modelaudit-0.2.55/tests/scanners/test_onnx_scanner.py +52922 -0
  147. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_paddle_scanner.py +2 -2
  148. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_pickle_scanner.py +662 -8
  149. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_pytorch_zip_scanner.py +297 -624
  150. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_r_serialized_scanner.py +39 -98
  151. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_rknn_scanner.py +3 -8
  152. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_safetensors_scanner.py +76 -251
  153. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_scanner_registry.py +15 -26
  154. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_skops_scanner.py +10 -36
  155. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_tar_scanner.py +86 -199
  156. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_text_scanner.py +4 -12
  157. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_tf_metagraph_scanner.py +40 -88
  158. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_tf_savedmodel_scanner.py +85 -129
  159. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_tflite_scanner.py +3 -8
  160. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_torch7_scanner.py +3 -8
  161. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_torchserve_mar_scanner.py +65 -149
  162. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_weight_distribution_scanner.py +166 -0
  163. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_xgboost_scanner.py +13 -30
  164. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_zip_scanner.py +65 -32
  165. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_asset_inventory_integration.py +3 -10
  166. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_auth_config.py +109 -210
  167. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_benchmark_report.py +17 -49
  168. modelaudit-0.2.55/tests/test_cache_optimizations.py +310 -0
  169. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_checks_recording.py +14 -32
  170. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cli.py +141 -350
  171. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cli_cache_dir.py +10 -34
  172. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cli_default_command.py +46 -60
  173. modelaudit-0.2.55/tests/test_cli_file_filtering.py +107 -0
  174. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cli_license_integration.py +43 -97
  175. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_core.py +351 -1081
  176. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_core_asset_extraction.py +21 -0
  177. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_debug_command.py +61 -99
  178. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_dependency_lock.py +80 -1
  179. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_docker_workflow.py +2 -0
  180. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_exit_codes.py +43 -102
  181. modelaudit-0.2.55/tests/test_file_hash.py +156 -0
  182. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_graceful_degradation.py +0 -19
  183. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_huggingface_inconclusive_coverage.py +7 -52
  184. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_huggingface_symlinks.py +70 -92
  185. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_metadata_extractor.py +274 -235
  186. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_models.py +123 -156
  187. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_perf_workflow.py +28 -1
  188. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_progress.py +14 -28
  189. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_pydantic_models.py +101 -112
  190. modelaudit-0.2.55/tests/test_python_compatibility.py +83 -0
  191. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_real_world_dill_joblib.py +22 -4
  192. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_release_workflow.py +73 -0
  193. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_secure_hasher.py +39 -42
  194. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_streaming_scan.py +94 -217
  195. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_telemetry.py +89 -243
  196. modelaudit-0.2.55/tests/test_telemetry_decoupling.py +386 -0
  197. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_timeout_configuration.py +53 -66
  198. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_xdist_status.py +2 -1
  199. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_advanced_file_handler.py +8 -28
  200. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_filetype.py +97 -0
  201. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_large_file_handler.py +6 -20
  202. modelaudit-0.2.55/tests/utils/helpers/test_disk_space.py +72 -0
  203. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/sources/test_cloud_storage.py +94 -232
  204. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/sources/test_dvc_integration.py +97 -207
  205. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/sources/test_huggingface.py +174 -771
  206. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/sources/test_pytorch_hub.py +135 -321
  207. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/test_lfs.py +35 -88
  208. modelaudit-0.2.55/tests/whitelists/test_combined.py +67 -0
  209. {modelaudit-0.2.54 → modelaudit-0.2.55}/uv.lock +1813 -783
  210. modelaudit-0.2.54/.release-please-manifest.json +0 -4
  211. modelaudit-0.2.54/modelaudit/scanners/onnx_scanner.py +0 -6470
  212. modelaudit-0.2.54/tests/cache/test_optimized_config.py +0 -185
  213. modelaudit-0.2.54/tests/helpers/frameworks.py +0 -61
  214. modelaudit-0.2.54/tests/integrations/test_jfrog_integration.py +0 -568
  215. modelaudit-0.2.54/tests/scanners/test_onnx_scanner.py +0 -10384
  216. modelaudit-0.2.54/tests/test_cache_optimizations.py +0 -480
  217. modelaudit-0.2.54/tests/test_cli_file_filtering.py +0 -147
  218. modelaudit-0.2.54/tests/test_file_hash.py +0 -174
  219. modelaudit-0.2.54/tests/test_telemetry_decoupling.py +0 -498
  220. modelaudit-0.2.54/tests/utils/helpers/test_disk_space.py +0 -88
  221. modelaudit-0.2.54/tests/whitelists/test_combined.py +0 -52
  222. modelaudit-0.2.54/tests/whitelists/test_huggingface_popular.py +0 -71
  223. modelaudit-0.2.54/tests/whitelists/test_organizations.py +0 -76
  224. {modelaudit-0.2.54 → modelaudit-0.2.55}/.dockerignore +0 -0
  225. {modelaudit-0.2.54 → modelaudit-0.2.55}/.editorconfig +0 -0
  226. {modelaudit-0.2.54 → modelaudit-0.2.55}/.gitattributes +0 -0
  227. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/CODEOWNERS +0 -0
  228. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  229. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  230. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  231. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/markdown-link-check-config.json +0 -0
  232. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/codeql.yml +0 -0
  233. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/docker-image-test.yml +0 -0
  234. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/docker-publish.yml +0 -0
  235. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/docs-check.yml +0 -0
  236. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/perf.yml +0 -0
  237. {modelaudit-0.2.54 → modelaudit-0.2.55}/.github/workflows/validate-pr-title.yml +0 -0
  238. {modelaudit-0.2.54 → modelaudit-0.2.55}/.gitignore +0 -0
  239. {modelaudit-0.2.54 → modelaudit-0.2.55}/.mailmap +0 -0
  240. {modelaudit-0.2.54 → modelaudit-0.2.55}/.modelaudit.toml.example +0 -0
  241. {modelaudit-0.2.54 → modelaudit-0.2.55}/.prettierignore +0 -0
  242. {modelaudit-0.2.54 → modelaudit-0.2.55}/CLAUDE.md +0 -0
  243. {modelaudit-0.2.54 → modelaudit-0.2.55}/CODE_OF_CONDUCT.md +0 -0
  244. {modelaudit-0.2.54 → modelaudit-0.2.55}/LICENSE +0 -0
  245. {modelaudit-0.2.54 → modelaudit-0.2.55}/MAINTAINERS.md +0 -0
  246. {modelaudit-0.2.54 → modelaudit-0.2.55}/MANIFEST.in +0 -0
  247. {modelaudit-0.2.54 → modelaudit-0.2.55}/RULES.md +0 -0
  248. {modelaudit-0.2.54 → modelaudit-0.2.55}/SECURITY.md +0 -0
  249. {modelaudit-0.2.54 → modelaudit-0.2.55}/THIRD_PARTY_NOTICES.md +0 -0
  250. {modelaudit-0.2.54 → modelaudit-0.2.55}/codecov.yml +0 -0
  251. {modelaudit-0.2.54 → modelaudit-0.2.55}/docker-compose.yml +0 -0
  252. {modelaudit-0.2.54 → modelaudit-0.2.55}/docker-entrypoint.sh +0 -0
  253. {modelaudit-0.2.54 → modelaudit-0.2.55}/docker-install-rust.sh +0 -0
  254. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/agents/architecture.md +0 -0
  255. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/agents/new-scanner-quickstart.md +0 -0
  256. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/agents/performance-audit.md +0 -0
  257. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/maintainers/cve-process.md +0 -0
  258. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/maintainers/scanner-cve-coverage.md +0 -0
  259. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/security/threat-model.md +0 -0
  260. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/user/compatibility-matrix.md +0 -0
  261. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/user/offline-air-gapped.md +0 -0
  262. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/user/scanner-selection.md +0 -0
  263. {modelaudit-0.2.54 → modelaudit-0.2.55}/docs/user/security-model.md +0 -0
  264. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/__init__.py +0 -0
  265. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/__main__.py +0 -0
  266. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/_size_format.py +0 -0
  267. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/__init__.py +0 -0
  268. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/anomaly_detector.py +0 -0
  269. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/entropy_analyzer.py +0 -0
  270. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/framework_patterns.py +0 -0
  271. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/integrated_analyzer.py +0 -0
  272. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/ml_context_analyzer.py +0 -0
  273. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/opcode_sequence_analyzer.py +0 -0
  274. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/semantic_analyzer.py +0 -0
  275. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/analysis/unified_context.py +0 -0
  276. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/auth/__init__.py +0 -0
  277. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/auth/client.py +0 -0
  278. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/__init__.py +0 -0
  279. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/adaptive_cache_keys.py +0 -0
  280. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/batch_operations.py +0 -0
  281. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/cache_manager.py +0 -0
  282. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/cache/trusted_config_store.py +0 -0
  283. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/__init__.py +0 -0
  284. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/constants.py +0 -0
  285. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/data/public_suffix_list.dat +0 -0
  286. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/data/spdx_licenses.json +0 -0
  287. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/generated_keras_layers.py +0 -0
  288. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/local_config.py +0 -0
  289. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/name_blacklist.py +0 -0
  290. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/config/rule_config.py +0 -0
  291. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/detectors/__init__.py +0 -0
  292. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/detectors/_metadata.py +0 -0
  293. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/detectors/cve_patterns.py +0 -0
  294. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/detectors/secrets.py +0 -0
  295. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/finding_identity.py +0 -0
  296. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/__init__.py +0 -0
  297. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/_mlflow_identity.py +0 -0
  298. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/_sarif_identity.py +0 -0
  299. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/_sarif_identity_urls.py +0 -0
  300. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/sarif_formatter.py +0 -0
  301. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/integrations/source_serialization.py +0 -0
  302. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/progress/__init__.py +0 -0
  303. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/progress/base.py +0 -0
  304. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/progress/console.py +0 -0
  305. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/progress/file.py +0 -0
  306. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/progress/hooks.py +0 -0
  307. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/progress/multi_phase.py +0 -0
  308. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/LICENSE +0 -0
  309. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/NOTICE +0 -0
  310. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/__init__.py +0 -0
  311. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/py.typed +0 -0
  312. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/__init__.py +0 -0
  313. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/__init__.py +0 -0
  314. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/__init__.py +0 -0
  315. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/allocation_description_pb2.py +0 -0
  316. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/api_def_pb2.py +0 -0
  317. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/attr_value_pb2.py +0 -0
  318. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/cost_graph_pb2.py +0 -0
  319. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/cpp_shape_inference_pb2.py +0 -0
  320. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/dataset_metadata_pb2.py +0 -0
  321. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/dataset_options_pb2.py +0 -0
  322. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/dataset_pb2.py +0 -0
  323. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/device_attributes_pb2.py +0 -0
  324. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/full_type_pb2.py +0 -0
  325. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/function_pb2.py +0 -0
  326. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/graph_debug_info_pb2.py +0 -0
  327. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/graph_pb2.py +0 -0
  328. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/graph_transfer_info_pb2.py +0 -0
  329. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/kernel_def_pb2.py +0 -0
  330. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/log_memory_pb2.py +0 -0
  331. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/model_pb2.py +0 -0
  332. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/node_def_pb2.py +0 -0
  333. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/op_def_pb2.py +0 -0
  334. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/optimized_function_graph_pb2.py +0 -0
  335. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/reader_base_pb2.py +0 -0
  336. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/resource_handle_pb2.py +0 -0
  337. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/step_stats_pb2.py +0 -0
  338. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/tensor_description_pb2.py +0 -0
  339. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/tensor_pb2.py +0 -0
  340. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/tensor_shape_pb2.py +0 -0
  341. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/tensor_slice_pb2.py +0 -0
  342. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/types_pb2.py +0 -0
  343. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/variable_pb2.py +0 -0
  344. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/framework/versions_pb2.py +0 -0
  345. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/__init__.py +0 -0
  346. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/cluster_pb2.py +0 -0
  347. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/composite_tensor_variant_pb2.py +0 -0
  348. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/control_flow_pb2.py +0 -0
  349. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/core_platform_payloads_pb2.py +0 -0
  350. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/critical_section_pb2.py +0 -0
  351. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/data_service_pb2.py +0 -0
  352. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/debug_event_pb2.py +0 -0
  353. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/debug_pb2.py +0 -0
  354. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/device_filters_pb2.py +0 -0
  355. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/device_properties_pb2.py +0 -0
  356. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/fingerprint_pb2.py +0 -0
  357. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/meta_graph_pb2.py +0 -0
  358. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/named_tensor_pb2.py +0 -0
  359. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/remote_tensor_handle_pb2.py +0 -0
  360. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/rewriter_config_pb2.py +0 -0
  361. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/saved_model_pb2.py +0 -0
  362. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/saved_object_graph_pb2.py +0 -0
  363. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/saver_pb2.py +0 -0
  364. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/service_config_pb2.py +0 -0
  365. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/snapshot_pb2.py +0 -0
  366. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/struct_pb2.py +0 -0
  367. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/tensor_bundle_pb2.py +0 -0
  368. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/trackable_object_graph_pb2.py +0 -0
  369. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/transport_options_pb2.py +0 -0
  370. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/protos/tensorflow/core/protobuf/verifier_config_pb2.py +0 -0
  371. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/py.typed +0 -0
  372. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/rule_catalog.py +0 -0
  373. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/rules.py +0 -0
  374. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/__init__.py +0 -0
  375. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/_archive_config.py +0 -0
  376. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/_archive_locations.py +0 -0
  377. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/_archive_outcomes.py +0 -0
  378. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/_evidence_redaction.py +0 -0
  379. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/_network_indicators.py +0 -0
  380. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/_pickle_memo.py +0 -0
  381. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/_string_extraction.py +0 -0
  382. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/archive_dispatch.py +0 -0
  383. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/catboost_scanner.py +0 -0
  384. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/cntk_scanner.py +0 -0
  385. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/executorch_scanner.py +0 -0
  386. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/jax_checkpoint_scanner.py +0 -0
  387. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/joblib_scanner.py +0 -0
  388. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/lightgbm_scanner.py +0 -0
  389. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/llamafile_scanner.py +0 -0
  390. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/metadata_scanner.py +0 -0
  391. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/mxnet_scanner.py +0 -0
  392. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/nemo_scanner.py +0 -0
  393. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/numpy_scanner.py +0 -0
  394. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/openvino_scanner.py +0 -0
  395. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/paddle_scanner.py +0 -0
  396. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/picklescan_adapter.py +0 -0
  397. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/pmml_scanner.py +0 -0
  398. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/protobuf_model_candidate_scanner.py +0 -0
  399. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/pytorch_zip_support/__init__.py +0 -0
  400. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/pytorch_zip_support/archive_members.py +0 -0
  401. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/r_serialized_scanner.py +0 -0
  402. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/rar_scanner.py +0 -0
  403. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/rknn_scanner.py +0 -0
  404. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/rule_mapper.py +0 -0
  405. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/sevenzip_scanner.py +0 -0
  406. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/skops_scanner.py +0 -0
  407. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/tensorrt_scanner.py +0 -0
  408. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/tf_metagraph_scanner.py +0 -0
  409. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/tf_savedmodel_scanner.py +0 -0
  410. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/tflite_scanner.py +0 -0
  411. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/torch7_scanner.py +0 -0
  412. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/scanners/xgboost_scanner.py +0 -0
  413. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/__init__.py +0 -0
  414. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/_path_hardening.py +0 -0
  415. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/auto_defaults.py +0 -0
  416. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/__init__.py +0 -0
  417. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/_compression.py +0 -0
  418. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/filtering.py +0 -0
  419. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/hdf5.py +0 -0
  420. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/large_file_handler.py +0 -0
  421. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/file/streaming.py +0 -0
  422. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/__init__.py +0 -0
  423. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/assets.py +0 -0
  424. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/auto_defaults.py +0 -0
  425. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/cache_decorator.py +0 -0
  426. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/code_validation.py +0 -0
  427. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/disk_space.py +0 -0
  428. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/evidence.py +0 -0
  429. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/file_hash.py +0 -0
  430. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/file_iterator.py +0 -0
  431. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/interrupt_handler.py +0 -0
  432. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/ml_context.py +0 -0
  433. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/retry.py +0 -0
  434. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/secure_hasher.py +0 -0
  435. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/helpers/types.py +0 -0
  436. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/model_extensions.py +0 -0
  437. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/__init__.py +0 -0
  438. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/_huggingface_download_worker.py +0 -0
  439. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/sources/dvc.py +0 -0
  440. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/utils/tensorflow_compat.py +0 -0
  441. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/version.py +0 -0
  442. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/whitelists/__init__.py +0 -0
  443. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/whitelists/huggingface_organizations.py +0 -0
  444. {modelaudit-0.2.54 → modelaudit-0.2.55}/modelaudit/whitelists/huggingface_popular.py +0 -0
  445. {modelaudit-0.2.54 → modelaudit-0.2.55}/package.json +0 -0
  446. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/README.md +0 -0
  447. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/lib.rs +0 -0
  448. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/options.rs +0 -0
  449. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/pybridge.rs +0 -0
  450. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/rust/src/strings_policy.rs +0 -0
  451. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/src/modelaudit_picklescan/__init__.py +0 -0
  452. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/src/modelaudit_picklescan/options.py +0 -0
  453. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/src/modelaudit_picklescan/py.typed +0 -0
  454. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/conftest.py +0 -0
  455. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/framework_fixtures.py +0 -0
  456. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/parity_corpus.py +0 -0
  457. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/pickle_test_helpers.py +0 -0
  458. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_click.py +0 -0
  459. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_execnet.py +0 -0
  460. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_local_imports.py +0 -0
  461. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_six.py +0 -0
  462. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_call_graph_tkinter.py +0 -0
  463. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_import_boundary.py +0 -0
  464. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_known_size_streams.py +0 -0
  465. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_native_interface.py +0 -0
  466. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_options.py +0 -0
  467. {modelaudit-0.2.54 → modelaudit-0.2.55}/packages/modelaudit-picklescan/tests/test_report.py +0 -0
  468. {modelaudit-0.2.54 → modelaudit-0.2.55}/pyproject.toml.example +0 -0
  469. {modelaudit-0.2.54 → modelaudit-0.2.55}/release-please-config.json +0 -0
  470. {modelaudit-0.2.54 → modelaudit-0.2.55}/requirements-tensorflow.txt +0 -0
  471. {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/README.md +0 -0
  472. {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/benchmark_report.py +0 -0
  473. {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/check_circular_imports.py +0 -0
  474. {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/compile_tensorflow_protos.sh +0 -0
  475. {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/fetch_hf_org_models.py +0 -0
  476. {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/fetch_hf_top_models.py +0 -0
  477. {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/generate_keras_layer_inventory.py +0 -0
  478. {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/jax_flax_scanning_demo.py +0 -0
  479. {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/large_pickle_corpus_qa.py +0 -0
  480. {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/minimal_circular_check.py +0 -0
  481. {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/profile_scan.py +0 -0
  482. {modelaudit-0.2.54 → modelaudit-0.2.55}/scripts/validate_docker_publish_tag.py +0 -0
  483. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/__init__.py +0 -0
  484. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/analysis/test_analysis_modules.py +0 -0
  485. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/analysis/test_entropy_analyzer.py +0 -0
  486. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/analysis/test_framework_patterns.py +0 -0
  487. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/analysis/test_ml_context_analyzer.py +0 -0
  488. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/analysis/test_opcode_sequence_analyzer.py +0 -0
  489. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/analysis/test_unified_context.py +0 -0
  490. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit1_basic_torch_bypass.pkl +0 -0
  491. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit2_advanced_torch_bypass.pkl +0 -0
  492. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit3_sophisticated_hybrid.pkl +0 -0
  493. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit4_supply_chain_attack.pkl +0 -0
  494. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit5_ultra_high_confidence.pkl +0 -0
  495. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit6_ordereddict_bypass.pkl +0 -0
  496. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit7_nested_collections.pkl +0 -0
  497. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit9_manual_construction.pkl +0 -0
  498. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/exploits/exploit_ultimate_50pct.pkl +0 -0
  499. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_7z_test_assets.py +0 -0
  500. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_advanced_pickle_tests.py +0 -0
  501. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_evil_pickle.py +0 -0
  502. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_jinja2_test_assets.py +0 -0
  503. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_nested_pickle_assets.py +0 -0
  504. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_os_alias_tests.py +0 -0
  505. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_safe_nested_assets.py +0 -0
  506. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_safetensors_assets.py +0 -0
  507. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/generators/generate_security_assets.py +0 -0
  508. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/huggingface_false_positive_manifest.json +0 -0
  509. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/huggingface_model_cards/timm_convnext_femto.d1_in1k_README.txt +0 -0
  510. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/huggingface_model_cards/timm_mobilenetv3_small_100.lamb_in1k_README.txt +0 -0
  511. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/huggingface_model_cards/timm_repvgg_a0.rvgg_in1k_README.txt +0 -0
  512. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/pickles/memo_attack.pkl +0 -0
  513. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/pickles/multiple_stream_attack.pkl +0 -0
  514. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/pickles/nt_alias_attack.pkl +0 -0
  515. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/pickles/posix_alias_attack.pkl +0 -0
  516. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/pickles/stack_global_attack.pkl +0 -0
  517. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/archives/path_traversal.zip +0 -0
  518. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/archives/safe_model.zip +0 -0
  519. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/benign/chatml_format.json +0 -0
  520. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/benign/complex_legitimate.json +0 -0
  521. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/benign/conditional_system.json +0 -0
  522. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/benign/huggingface_llama.json +0 -0
  523. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/benign/simple_roles.json +0 -0
  524. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/benign/special_tokens.json +0 -0
  525. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/edge_cases/empty_template.json +0 -0
  526. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/edge_cases/malformed_template.json +0 -0
  527. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/edge_cases/multiple_templates.json +0 -0
  528. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/edge_cases/no_template.json +0 -0
  529. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/edge_cases/oversized_template.json +0 -0
  530. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/attr_bypass.json +0 -0
  531. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/combined_attack.json +0 -0
  532. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/config_exploit.json +0 -0
  533. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/cve_2024_34359_original.json +0 -0
  534. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/direct_eval.json +0 -0
  535. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/env_extraction.json +0 -0
  536. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/file_access.json +0 -0
  537. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/hex_bypass.json +0 -0
  538. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/loop_discovery.json +0 -0
  539. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/network_exfil.json +0 -0
  540. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/request_exploit.json +0 -0
  541. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/malicious/subprocess_injection.json +0 -0
  542. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/obfuscated/base64_payload.json +0 -0
  543. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/obfuscated/char_construction.json +0 -0
  544. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/obfuscated/format_bypass.json +0 -0
  545. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/obfuscated/getattr_bypass.json +0 -0
  546. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/standalone/benign_chat.j2 +0 -0
  547. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/standalone/malicious_standalone.jinja +0 -0
  548. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/standalone/malicious_subprocess.template +0 -0
  549. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/standalone/suspicious_benign.template +0 -0
  550. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/yaml/malicious_config.yaml +0 -0
  551. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/jinja2/yaml/model_config.yaml +0 -0
  552. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/keras/custom_layer_attack.h5 +0 -0
  553. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/keras/loss_injection.h5 +0 -0
  554. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/keras/malicious_lambda.h5 +0 -0
  555. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/keras/metric_injection.h5 +0 -0
  556. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/keras/safe_model.h5 +0 -0
  557. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/manifests/safe_config.json +0 -0
  558. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/manifests/suspicious_config.json +0 -0
  559. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/decode_exec_chain.pkl +0 -0
  560. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/dill_func.pkl +0 -0
  561. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/malicious_model_realistic.pkl +0 -0
  562. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/malicious_system_call.pkl +0 -0
  563. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/nested_pickle_base64.pkl +0 -0
  564. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/nested_pickle_hex.pkl +0 -0
  565. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/nested_pickle_multistage.pkl +0 -0
  566. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/nested_pickle_raw.pkl +0 -0
  567. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/safe_data.pkl +0 -0
  568. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/safe_large_model.pkl +0 -0
  569. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/safe_model_with_binary.pkl +0 -0
  570. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/safe_model_with_encoding.pkl +0 -0
  571. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/safe_model_with_tokens.pkl +0 -0
  572. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/safe_nested_structure.pkl +0 -0
  573. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pickles/simple_nested.pkl +0 -0
  574. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pipeline.skops +0 -0
  575. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pytorch/malicious_eval.pt +0 -0
  576. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/pytorch/safe_model.pt +0 -0
  577. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/safetensors/malicious_import.safetensors +0 -0
  578. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/safetensors/safe_model.safetensors +0 -0
  579. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/sentencepiece/custom_unknown_disabled_specials.model +0 -0
  580. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/sentencepiece/custom_unknown_disabled_specials_byte_fallback.model +0 -0
  581. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/tensorflow/malicious_pyfunc/saved_model.pb +0 -0
  582. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/samples/tensorflow/safe_savedmodel/saved_model.pb +0 -0
  583. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/agpl_component/agpl_model.pkl +0 -0
  584. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/agpl_component/neural_network.py +0 -0
  585. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mit_model/config.json +0 -0
  586. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mit_model/model.py +0 -0
  587. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mit_model/model_weights.pkl +0 -0
  588. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mixed_licenses/LICENSE +0 -0
  589. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mixed_licenses/apache_component.py +0 -0
  590. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mixed_licenses/dataset_cc_nc.json +0 -0
  591. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mixed_licenses/gpl_utility.py +0 -0
  592. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/mixed_licenses/mixed_model.pkl +0 -0
  593. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/embeddings.npy +0 -0
  594. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/features.csv +0 -0
  595. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/training_data.json +0 -0
  596. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/security_scenarios/mixed_malicious_model/config.json +0 -0
  597. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/assets/scenarios/security_scenarios/mixed_malicious_model/model.pkl +0 -0
  598. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/benchmarks/test_picklescan_benchmarks.py +0 -0
  599. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/benchmarks/test_scan_benchmarks.py +0 -0
  600. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/cache/__init__.py +0 -0
  601. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/cli_output.py +0 -0
  602. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/config/__init__.py +0 -0
  603. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/config/test_name_blacklist.py +0 -0
  604. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/demo_license_functionality.py +0 -0
  605. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_builtin_detection.py +0 -0
  606. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_compile_eval_variants.py +0 -0
  607. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_cve_detection.py +0 -0
  608. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_cve_detection.py_cases/test_pickle_binunicode8_setitem.py +0 -0
  609. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_runpy_detection.py +0 -0
  610. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/detectors/test_suspicious_symbols.py +0 -0
  611. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/assertions.py +0 -0
  612. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/cache.py +0 -0
  613. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/http.py +0 -0
  614. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/pickle_framework.py +0 -0
  615. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/processes.py +0 -0
  616. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/scanners.py +0 -0
  617. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/tensorflow.py +0 -0
  618. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/text.py +0 -0
  619. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/helpers/workflows.py +0 -0
  620. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/integrations/test_license_integration.py +0 -0
  621. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/progress/__init__.py +0 -0
  622. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_catboost_scanner.py +0 -0
  623. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_coreml_scanner.py +0 -0
  624. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_evidence_redaction.py +0 -0
  625. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_evidence_redaction_authorization_continuation.py +0 -0
  626. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_joblib_scanner.py +0 -0
  627. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_joblib_scanner_codecs.py +0 -0
  628. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_keras_h5_lambda_helpers.py +0 -0
  629. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_keras_utils.py +0 -0
  630. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_lightgbm_scanner.py +0 -0
  631. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_mxnet_scanner.py +0 -0
  632. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_numpy_scanner.py +0 -0
  633. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_onnx_dependency_handling.py +0 -0
  634. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_openvino_scanner.py +0 -0
  635. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_picklescan_adapter.py +0 -0
  636. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_pmml_dependency_handling.py +0 -0
  637. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_pmml_scanner.py +0 -0
  638. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_pytorch_binary_scanner.py +0 -0
  639. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_rule_code_registry_consistency.py +0 -0
  640. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_rule_mapper.py +0 -0
  641. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_sevenzip_scanner.py +0 -0
  642. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_skops_content_analysis.py +0 -0
  643. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scanners/test_tensorrt_scanner.py +0 -0
  644. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scripts/test_hf_whitelist_generators.py +0 -0
  645. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/scripts/test_large_pickle_corpus_qa.py +0 -0
  646. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_asset_list.py +0 -0
  647. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_basic.py +0 -0
  648. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_bug1_confidence_exploit.py +0 -0
  649. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cache_cli.py +0 -0
  650. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cli_logging_handlers.py +0 -0
  651. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cli_output.py +0 -0
  652. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cloud_url_detection.py +0 -0
  653. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_committed_fixture_hygiene.py +0 -0
  654. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_cve_2025_10155_bin_pickle.py +0 -0
  655. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_dill_joblib_enhanced.py +0 -0
  656. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_directory_file_filtering.py +0 -0
  657. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_double_interrupt.py +0 -0
  658. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_false_positive_fixes.py +0 -0
  659. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_gguf_sbom_integration.py +0 -0
  660. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_header_discrepancy.py +0 -0
  661. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_huggingface_extensions.py +0 -0
  662. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_huggingface_fp_regression_harness.py +0 -0
  663. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_importlib_detection.py +0 -0
  664. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_integration.py +0 -0
  665. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_jax_flax_integration.py +0 -0
  666. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_jit_script_integration.py +0 -0
  667. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_lazy_loading.py +0 -0
  668. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_lazy_loading_integration.py +0 -0
  669. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_manifest_name_policy.py +0 -0
  670. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_nested_pickle_integration.py +0 -0
  671. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_network_comm_integration.py +0 -0
  672. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_nightly_asset_contracts.py +0 -0
  673. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_nightly_prerequisites.py +0 -0
  674. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_os_alias_detection.py +0 -0
  675. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_os_subprocess_detection.py +0 -0
  676. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_path_traversal.py +0 -0
  677. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_performance_benchmarks.py +0 -0
  678. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_pickle_context_filtering.py +0 -0
  679. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_python_version_warning.py +0 -0
  680. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_pytorch_zip_detection.py +0 -0
  681. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_regression_corpus.py +0 -0
  682. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_regular_scan_hash.py +0 -0
  683. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_rules.py +0 -0
  684. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_safetensors_optimization.py +0 -0
  685. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_scanner_selection.py +0 -0
  686. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_security_asset_integration.py +0 -0
  687. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_security_enhancements.py +0 -0
  688. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_shebang_context.py +0 -0
  689. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_simple_jinja2.py +0 -0
  690. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_sklearn_joblib_false_positive.py +0 -0
  691. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_tensorflow_lambda_detection.py +0 -0
  692. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_utils.py +0 -0
  693. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_weak_hash_detection.py +0 -0
  694. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_webbrowser_detection.py +0 -0
  695. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/test_why_explanations.py +0 -0
  696. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/__init__.py +0 -0
  697. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/__init__.py +0 -0
  698. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_advanced_size_limits.py +0 -0
  699. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_file_filter.py +0 -0
  700. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_file_type_validation_integration.py +0 -0
  701. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_integration_file_type_demo.py +0 -0
  702. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_streaming_analysis.py +0 -0
  703. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/file/test_streaming_preview.py +0 -0
  704. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_asset_from_scan_result.py +0 -0
  705. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_auto_defaults.py +0 -0
  706. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_code_validation.py +0 -0
  707. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_evidence.py +0 -0
  708. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_file_iterator.py +0 -0
  709. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_interrupt_handling.py +0 -0
  710. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_ml_context_false_positives.py +0 -0
  711. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_py_compile_improvements.py +0 -0
  712. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_retry.py +0 -0
  713. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/helpers/test_secure_hasher.py +0 -0
  714. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/utils/test_result_conversion.py +0 -0
  715. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/whitelists/__init__.py +0 -0
  716. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/workflows/__init__.py +0 -0
  717. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/workflows/test_docker_workflow.py +0 -0
  718. {modelaudit-0.2.54 → modelaudit-0.2.55}/tests/xdist_status.py +0 -0
@@ -12,7 +12,7 @@
12
12
  | **Release** | `release-please.yml` | Pushes to main and manual dispatch |
13
13
  | **Docker Publish** | `docker-publish.yml` | Published releases and manual dispatch |
14
14
 
15
- Python CI ignores documentation-only PRs, which are handled by the documentation check workflow. Code PRs use GitHub's default merge-ref checkout and run fail-fast root tests on Python 3.10, 3.12, and 3.13, a single Windows shard on Python 3.11, the reduced NumPy compatibility lane, and the standalone pickle package matrix on Python 3.10-3.13. Workflow-changing PRs run exhaustive sharded root tests across Python 3.10-3.13. Dependency audit runs on dependency-relevant PR merge refs and again on `merge_group` candidate SHAs, while the optional `run-slow-tests` label remains PR-only because merge-group payloads do not carry pull request label context.
15
+ Python CI ignores documentation-only PRs, which are handled by the documentation check workflow. Code PRs use GitHub's default merge-ref checkout and run fail-fast root tests on Python 3.10, 3.12, 3.13, and 3.14, a single Windows shard on Python 3.11, the reduced NumPy compatibility lane, and the standalone pickle package matrix on Python 3.10-3.14. Python changes also run Python 3.14 native pickle/H5 smoke tests on macOS and Windows. Python 3.14 uses the broad root test profile. Workflow-changing PRs run exhaustive sharded root tests across Python 3.10-3.14. Dependency audit runs on dependency-relevant PR merge refs and again on `merge_group` candidate SHAs, while the optional `run-slow-tests` label remains PR-only because merge-group payloads do not carry pull request label context.
16
16
 
17
17
  Pushes to `main` and `merge_group` runs validate the exact integration SHA with the full sharded fast-test matrices across Linux and Windows, the dedicated Python 3.12 slow/integration lane, 10-way coverage sharding, the full NumPy compatibility lane, and the build/package lanes. Merge-group runs intentionally fail closed: they are treated as integration events instead of depending on changed-path classification to decide whether required lanes should run, so `CI Success` cannot go green from skipped or setup-only jobs on the merge queue candidate SHA.
18
18
 
@@ -18,12 +18,13 @@ jobs:
18
18
  fail-fast: false
19
19
  matrix:
20
20
  os: [ubuntu-latest, windows-latest]
21
- python-version: ["3.10", "3.11", "3.12", "3.13"]
21
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
22
22
  shard: [0, 1, 2]
23
23
  exclude:
24
24
  - { os: windows-latest, python-version: "3.10" }
25
25
  - { os: windows-latest, python-version: "3.12" }
26
26
  - { os: windows-latest, python-version: "3.13" }
27
+ - { os: windows-latest, python-version: "3.14" }
27
28
  steps:
28
29
  - &checkout-repo
29
30
  name: Checkout repo
@@ -605,7 +605,7 @@ jobs:
605
605
  - os: ubuntu-latest
606
606
  artifact-suffix: linux
607
607
  build-sdist: "true"
608
- - os: macos-14
608
+ - os: macos-15
609
609
  artifact-suffix: macos-arm64
610
610
  build-sdist: "false"
611
611
  - os: macos-15-intel
@@ -664,10 +664,10 @@ jobs:
664
664
  cargo test --manifest-path Cargo.toml
665
665
 
666
666
  - name: Lint standalone package with Ruff
667
- run: uv run --with 'ruff==0.17.0' ruff check src tests
667
+ run: uv run --with 'ruff==0.17.1' ruff check src tests
668
668
 
669
669
  - name: Check standalone package formatting with Ruff
670
- run: uv run --with 'ruff==0.17.0' ruff format --check src tests
670
+ run: uv run --with 'ruff==0.17.1' ruff format --check src tests
671
671
 
672
672
  - name: Type check standalone package with mypy
673
673
  run: uv run --with 'mypy>=2.4.0,<2.5.0' --with pytest mypy src tests
@@ -398,7 +398,7 @@ jobs:
398
398
  strategy:
399
399
  fail-fast: false
400
400
  matrix:
401
- include: ${{ github.event_name == 'pull_request' && needs.changes.outputs.workflows != 'true' && fromJSON('[{"python-version":"3.10","shard-count":1,"shard-index":0,"shard-name":"1/1"},{"python-version":"3.12","shard-count":1,"shard-index":0,"shard-name":"1/1"},{"python-version":"3.13","shard-count":1,"shard-index":0,"shard-name":"1/1"}]') || fromJSON('[{"python-version":"3.10","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.10","shard-count":2,"shard-index":1,"shard-name":"2/2"},{"python-version":"3.11","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.11","shard-count":2,"shard-index":1,"shard-name":"2/2"},{"python-version":"3.12","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.12","shard-count":2,"shard-index":1,"shard-name":"2/2"},{"python-version":"3.13","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.13","shard-count":2,"shard-index":1,"shard-name":"2/2"}]') }}
401
+ include: ${{ github.event_name == 'pull_request' && needs.changes.outputs.workflows != 'true' && fromJSON('[{"python-version":"3.10","shard-count":1,"shard-index":0,"shard-name":"1/1"},{"python-version":"3.12","shard-count":1,"shard-index":0,"shard-name":"1/1"},{"python-version":"3.13","shard-count":1,"shard-index":0,"shard-name":"1/1"},{"python-version":"3.14","shard-count":1,"shard-index":0,"shard-name":"1/1"}]') || fromJSON('[{"python-version":"3.10","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.10","shard-count":2,"shard-index":1,"shard-name":"2/2"},{"python-version":"3.11","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.11","shard-count":2,"shard-index":1,"shard-name":"2/2"},{"python-version":"3.12","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.12","shard-count":2,"shard-index":1,"shard-name":"2/2"},{"python-version":"3.13","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.13","shard-count":2,"shard-index":1,"shard-name":"2/2"},{"python-version":"3.14","shard-count":2,"shard-index":0,"shard-name":"1/2"},{"python-version":"3.14","shard-count":2,"shard-index":1,"shard-name":"2/2"}]') }}
402
402
  steps:
403
403
  - *checkout-repo
404
404
 
@@ -440,6 +440,34 @@ jobs:
440
440
  --modelaudit-shard-index ${{ matrix.shard-index }} \
441
441
  --tb=short --durations=15
442
442
 
443
+ python314-platform-smoke:
444
+ name: Python 3.14 Smoke (${{ matrix.os }})
445
+ needs: changes
446
+ if: needs.changes.outputs.integration == 'true' || needs.changes.outputs.python == 'true' || needs.changes.outputs.workflows == 'true'
447
+ runs-on: ${{ matrix.os }}
448
+ timeout-minutes: 20
449
+ strategy:
450
+ fail-fast: false
451
+ matrix:
452
+ os: [macos-latest, windows-latest]
453
+ env:
454
+ PROMPTFOO_DISABLE_TELEMETRY: "1"
455
+ steps:
456
+ - *checkout-repo
457
+
458
+ - *install-uv
459
+
460
+ - *install-rust-toolchain
461
+
462
+ - name: Sync Python 3.14 smoke dependencies
463
+ run: uv sync --locked --python 3.14 --extra all-ci-windows --extra h5
464
+
465
+ - name: Verify Python 3.14 native and H5 imports
466
+ run: uv run --locked --python 3.14 python -c "import h5py, modelaudit_picklescan._rust; print(h5py.version.info)"
467
+
468
+ - name: Test Python 3.14 native pickle and H5 scanning
469
+ run: uv run --locked --python 3.14 pytest tests/test_python_compatibility.py -n 0 --tb=short
470
+
443
471
  slow-tests:
444
472
  name: Slow/Integration Tests (Python 3.12)
445
473
  needs: changes
@@ -485,11 +513,22 @@ jobs:
485
513
 
486
514
  - *install-uv
487
515
 
488
- - *pin-python-312
516
+ # Python 3.12 traces large functions slowly: python/cpython#127953.
517
+ # The fast-test matrix retains Python 3.12 without coverage.
518
+ - name: Pin Python version
519
+ run: |
520
+ uv python pin 3.11
489
521
 
490
522
  - *install-rust-toolchain
491
523
 
492
- - *cache-python-312-dependencies
524
+ - name: Cache Python dependencies
525
+ uses: actions/cache@caa296126883cff596d87d8935842f9db880ef25 # v5
526
+ with:
527
+ path: *python-cache-paths
528
+ key: ${{ runner.os }}-uv-py3.11-${{ hashFiles('**/uv.lock', '**/pyproject.toml') }}
529
+ restore-keys: |
530
+ ${{ runner.os }}-uv-py3.11-
531
+ ${{ runner.os }}-uv-
493
532
 
494
533
  - *sync-all-ci-dependencies
495
534
 
@@ -852,20 +891,44 @@ jobs:
852
891
  needs: changes
853
892
  if: needs.changes.outputs.integration == 'true' || needs.changes.outputs.picklescan == 'true' || needs.changes.outputs.workflows == 'true'
854
893
  runs-on: ${{ matrix.os }}
855
- timeout-minutes: ${{ matrix.os == 'macos-15-intel' && 30 || 15 }}
894
+ timeout-minutes: ${{ matrix.timeout-minutes || ((matrix.os == 'macos-15-intel' || matrix.os == 'windows-latest') && 30 || 15) }}
856
895
  strategy:
857
896
  fail-fast: false
858
897
  matrix:
859
898
  os: [ubuntu-latest]
860
- python-version: ["3.10", "3.11", "3.12", "3.13"]
899
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
861
900
  include:
901
+ - os: ubuntu-latest
902
+ python-version: "3.12"
903
+ timeout-minutes: 30
904
+ - os: ubuntu-latest
905
+ python-version: "3.13"
906
+ timeout-minutes: 30
907
+ - os: ubuntu-latest
908
+ python-version: "3.14"
909
+ timeout-minutes: 30
862
910
  # Exercise the release platform where scalar-probe timing regressed.
863
911
  - os: macos-15-intel
864
912
  python-version: "3.11"
913
+ timeout-minutes: 45
865
914
  - os: macos-15-intel
866
915
  python-version: "3.12"
916
+ timeout-minutes: 45
917
+ - os: macos-15
918
+ python-version: "3.14"
919
+ timeout-minutes: 60
920
+ - os: macos-15-intel
921
+ python-version: "3.14"
922
+ timeout-minutes: 75
923
+ - os: ubuntu-24.04-arm
924
+ python-version: "3.14"
925
+ timeout-minutes: 30
926
+ - os: windows-latest
927
+ python-version: "3.14"
928
+ timeout-minutes: 90
867
929
  defaults:
868
930
  run:
931
+ shell: bash
869
932
  working-directory: packages/modelaudit-picklescan
870
933
  steps:
871
934
  - *checkout-repo
@@ -876,7 +939,7 @@ jobs:
876
939
 
877
940
  - name: Install Rust toolchain
878
941
  run: |
879
- rustup toolchain install 1.83.0 --profile minimal
942
+ rustup toolchain install 1.85.0 --profile minimal
880
943
  rustup toolchain install stable --profile minimal --component rustfmt --component clippy
881
944
  rustup default stable
882
945
 
@@ -904,7 +967,7 @@ jobs:
904
967
 
905
968
  - name: Check Rust scanner MSRV
906
969
  run: |
907
- cargo +1.83.0 check --manifest-path Cargo.toml --locked
970
+ cargo +1.85.0 check --manifest-path Cargo.toml --locked
908
971
 
909
972
  - name: Lint Rust scanner crate
910
973
  run: |
@@ -916,11 +979,11 @@ jobs:
916
979
 
917
980
  - name: Lint standalone package with Ruff
918
981
  run: |
919
- uv run --with 'ruff==0.17.0' ruff check src tests
982
+ uv run --with 'ruff==0.17.1' ruff check src tests
920
983
 
921
984
  - name: Check standalone package formatting with Ruff
922
985
  run: |
923
- uv run --with 'ruff==0.17.0' ruff format --check src tests
986
+ uv run --with 'ruff==0.17.1' ruff format --check src tests
924
987
 
925
988
  - name: Type check standalone package with mypy
926
989
  run: |
@@ -928,7 +991,16 @@ jobs:
928
991
 
929
992
  - name: Run standalone package tests
930
993
  run: |
931
- uv run --with pytest --with pytest-xdist --with 'typing-extensions>=4.14' pytest -n auto tests --tb=short
994
+ uv run --with pytest --with pytest-xdist --with 'typing-extensions>=4.14' pytest -n auto tests --tb=short --junitxml="$RUNNER_TEMP/picklescan-test-results.xml"
995
+
996
+ - name: Preserve Windows standalone test evidence
997
+ if: always() && runner.os == 'Windows'
998
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
999
+ with:
1000
+ name: picklescan-tests-${{ matrix.os }}-${{ matrix.python-version }}
1001
+ path: ${{ runner.temp }}/picklescan-test-results.xml
1002
+ retention-days: 7
1003
+ if-no-files-found: warn
932
1004
 
933
1005
  - name: Build standalone package
934
1006
  run: |
@@ -942,6 +1014,11 @@ jobs:
942
1014
  run: |
943
1015
  set -euo pipefail
944
1016
  uv venv /tmp/modelaudit-picklescan-wheel-smoke
1017
+ if [[ -x /tmp/modelaudit-picklescan-wheel-smoke/bin/python ]]; then
1018
+ SMOKE_PYTHON=/tmp/modelaudit-picklescan-wheel-smoke/bin/python
1019
+ else
1020
+ SMOKE_PYTHON=/tmp/modelaudit-picklescan-wheel-smoke/Scripts/python.exe
1021
+ fi
945
1022
 
946
1023
  shopt -s nullglob
947
1024
  picklescan_wheels=(/tmp/modelaudit-picklescan-dist/modelaudit_picklescan-*.whl)
@@ -951,23 +1028,69 @@ jobs:
951
1028
  exit 1
952
1029
  fi
953
1030
 
954
- uv pip install --python /tmp/modelaudit-picklescan-wheel-smoke/bin/python "${picklescan_wheels[0]}"
1031
+ uv pip install --python "$SMOKE_PYTHON" "${picklescan_wheels[0]}"
955
1032
 
956
1033
  smoke_dir="$(mktemp -d)"
957
1034
  (
958
1035
  cd "$smoke_dir"
959
- PYTHONPATH='' /tmp/modelaudit-picklescan-wheel-smoke/bin/python -I - <<'PY'
1036
+ PYTHONPATH='' "$SMOKE_PYTHON" -I - <<'PY'
1037
+ import importlib.metadata
960
1038
  import importlib.util
1039
+ import io
1040
+ import pickle
1041
+ import sys
1042
+ from pathlib import Path
961
1043
 
962
1044
  import modelaudit_picklescan
1045
+ import modelaudit_picklescan._rust as native
963
1046
 
964
1047
  assert importlib.util.find_spec("modelaudit") is None
965
- assert importlib.util.find_spec("modelaudit_picklescan._rust") is not None
966
- report = modelaudit_picklescan.scan_bytes(b"\x80\x04}q\x00.")
967
- assert report.status.value == "complete", report
968
- assert report.verdict.value == "clean", report
969
- assert not any(notice.code == "engine_fallback" for notice in report.notices)
970
- print("standalone modelaudit_picklescan wheel loaded without modelaudit")
1048
+ assert not importlib.metadata.requires("modelaudit-picklescan")
1049
+ for module in (modelaudit_picklescan, native):
1050
+ origin = Path(module.__file__).resolve()
1051
+ assert origin.is_relative_to(Path(sys.prefix).resolve()), origin
1052
+ print(f"{module.__name__}: {origin}")
1053
+ assert (Path(modelaudit_picklescan.__file__).parent / "py.typed").is_file()
1054
+
1055
+ for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
1056
+ payload = pickle.dumps({"weights": [1, 2, 3]}, protocol=protocol)
1057
+ path = Path(f"protocol-{protocol}.pkl")
1058
+ path.write_bytes(payload)
1059
+ for report in (
1060
+ modelaudit_picklescan.scan_bytes(payload),
1061
+ modelaudit_picklescan.scan_stream(io.BytesIO(payload)),
1062
+ modelaudit_picklescan.scan_file(path),
1063
+ ):
1064
+ assert report.status.value == "complete", report
1065
+ assert report.verdict.value == "clean", report
1066
+ assert not any(notice.code == "engine_fallback" for notice in report.notices)
1067
+
1068
+ malicious = modelaudit_picklescan.scan_bytes(b"cos\nsystem\n(S'echo unexpected'\ntR.")
1069
+ assert malicious.verdict.value == "malicious", malicious
1070
+ assert any(finding.rule_code == "DANGEROUS_CALL" for finding in malicious.findings), malicious
1071
+ truncated = modelaudit_picklescan.scan_bytes(b"\x80\x04")
1072
+ assert truncated.status.value != "complete", truncated
1073
+ assert truncated.verdict.value != "clean", truncated
1074
+ import string
1075
+
1076
+ # Qualify normal lazy-pattern initialization after importing the scanner.
1077
+ string.Template("warm").substitute({})
1078
+ template = modelaudit_picklescan.scan_bytes(
1079
+ b"\x80\x04cstring\nTemplate.substitute\ncstring\nTemplate\n\x8c\x05plain\x85R}\x86R."
1080
+ )
1081
+ assert template.status.value == "complete", template
1082
+ assert template.verdict.value == "clean", template
1083
+ assert any(
1084
+ invocation.get("template_receiver_state_unmodified") is True
1085
+ for invocation in template.metadata.get("callable_invocations", ())
1086
+ ), template
1087
+ if sys.version_info >= (3, 14):
1088
+ for method in ("Template.is_valid", "Template.get_identifiers"):
1089
+ payload = b"\x80\x04cstring\n" + method.encode() + b"\ncstring\nTemplate\n\x8c\x05plain\x85R\x85R."
1090
+ helper = modelaudit_picklescan.scan_bytes(payload)
1091
+ assert helper.status.value == "complete", helper
1092
+ assert helper.verdict.value == "clean", helper
1093
+ print(f"standalone wheel API passed on {sys.version}")
971
1094
  PY
972
1095
  )
973
1096
 
@@ -983,6 +1106,7 @@ jobs:
983
1106
  uv-lock-check,
984
1107
  type-check,
985
1108
  windows-tests,
1109
+ python314-platform-smoke,
986
1110
  test,
987
1111
  slow-tests,
988
1112
  coverage,
@@ -1015,6 +1139,7 @@ jobs:
1015
1139
  LICENSE_RESULT="${{ needs.license-check.result }}"
1016
1140
  UV_LOCK_RESULT="${{ needs.uv-lock-check.result }}"
1017
1141
  TYPE_CHECK_RESULT="${{ needs.type-check.result }}"
1142
+ PYTHON314_SMOKE_RESULT="${{ needs.python314-platform-smoke.result }}"
1018
1143
  WINDOWS_RESULT="${{ needs.windows-tests.result }}"
1019
1144
  TEST_RESULT="${{ needs.test.result }}"
1020
1145
  SLOW_RESULT="${{ needs.slow-tests.result }}"
@@ -1045,6 +1170,7 @@ jobs:
1045
1170
  echo " license-check: $LICENSE_RESULT"
1046
1171
  echo " uv-lock-check: $UV_LOCK_RESULT"
1047
1172
  echo " type-check: $TYPE_CHECK_RESULT"
1173
+ echo " python314-platform-smoke: $PYTHON314_SMOKE_RESULT"
1048
1174
  echo " windows-tests: $WINDOWS_RESULT"
1049
1175
  echo " test: $TEST_RESULT"
1050
1176
  echo " slow-tests: $SLOW_RESULT"
@@ -1078,6 +1204,7 @@ jobs:
1078
1204
  require_success "$EXPECT_DEPENDENCY_SURFACE" "$UV_LOCK_RESULT" "uv-lock-check"
1079
1205
  require_success "$EXPECT_CORE_FAST" "$TYPE_CHECK_RESULT" "type-check"
1080
1206
  require_success "$EXPECT_CORE_FAST" "$WINDOWS_RESULT" "windows-tests"
1207
+ require_success "$EXPECT_CORE_FAST" "$PYTHON314_SMOKE_RESULT" "python314-platform-smoke"
1081
1208
  require_success "$EXPECT_TEST" "$TEST_RESULT" "test"
1082
1209
  require_success "$EXPECT_SLOW" "$SLOW_RESULT" "slow-tests"
1083
1210
  require_success "$EXPECT_COVERAGE" "$COVERAGE_RESULT" "coverage"
@@ -0,0 +1,4 @@
1
+ {
2
+ ".": "0.2.55",
3
+ "packages/modelaudit-picklescan": "0.1.13"
4
+ }
@@ -18,7 +18,7 @@ This repo publishes **two PyPI packages with independent versions**:
18
18
  | `modelaudit` | `./` (root) | `pyproject.toml` + `uv.lock` | `CHANGELOG.md` |
19
19
  | `modelaudit-picklescan` | `packages/modelaudit-picklescan/` | `pyproject.toml` + `Cargo.toml` | `packages/modelaudit-picklescan/CHANGELOG.md` |
20
20
 
21
- Root `modelaudit` hard-requires `modelaudit-picklescan>=0.1.11,<0.2.0` — when the sibling crosses `0.2.0`, bump the constraint in the same PR or the next `modelaudit` release is uninstallable. Both packages are driven by a single `release-please` workflow (`.github/workflows/release-please.yml`) with components defined in `release-please-config.json` and current versions in `.release-please-manifest.json`. Full publishing details — trusted publishing, manual `workflow_dispatch` recovery (`root_version` / `picklescan_version`), and yank procedure — are in [`docs/agents/release-process.md`](docs/agents/release-process.md). For work inside the picklescan package, start from [`packages/modelaudit-picklescan/AGENTS.md`](packages/modelaudit-picklescan/AGENTS.md).
21
+ Root `modelaudit` hard-requires `modelaudit-picklescan>=0.1.13,<0.2.0` — when the sibling crosses `0.2.0`, bump the constraint in the same PR or the next `modelaudit` release is uninstallable. Both packages are driven by a single `release-please` workflow (`.github/workflows/release-please.yml`) with components defined in `release-please-config.json` and current versions in `.release-please-manifest.json`. Full publishing details — trusted publishing, manual `workflow_dispatch` recovery (`root_version` / `picklescan_version`), and yank procedure — are in [`docs/agents/release-process.md`](docs/agents/release-process.md). For work inside the picklescan package, start from [`packages/modelaudit-picklescan/AGENTS.md`](packages/modelaudit-picklescan/AGENTS.md).
22
22
 
23
23
  ## Mission & Principles
24
24
 
@@ -106,7 +106,7 @@ PROMPTFOO_DISABLE_TELEMETRY=1 uv run pytest -n auto -m "not slow and not integra
106
106
 
107
107
  ## Coding & Style Guardrails
108
108
 
109
- - **Python:** 3.10–3.13 supported. Classes PascalCase, functions/vars snake_case, constants UPPER_SNAKE_CASE, always type hints.
109
+ - **Python:** 3.10–3.14 supported. Classes PascalCase, functions/vars snake_case, constants UPPER_SNAKE_CASE, always type hints.
110
110
  - **Comments:** Use sparingly to explain intent, not mechanics.
111
111
  - **Docs/Markdown:** Keep concise; when formatting markdown/json/yaml, use `npm ci --ignore-scripts && npx prettier --write "**/*.{md,yaml,yml,json}"` if instructed or if formatting drifts.
112
112
  - **Dependencies:** Do not add new packages without explicit approval and updating `pyproject.toml`/locks.
@@ -117,7 +117,7 @@ PROMPTFOO_DISABLE_TELEMETRY=1 uv run pytest -n auto -m "not slow and not integra
117
117
  - Preserve or strengthen detections; test both benign and malicious samples.
118
118
  - Follow existing scanner patterns and update registries, CLI wiring, and docs as needed.
119
119
  - Add comprehensive tests, including edge cases and regression coverage.
120
- - Ensure compatibility across Python 3.10–3.13 and handle missing optional deps gracefully.
120
+ - Ensure compatibility across Python 3.10–3.14 and handle missing optional deps gracefully.
121
121
 
122
122
  ## Testing & Routing Guardrails
123
123
 
@@ -5,8 +5,94 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.2.55](https://github.com/promptfoo/modelaudit/compare/v0.2.54...v0.2.55) (2026-11-06)
9
+
10
+ ### Features
11
+
12
+ - **metadata:** make directory table display limits configurable ([#1896](https://github.com/promptfoo/modelaudit/issues/1896)) ([df49ca9](https://github.com/promptfoo/modelaudit/commit/df49ca90c5a10095ea405e4d769f0a18eb09210a))
13
+ - **python:** support standard CPython 3.14 in ModelAudit ([#1908](https://github.com/promptfoo/modelaudit/issues/1908)) ([58a6784](https://github.com/promptfoo/modelaudit/commit/58a67841beb8eab124dcfad457bb281597d50e75))
14
+
15
+ ### Bug Fixes
16
+
17
+ - **ci:** restore Click 8.5 scanning and Windows fixtures ([#1906](https://github.com/promptfoo/modelaudit/issues/1906)) ([f996f12](https://github.com/promptfoo/modelaudit/commit/f996f12c7f3b3f338844a4380639cadc095a9c1f))
18
+ - **ci:** run branch coverage on Python 3.11 ([#1921](https://github.com/promptfoo/modelaudit/issues/1921)) ([8220211](https://github.com/promptfoo/modelaudit/commit/8220211638eca66875f73eb80d7eaa07c976a7eb))
19
+ - **deps:** update rust crate pyo3 to 0.30.0 ([#1914](https://github.com/promptfoo/modelaudit/issues/1914)) ([415819f](https://github.com/promptfoo/modelaudit/commit/415819fa0b58d097dd201c0fa3f41eba33431c78))
20
+ - **gguf:** recognize the remaining ggml tensor types ([#1909](https://github.com/promptfoo/modelaudit/issues/1909)) ([a5cbeca](https://github.com/promptfoo/modelaudit/commit/a5cbeca11d6ad3e2c9a93dd7501eddf339a36dbf))
21
+ - **gguf:** validate interleaved row groups per matrix ([#1920](https://github.com/promptfoo/modelaudit/issues/1920)) ([6a6bdba](https://github.com/promptfoo/modelaudit/commit/6a6bdba5c13def3b3368a1198bbbfde0d6d4b666))
22
+ - improve scanner coverage and preserve per-member diagnostics ([#1942](https://github.com/promptfoo/modelaudit/issues/1942)) ([71aa359](https://github.com/promptfoo/modelaudit/commit/71aa359096c83f84b8fc3831171f63ccb6a60d47))
23
+ - **metadata:** keep YAML fallback warnings out of JSON stdout ([#1895](https://github.com/promptfoo/modelaudit/issues/1895)) ([c25b6ee](https://github.com/promptfoo/modelaudit/commit/c25b6ee3b3640f7707469e930a2b319ee0f61e76))
24
+ - **metadata:** preserve extraction errors in filtered and directory output ([#1888](https://github.com/promptfoo/modelaudit/issues/1888)) ([3873627](https://github.com/promptfoo/modelaudit/commit/3873627dc8644797eb39127e3a859e5f23d6d2e7))
25
+ - **onnx:** preserve bounded control-flow weight coverage ([#1848](https://github.com/promptfoo/modelaudit/issues/1848)) ([3cdd9e0](https://github.com/promptfoo/modelaudit/commit/3cdd9e05c07593c6c68f86f214b192354877d943))
26
+ - **picklescan:** restore Click 8.5 detection and Windows test portability ([#1864](https://github.com/promptfoo/modelaudit/issues/1864)) ([2838c99](https://github.com/promptfoo/modelaudit/commit/2838c9978c2254ae699c63712b311b2491d047a7))
27
+ - **picklescan:** support standard CPython 3.14 ([#1907](https://github.com/promptfoo/modelaudit/issues/1907)) ([5cda52b](https://github.com/promptfoo/modelaudit/commit/5cda52b0698109e479d10394579cf2128bf3d577))
28
+ - **results:** report completed scans with security findings as successful ([#1941](https://github.com/promptfoo/modelaudit/issues/1941)) ([d37d506](https://github.com/promptfoo/modelaudit/commit/d37d506844d3a2107dd4c4a1a4d120a375f2821e))
29
+ - **routing:** avoid pickle false positives on license text ([#1911](https://github.com/promptfoo/modelaudit/issues/1911)) ([6128247](https://github.com/promptfoo/modelaudit/commit/6128247b084f3bb64724706ab037c7de8ab242f5))
30
+
8
31
  ## [Unreleased]
9
32
 
33
+ ### Added
34
+
35
+ - Support standard CPython 3.14 with native pickle and H5 scanner validation across Linux, macOS, and Windows.
36
+ - Add `metadata --table-limit` to control the number of file entries displayed in directory tables.
37
+
38
+ ### Changed
39
+
40
+ - Require Rust 1.85 or newer for source builds of the native pickle scanner and use Rust 1.85 in Docker builds for PyO3 0.30 compatibility.
41
+
42
+ ### Fixed
43
+
44
+ - Report completed scans as successful in the Python API even when a security check raises a warning.
45
+ - Upgrade APT packages in all Docker runtime images to include Debian security fixes.
46
+ - Distinguish reshape dimensions from activation data when tracing both inputs of an ONNX attention contraction. Dynamically transformed weights retain their coverage gaps.
47
+
48
+ - Preserve individual pickle coverage notices and member locations in consolidated scan results.
49
+ - Validate PyTorch storage references alongside wide RNG state tuples and track up to 2,048 dictionary entries in pickle state analysis.
50
+ - Recognize standalone Tekken vocabulary JSON without routing token spellings to model checkpoint parsers. Filtered domain-shaped code tokens in model cards no longer consume the network evidence classification budget.
51
+
52
+ - Exclude weight consumers in proven-unreachable Loop and Scan bodies while retaining operator security checks and coverage for uncertain execution.
53
+ - Resolve bound function attributes during finite ONNX replay and ignore unrelated dead transforms without dropping live weight consumers.
54
+ - Bound duplicate singular fields during ONNX control preflight and preserve findings and explicit incomplete coverage when admission stops.
55
+ - Preserve finite-loop vector proofs when ONNX Concat combines carried state with known constant operands, while retaining incomplete coverage for unknown operands.
56
+
57
+ - Separate physical ONNX weight-storage checks from logical expanded-view admission, preserving per-view and cumulative limits without repeatedly copying source payloads.
58
+ - Preserve immutable constants captured by effective ONNX function graph bindings during recurrent weight proofs, including defaults, overrides and forwarded graphs.
59
+ - Reuse successful and rejected ONNX vector-control proofs across Expand, axes and Reshape analysis, including recurrent state proofs, so each immutable tensor payload is read once.
60
+ - Bound primary Einsum weight orientation with the shared literal-equation cache before decoding, including resolved Expand and repeated function consumers.
61
+ - Require immutable or proven Scan-8 batch extents and admit typed, budgeted body-local constants before finite weight replay.
62
+ - Preserve trusted runtime-input types through ONNX loop replay and function scopes without trusting shadowed names or unknown operands.
63
+ - Bound and reuse parsed ONNX Einsum equations during repeated shape inference, and reuse capture proofs for equivalent scalar bindings without weakening type checks.
64
+ - Exclude unused function graph arguments from finite ONNX replay while retaining unknown results for unresolved used bindings and scopes.
65
+ - Keep unknown Cast targets and unproven pooling samples from suppressing ONNX weight-coverage gaps.
66
+ - Bound retained ONNX function opset maps before construction and preserve incomplete coverage when a scope exceeds the aggregate budget.
67
+ - Reject unresolved ONNX function overrides and invalid Squeeze rank proofs without consuming capture budgets for unused graph arguments across reentry, dependency, and reachability traversal.
68
+ - Keep local-function graph captures reachable during ONNX weight analysis, and prevent invalid transform bindings from establishing weight-coverage exclusions.
69
+ - Bound and reuse ONNX repeated Constant attribute copies and opset environments, and resolve caller-bound weight-transform attributes while preserving findings and incomplete-coverage outcomes.
70
+ - Reuse ONNX local-function default maps and bound copying them into call environments.
71
+ - Avoid false ONNX weight-coverage gaps for empty Scan-8 batches while retaining downstream coverage for returned states and output dimensions.
72
+ - Charge each distinct ONNX weight-analysis view against the cumulative byte budget while preserving accepted findings and reporting incomplete coverage for skipped views.
73
+ - Preserve ONNX training-normalization and loop-exit weight coverage when entry shapes are unproven or state ranks later increase.
74
+ - Apply ONNX output rank and type semantics to deferred numeric provenance, and retain coverage when pooling or convolution turns dimensions into numeric coefficients.
75
+ - Retain nested ONNX Loop control dependencies despite unused captures, promote deferred BatchNormalization parameter coverage to matrix outputs, and require proven entry ranks before suppressing recurrent weight gaps.
76
+ - Preserve ONNX weight coverage across unknown broadcast ranks, including runtime values with only shape-control provenance, unproven branch and Reshape dimensions, captured runtime inputs, and repeated loop state changes, including initializer-backed states, cumulative scalar rank growth, repeated body consumers, and final transformed weights without stale first-iteration shapes or fabricated products of symbolic dimensions; distinguish builtin operators from exact local-function overloads in weight roles, transforms, and shape proofs while retaining unmatched builtin overloads; avoid false coverage gaps for unchanged shape-control values and provenance, separately captured constants, and fixed-shape single-step Scans including shared sequence extents beside symbolic inputs and feature widths, no-op shape-restoring loops, unchanged Scan-8 batch views, and padded Scan-8 outputs with omitted sequence lengths only for builtin Scan producers.
77
+ - Preserve ONNX coverage through successive, replacement, and sibling loop-state transfers without feeding stacked Scan outputs back into independent sequence slices, including independent Constant and initializer replacements, deferred gaps and retained matrix lineages, activation recurrences with independently analyzed opposite weight views through nested graph and function calls, including constant-initialized activations and invariant carried weights, without suppressing later weight uses or sibling transfers, and nested branch, skipped-loop, and caller-bound shape and graph attributes; preserve optional control-flow output positions, distinguish immutable caller bindings, use initial state for provably skipped Loops and zero-extent modern Scans, preserve invariant modern Scan shape values and the invariant entry condition, and honor independent immutable Loop bounds, sliced Shape attributes, and prove single-iteration termination with caller-bound attributes only for builtin operators, excluding local Constant call attributes from immutable control proofs, and materialize bounded Scan input slices and stacked Loop and Scan weight views with their actual axes only when their values remain invariant; preserve proven axes of partially known Loop stacks without widening iteration replay or concrete-shape metadata; use proven per-iteration input shapes for nested Scan bounds, recurrence, and GatherND indices without trusting intermediate shape declarations or unresolved source-lineage shapes, preserve separately proven recurrent hidden/cell state shapes, and keep Scan-8 sequence lengths and batch axes separate from body transforms, preserve initial states for immutable zero lengths, and fail closed for unmaterialized final-state, sequence-input, and stacked views without analyzing unused Scan-8 padding as a weight.
78
+ - Exclude empty weight views before statistical reductions, enforce per-tensor and cumulative ONNX budgets on expanded weight views in both scanner routes, and bound and reuse successful or failed scalar-control decoding before dimension allocation, shared condition-producer indexes, invocation-local Scan axis decoding and bounded lineage-name views, repeated graph and sibling-state traversal while excluding unreferenced function graph arguments, constant-context copying and aggregate cache-key construction after excluding shadowed and nonconstant bindings and reusing only relevant immutable attribute environments, dependency-closure work, inferred ranks, rank-only permutations, aggregate shape dimensions, and analysis-cache retention; keep inferred dimension arithmetic within signed 64-bit bounds; retain traversal-exhaustion evidence independently of model value names and invalidate Scan slices that exceed the transform budget; reuse Scan repetition proofs across sibling states, reject copying reshapes, and preserve independent weight findings and budget capacity when another view cannot be prepared.
79
+ - Avoid incomplete ONNX weight analysis when mixed shape and activation bookkeeping fanout does not feed generated weights.
80
+ - Preserve ONNX lineage coverage when zero-length Scan paths, overridable shape defaults, or capped rank-promotable values can hide generated weights.
81
+ - Bound ONNX repeated-state reentry work while preserving local-function, shape, and lineage coverage.
82
+ - Preserve caller-bound ONNX Loop conditions over body initializer defaults and reuse local-function analysis across unused attribute values.
83
+ - Preserve early TAR findings after sparse-file probing and enforce SafeTensors JSON nesting limits consistently across Python versions.
84
+ - Keep complete streamed pickle analysis available for oversized remote source URLs across Python versions, preserving SBOM findings and source associations.
85
+ - Validate retired interleaved GGUF row groups within each matrix, so incomplete groups cannot pass by combining rows across higher dimensions.
86
+ - Send metadata YAML fallback warnings to stderr so they do not contaminate JSON output.
87
+ - Preserve metadata extraction errors with `--security-only` and display them in directory table output.
88
+ - Avoid treating ordinary license text such as `Microsoft.` as a pickle stream when its apparent opcodes have an invalid stack. Preserve valid streams with residual stack values or overwritten memo entries, nested payload detection, and completed executable prefixes with malformed trailing data.
89
+ - Recognize the remaining GGUF tensor types that ggml defines (IQ1_S, IQ1_M, IQ2_XXS, IQ2_XS, IQ2_S, IQ3_XXS, IQ4_NL, I8, I16, I32, I64, F64, TQ1_0, TQ2_0, MXFP4, NVFP4, Q1_0, and Q2_0) and the retired Q4_0_4_4, Q4_0_4_8, and Q4_0_8_8 layouts that published files still use, so GGUF files that use them get tensor bounds validation instead of an inconclusive scan. Other retired and unknown type IDs remain inconclusive.
90
+ - Check GGUF block alignment per tensor row, as ggml does, so a block-quantized tensor whose first dimension is not a multiple of its block size is flagged even when its total element count is. The retired Q4_0 layouts must also hold whole groups of rows.
91
+ - Detect invoked class constructors returned by source-backed module compatibility hooks, including Click 8.5's legacy LazyFile export.
92
+ - Preserve annotated and conditional compatibility aliases and use consistent, depth-bounded constant-branch analysis. Check metaclasses during returned-class member lookup with a bounded traversal that reuses shared ancestors, and retain dangerous paths across incomplete alternatives and separate pickle invocations. Report incomplete analysis for export deletion, class-method compatibility hooks, returned functions or function-local classes, unresolved member paths, loop or context-manager bindings, and unproven metaclasses. Skip provably unreachable deletions and retain existing possible paths for uncertain export bindings. Preserve resolved hooks and independent findings when source or metaclass analysis reaches a limit. Continue supplemental stream checks after call-graph coverage gaps, and keep operational failures unsuccessful even with trusted padding.
93
+ - Preserve detection of startup-hook writes through Click 8.5’s legacy `LazyFile` export.
94
+ - Make the nested archive test fixture portable to Windows.
95
+
10
96
  ## [0.2.54](https://github.com/promptfoo/modelaudit/compare/v0.2.53...v0.2.54) (2026-10-06)
11
97
 
12
98
  ### Security
@@ -6,10 +6,10 @@ Thank you for your interest in contributing to ModelAudit! This guide will help
6
6
 
7
7
  ### Prerequisites
8
8
 
9
- - Python 3.10-3.13
9
+ - Python 3.10-3.14
10
10
  - uv (recommended) or pip
11
11
  - Git
12
- - Rust 1.83+ toolchain with `cargo`, `rustfmt`, and `clippy`; editable installs build the native pickle scanner extension
12
+ - Rust 1.85+ toolchain with `cargo`, `rustfmt`, and `clippy`; editable installs build the native pickle scanner extension
13
13
 
14
14
  ### Setup
15
15
 
@@ -1,6 +1,6 @@
1
1
  ARG PYTHON_IMAGE=python:3.13-slim@sha256:c33f0bc4364a6881bed1ec0cc2665e6c53c87a43e774aaeab88e6f17af105e4f
2
2
  # Keep the major/minor version in sync with packages/modelaudit-picklescan/Cargo.toml rust-version.
3
- ARG PICKLESCAN_RUST_TOOLCHAIN=1.83.0
3
+ ARG PICKLESCAN_RUST_TOOLCHAIN=1.85.0
4
4
  ARG RUSTUP_VERSION=1.29.0
5
5
  ARG RUSTUP_INIT_X86_64_UNKNOWN_LINUX_GNU_SHA256=4acc9acc76d5079515b46346a485974457b5a79893cfb01112423c89aeb5aa10
6
6
  ARG RUSTUP_INIT_AARCH64_UNKNOWN_LINUX_GNU_SHA256=9732d6c5e2a098d3521fca8145d826ae0aaa067ef2385ead08e6feac88fa5792
@@ -34,7 +34,7 @@ WORKDIR /app
34
34
 
35
35
  RUN apt-get update \
36
36
  && apt-get install --yes --no-install-recommends --only-upgrade \
37
- bsdutils gzip libc-bin libc6 libblkid1 libcap2 liblastlog2-2 libmount1 libpcre2-8-0 libsmartcols1 libsqlite3-0 \
37
+ apt bsdutils gzip libapt-pkg7.0 libc-bin libc6 libblkid1 libcap2 liblastlog2-2 libmount1 libpcre2-8-0 libsmartcols1 libsqlite3-0 \
38
38
  libssl3t64 libsystemd0 libudev1 libuuid1 login mount perl-base util-linux \
39
39
  && apt-get install --yes --no-install-recommends ca-certificates \
40
40
  && rm -rf /var/lib/apt/lists/*
@@ -1,6 +1,6 @@
1
1
  ARG PYTHON_IMAGE=python:3.13-slim@sha256:c33f0bc4364a6881bed1ec0cc2665e6c53c87a43e774aaeab88e6f17af105e4f
2
2
  # Keep the major/minor version in sync with packages/modelaudit-picklescan/Cargo.toml rust-version.
3
- ARG PICKLESCAN_RUST_TOOLCHAIN=1.83.0
3
+ ARG PICKLESCAN_RUST_TOOLCHAIN=1.85.0
4
4
  ARG RUSTUP_VERSION=1.29.0
5
5
  ARG RUSTUP_INIT_X86_64_UNKNOWN_LINUX_GNU_SHA256=4acc9acc76d5079515b46346a485974457b5a79893cfb01112423c89aeb5aa10
6
6
  ARG RUSTUP_INIT_AARCH64_UNKNOWN_LINUX_GNU_SHA256=9732d6c5e2a098d3521fca8145d826ae0aaa067ef2385ead08e6feac88fa5792
@@ -31,7 +31,7 @@ WORKDIR /app
31
31
 
32
32
  RUN apt-get update \
33
33
  && apt-get install --yes --no-install-recommends --only-upgrade \
34
- bsdutils gzip libc-bin libc6 libblkid1 libcap2 liblastlog2-2 libmount1 libpcre2-8-0 libsmartcols1 libsqlite3-0 \
34
+ apt bsdutils gzip libapt-pkg7.0 libc-bin libc6 libblkid1 libcap2 liblastlog2-2 libmount1 libpcre2-8-0 libsmartcols1 libsqlite3-0 \
35
35
  libssl3t64 libsystemd0 libudev1 libuuid1 login mount perl-base util-linux \
36
36
  && apt-get install --yes --no-install-recommends ca-certificates \
37
37
  && rm -rf /var/lib/apt/lists/*
@@ -1,6 +1,6 @@
1
1
  ARG PYTHON_IMAGE=python:3.12-slim@sha256:a6e34c598f2467ed0e9a8d349809fcd8b5c603269512df273a0bb1784edc11b1
2
2
  # Keep the major/minor version in sync with packages/modelaudit-picklescan/Cargo.toml rust-version.
3
- ARG PICKLESCAN_RUST_TOOLCHAIN=1.83.0
3
+ ARG PICKLESCAN_RUST_TOOLCHAIN=1.85.0
4
4
  ARG RUSTUP_VERSION=1.29.0
5
5
  ARG RUSTUP_INIT_X86_64_UNKNOWN_LINUX_GNU_SHA256=4acc9acc76d5079515b46346a485974457b5a79893cfb01112423c89aeb5aa10
6
6
  ARG RUSTUP_INIT_AARCH64_UNKNOWN_LINUX_GNU_SHA256=9732d6c5e2a098d3521fca8145d826ae0aaa067ef2385ead08e6feac88fa5792
@@ -36,7 +36,7 @@ WORKDIR /app
36
36
  # Pull in current Debian security fixes from the configured apt sources.
37
37
  RUN apt-get update \
38
38
  && apt-get install --yes --no-install-recommends --only-upgrade \
39
- bsdutils gzip libc-bin libc6 libblkid1 liblastlog2-2 libmount1 libpcre2-8-0 libsmartcols1 libsqlite3-0 libssl3t64 \
39
+ apt bsdutils gzip libapt-pkg7.0 libc-bin libc6 libblkid1 liblastlog2-2 libmount1 libpcre2-8-0 libsmartcols1 libsqlite3-0 libssl3t64 \
40
40
  libuuid1 login mount perl-base util-linux \
41
41
  && apt-get clean \
42
42
  && rm -rf /var/lib/apt/lists/*