socketsecurity 2.11.3__tar.gz → 2.11.4__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 (175) hide show
  1. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/CHANGELOG.md +28 -0
  2. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/Dockerfile +7 -7
  3. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/PKG-INFO +5 -5
  4. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/docs/cli-reference.md +1 -1
  5. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/pyproject.toml +5 -5
  6. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/__init__.py +1 -1
  7. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/tools/reachability.py +6 -5
  8. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/socketcli.py +3 -4
  9. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_reachability.py +24 -1
  10. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/uv.lock +135 -96
  11. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/CODEOWNERS +0 -0
  12. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/PULL_REQUEST_TEMPLATE/bug-fix.md +0 -0
  13. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/PULL_REQUEST_TEMPLATE/feature.md +0 -0
  14. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/PULL_REQUEST_TEMPLATE/improvement.md +0 -0
  15. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  16. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/actions/setup-docker/action.yml +0 -0
  17. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/actions/setup-hatch/action.yml +0 -0
  18. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/actions/setup-sfw/action.yml +0 -0
  19. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/dependabot.yml +0 -0
  20. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/workflows/dependency-audit.yml +0 -0
  21. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/workflows/dependency-review.yml +0 -0
  22. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/workflows/docker-stable.yml +0 -0
  23. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/workflows/e2e-test.yml +0 -0
  24. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/workflows/package-check.yml +0 -0
  25. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/workflows/pr-preview.yml +0 -0
  26. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/workflows/python-tests.yml +0 -0
  27. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/workflows/release.yml +0 -0
  28. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/workflows/version-check.yml +0 -0
  29. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.github/zizmor.yml +0 -0
  30. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.gitignore +0 -0
  31. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.hooks/sync_version.py +0 -0
  32. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.pre-commit-config.yaml +0 -0
  33. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/.python-version +0 -0
  34. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/CONTRIBUTING.md +0 -0
  35. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/Dockerfile.preview +0 -0
  36. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/LICENSE +0 -0
  37. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/Makefile +0 -0
  38. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/README.md +0 -0
  39. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/benchmarks/manifest_discovery.py +0 -0
  40. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/docs/ci-cd.md +0 -0
  41. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/docs/development.md +0 -0
  42. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/docs/troubleshooting.md +0 -0
  43. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/examples/config/sarif-dashboard-parity.json +0 -0
  44. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/examples/config/sarif-dashboard-parity.toml +0 -0
  45. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/examples/config/sarif-diff-ci-cd.json +0 -0
  46. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/examples/config/sarif-diff-ci-cd.toml +0 -0
  47. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/examples/config/sarif-instance-detail.json +0 -0
  48. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/examples/config/sarif-instance-detail.toml +0 -0
  49. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/instructions/gitlab-commit-status/uat.md +0 -0
  50. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/pytest.ini +0 -0
  51. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/scripts/build_container.sh +0 -0
  52. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/scripts/build_container_flexible.sh +0 -0
  53. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/scripts/deploy-test-docker.sh +0 -0
  54. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/scripts/deploy-test-pypi.sh +0 -0
  55. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/scripts/docker-entrypoint.sh +0 -0
  56. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/scripts/run.sh +0 -0
  57. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/session.md +0 -0
  58. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socket.yml +0 -0
  59. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/config.py +0 -0
  60. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/__init__.py +0 -0
  61. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/alert_selection.py +0 -0
  62. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/classes.py +0 -0
  63. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/cli_client.py +0 -0
  64. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/cli_run.py +0 -0
  65. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/exceptions.py +0 -0
  66. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/git_interface.py +0 -0
  67. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/git_remote.py +0 -0
  68. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/helper/__init__.py +0 -0
  69. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/helper/socket_facts_loader.py +0 -0
  70. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/lazy_file_loader.py +0 -0
  71. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/log_uploader.py +0 -0
  72. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/logging.py +0 -0
  73. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/messages.py +0 -0
  74. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/pull_request.py +0 -0
  75. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/resource_utils.py +0 -0
  76. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/scm/__init__.py +0 -0
  77. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/scm/base.py +0 -0
  78. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/scm/client.py +0 -0
  79. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/scm/github.py +0 -0
  80. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/scm/gitlab.py +0 -0
  81. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/scm_comments.py +0 -0
  82. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/socket_config.py +0 -0
  83. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/streaming.py +0 -0
  84. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/tools/coana-cache.mjs +0 -0
  85. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/core/utils.py +0 -0
  86. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/fossa_compat.py +0 -0
  87. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/output.py +0 -0
  88. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/plugins/__init__.py +0 -0
  89. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/plugins/base.py +0 -0
  90. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/plugins/formatters/__init__.py +0 -0
  91. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/plugins/formatters/slack.py +0 -0
  92. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/plugins/jira.py +0 -0
  93. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/plugins/manager.py +0 -0
  94. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/plugins/slack.py +0 -0
  95. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/plugins/teams.py +0 -0
  96. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/socketsecurity/plugins/webhook.py +0 -0
  97. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/__init__.py +0 -0
  98. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/core/conftest.py +0 -0
  99. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/core/create_diff_input.json +0 -0
  100. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/core/test_diff_alerts.py +0 -0
  101. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/core/test_diff_generation.py +0 -0
  102. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/core/test_diff_scan_polling.py +0 -0
  103. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/core/test_facts_compression.py +0 -0
  104. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/core/test_full_scan_outputs.py +0 -0
  105. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/core/test_has_manifest_files.py +0 -0
  106. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/core/test_invalid_facts_marker.py +0 -0
  107. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/core/test_package_and_alerts.py +0 -0
  108. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/core/test_sdk_methods.py +0 -0
  109. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/core/test_supporting_methods.py +0 -0
  110. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/data/fullscans/create_response.json +0 -0
  111. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/data/fullscans/diff/stream_diff.json +0 -0
  112. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/data/fullscans/diff/stream_diff_full.json +0 -0
  113. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/data/fullscans/head_scan/metadata.json +0 -0
  114. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/data/fullscans/head_scan/stream_scan.json +0 -0
  115. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/data/fullscans/head_scan/stream_scan_full.json +0 -0
  116. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/data/fullscans/new_scan/metadata.json +0 -0
  117. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/data/fullscans/new_scan/stream_scan.json +0 -0
  118. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/data/repos/repo_info_error.json +0 -0
  119. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/data/repos/repo_info_no_head.json +0 -0
  120. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/data/repos/repo_info_success.json +0 -0
  121. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/data/settings/security-policy.json +0 -0
  122. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/e2e/fixtures/simple-npm/index.js +0 -0
  123. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/e2e/fixtures/simple-npm/package.json +0 -0
  124. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/e2e/fixtures/simple-pypi/requirements.txt +0 -0
  125. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/e2e/reach-facts-probe.sh +0 -0
  126. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/e2e/validate-gitlab.sh +0 -0
  127. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/e2e/validate-json.sh +0 -0
  128. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/e2e/validate-reachability.sh +0 -0
  129. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/e2e/validate-sarif.sh +0 -0
  130. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/e2e/validate-scan.sh +0 -0
  131. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/fixtures/fossa/README.md +0 -0
  132. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/fixtures/fossa/fossa-analyze-empty.json +0 -0
  133. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/fixtures/fossa/fossa-analyze-populated.json +0 -0
  134. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/fixtures/fossa/fossa-sbom-empty-deep.json +0 -0
  135. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/fixtures/fossa/fossa-sbom-populated.json +0 -0
  136. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/__init__.py +0 -0
  137. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_alert_selection.py +0 -0
  138. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_cli_config.py +0 -0
  139. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_cli_run.py +0 -0
  140. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_client.py +0 -0
  141. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_commit_message_truncation.py +0 -0
  142. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_config.py +0 -0
  143. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_dependency_overview.py +0 -0
  144. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_disable_ignore.py +0 -0
  145. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_exclude_paths.py +0 -0
  146. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_fossa_compat.py +0 -0
  147. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_fossa_parity.py +0 -0
  148. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_full_scan_retry.py +0 -0
  149. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_git_interface.py +0 -0
  150. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_git_remote.py +0 -0
  151. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_github_buildkite_config.py +0 -0
  152. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_gitlab_auth.py +0 -0
  153. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_gitlab_auth_fallback.py +0 -0
  154. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_gitlab_commit_status.py +0 -0
  155. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_gitlab_format.py +0 -0
  156. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_ignore_authorization.py +0 -0
  157. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_ignore_telemetry_filtering.py +0 -0
  158. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_include_dirs.py +0 -0
  159. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_log_uploader.py +0 -0
  160. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_manifest_discovery.py +0 -0
  161. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_messages.py +0 -0
  162. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_output.py +0 -0
  163. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_pr_comment_rendering.py +0 -0
  164. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_pull_request_context.py +0 -0
  165. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_scan_scope.py +0 -0
  166. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_slack_plugin.py +0 -0
  167. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_slack_severity_normalization.py +0 -0
  168. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_socketcli.py +0 -0
  169. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_streaming.py +0 -0
  170. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_summary_text.py +0 -0
  171. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/tests/unit/test_tier1_finalize.py +0 -0
  172. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/workflows/bitbucket-pipelines.yml +0 -0
  173. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/workflows/buildkite.yml +0 -0
  174. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/workflows/github-actions.yml +0 -0
  175. {socketsecurity-2.11.3 → socketsecurity-2.11.4}/workflows/gitlab-ci.yml +0 -0
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.11.4
4
+
5
+ ### Fixed: bump `brotli` and `brotlicffi` to patched versions
6
+
7
+ - Bumped the pinned `brotli` (CPython) from `1.2.0` to `1.2.1` and `brotlicffi`
8
+ (other implementations) from `1.2.0.2` to `1.2.1.0`, which fix
9
+ CVE-2026-111497 (GHSA-9v8h-qqgm-4m35), an out-of-bounds write in the Brotli
10
+ decoder. The pins are exact, so earlier releases couldn't be installed
11
+ alongside the patched versions.
12
+
13
+ ### Fixed: find the reachability facts file when `--target-path` isn't the working directory
14
+
15
+ - `--only-facts-file` and `--reach-use-only-pregenerated-sboms` now submit the
16
+ facts file, and `--reach` no longer warns `Facts file not found`.
17
+
18
+ ### Changed: update the Docker image's PyPy to 3.12
19
+
20
+ - The amd64 Docker image now ships PyPy `8.0.1` (Python 3.12), up from PyPy
21
+ `7.3.20` (Python 3.11). The reachability engine uses it to speed up Python
22
+ analysis.
23
+
24
+ ### Changed: bump pinned Coana CLI to 15.13.0
25
+
26
+ - Bumped the pinned reachability engine (the Coana CLI) from `15.12.11` to
27
+ `15.13.0`. See the
28
+ [reachability analysis changelog](https://docs.socket.dev/docs/reachability-analysis-changelog)
29
+ for engine changes.
30
+
3
31
  ## 2.11.3
4
32
 
5
33
  ### Fixed: finish rejecting the compromised eMudhra intermediate CAs
@@ -89,16 +89,16 @@ RUN if [ "$DOTNET_VERSION" = "6" ]; then \
89
89
 
90
90
  # Install PyPy (Alpine-compatible build for x86_64 only)
91
91
  # PyPy is an alternative Python interpreter that makes the Python reachability analysis faster.
92
- # This is a custom build of PyPy3.11 for Alpine on x86-64.
92
+ # This is a custom build of PyPy3.12 for Alpine on x86-64.
93
93
  ARG TARGETARCH # Passed by Docker buildx
94
94
  RUN if [ "$TARGETARCH" = "amd64" ]; then \
95
- PYPY_URL="https://github.com/BarrensZeppelin/alpine-pypy/releases/download/alp3.23.1-pypy3.11-7.3.20/pypy3.11-v7.3.20-linux64-alpine3.21.tar.bz2" && \
96
- PYPY_SHA256="60847fea6ffe96f10a3cd4b703686e944bb4fbcc01b7200c044088dd228425e1" && \
97
- curl -L -o /tmp/pypy.tar.bz2 "$PYPY_URL" && \
98
- echo "$PYPY_SHA256 /tmp/pypy.tar.bz2" | sha256sum -c - && \
95
+ PYPY_URL="https://github.com/BarrensZeppelin/alpine-pypy/releases/download/alp3.24.2-pypy3.12-8.0.1/pypy3.12-v8.0.1-linux64-alpine3.24.tar.gz" && \
96
+ PYPY_SHA256="b6d5dd429c6394f1710a52e3e20d5c9198547caff9528547c457d3f2ed37db09" && \
97
+ curl -L -o /tmp/pypy.tar.gz "$PYPY_URL" && \
98
+ echo "$PYPY_SHA256 /tmp/pypy.tar.gz" | sha256sum -c - && \
99
99
  mkdir -p /opt/pypy && \
100
- tar -xj --strip-components=1 -C /opt/pypy -f /tmp/pypy.tar.bz2 && \
101
- rm /tmp/pypy.tar.bz2 && \
100
+ tar -xz --strip-components=1 -C /opt/pypy -f /tmp/pypy.tar.gz && \
101
+ rm /tmp/pypy.tar.gz && \
102
102
  ln -s /opt/pypy/bin/pypy3 /bin/pypy3 && \
103
103
  pypy3 --version; \
104
104
  fi
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: socketsecurity
3
- Version: 2.11.3
3
+ Version: 2.11.4
4
4
  Summary: Socket Security CLI for CI/CD
5
5
  Project-URL: Homepage, https://socket.dev
6
6
  Author-email: Douglas Coburn <douglas@socket.dev>
@@ -34,10 +34,10 @@ Classifier: Programming Language :: Python :: 3.11
34
34
  Classifier: Programming Language :: Python :: 3.12
35
35
  Requires-Python: >=3.11
36
36
  Requires-Dist: beautifulsoup4==4.15.0
37
- Requires-Dist: brotli==1.2.0; platform_python_implementation == 'CPython'
38
- Requires-Dist: brotlicffi==1.2.0.2; platform_python_implementation != 'CPython'
37
+ Requires-Dist: brotli==1.2.1; platform_python_implementation == 'CPython'
38
+ Requires-Dist: brotlicffi==1.2.1.0; platform_python_implementation != 'CPython'
39
39
  Requires-Dist: certifi>=2026.10.19
40
- Requires-Dist: gitpython==3.2.0
40
+ Requires-Dist: gitpython==3.2.1
41
41
  Requires-Dist: markdown==3.11.1
42
42
  Requires-Dist: mdutils==1.8.1
43
43
  Requires-Dist: packaging==26.3
@@ -48,7 +48,7 @@ Requires-Dist: socketdev==3.6.1
48
48
  Provides-Extra: dev
49
49
  Requires-Dist: hatch==1.18.1; extra == 'dev'
50
50
  Requires-Dist: pre-commit==4.7.0; extra == 'dev'
51
- Requires-Dist: ruff==0.17.0; extra == 'dev'
51
+ Requires-Dist: ruff==0.17.1; extra == 'dev'
52
52
  Requires-Dist: twine==7.0.0; extra == 'dev'
53
53
  Requires-Dist: uv==0.13.4; extra == 'dev'
54
54
  Provides-Extra: test
@@ -338,7 +338,7 @@ If you don't want to provide the Socket API Token every time then you can use th
338
338
  | Parameter | Required | Default | Description |
339
339
  |:---------------------------------|:---------|:--------|:---------------------------------------------------------------------------------------------------------------------------|
340
340
  | `--reach` | False | False | Enable reachability analysis to identify which vulnerable functions are actually called by your code. Creates a full application reachability scan (`scan_type=socket_tier1`). |
341
- | `--reach-version` | False | 15.12.11 | Version of the Coana CLI to use. Defaults to the pinned version that ships with this CLI release, so the engine only changes when you upgrade the Socket CLI. Pass `latest` to always use the newest published version (opt-in auto-update), or an explicit version (e.g. `1.2.3`) to pin it. |
341
+ | `--reach-version` | False | 15.13.0 | Version of the Coana CLI to use. Defaults to the pinned version that ships with this CLI release, so the engine only changes when you upgrade the Socket CLI. Pass `latest` to always use the newest published version (opt-in auto-update), or an explicit version (e.g. `1.2.3`) to pin it. |
342
342
  | `--reach-analysis-timeout` | False | 10m | Timeout for each reachability analysis run, e.g. `90s`, `10m` or `1h`. Omitted by default, so coana applies its own default (`10m`). Alias: `--reach-timeout` |
343
343
  | `--reach-analysis-memory-limit` | False | 8GB | Memory limit for each reachability analysis run, e.g. `512MB` or `8GB`. Omitted by default, so coana applies its own default (`8GB`). Alias: `--reach-memory-limit` |
344
344
  | `--reach-concurrency` | False | 1 | Control parallel analysis execution (must be >= 1). Omitted by default, so coana applies its own default. |
@@ -6,21 +6,21 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "socketsecurity"
9
- version = "2.11.3"
9
+ version = "2.11.4"
10
10
  requires-python = ">= 3.11"
11
11
  license = {"file" = "LICENSE"}
12
12
  dependencies = [
13
13
  "requests==2.34.2",
14
14
  "mdutils==1.8.1",
15
15
  "prettytable==3.18.0",
16
- "gitpython==3.2.0",
16
+ "gitpython==3.2.1",
17
17
  "packaging==26.3",
18
18
  "python-dotenv==1.2.4",
19
19
  "socketdev==3.6.1",
20
20
  "beautifulsoup4==4.15.0",
21
21
  "markdown==3.11.1",
22
- "brotli==1.2.0; platform_python_implementation == 'CPython'",
23
- "brotlicffi==1.2.0.2; platform_python_implementation != 'CPython'",
22
+ "brotli==1.2.1; platform_python_implementation == 'CPython'",
23
+ "brotlicffi==1.2.1.0; platform_python_implementation != 'CPython'",
24
24
  # requests' CA bundle. A floor rather than an exact pin, so later trust-store
25
25
  # fixes still reach installs; 2026.10.19 drops the roots behind the
26
26
  # compromised eMudhra intermediates.
@@ -51,7 +51,7 @@ test = [
51
51
  "pytest-watch==4.2.0"
52
52
  ]
53
53
  dev = [
54
- "ruff==0.17.0",
54
+ "ruff==0.17.1",
55
55
  "twine==7.0.0", # for building
56
56
  "uv==0.13.4", # for dependency management
57
57
  "pre-commit==4.7.0",
@@ -1,3 +1,3 @@
1
1
  __author__ = 'socket.dev'
2
- __version__ = '2.11.3'
2
+ __version__ = '2.11.4'
3
3
  USER_AGENT = f'SocketPythonCLI/{__version__}'
@@ -22,7 +22,7 @@ log = logging.getLogger(__name__)
22
22
  # Pinned Coana CLI version. Bumped deliberately per Python CLI release so the
23
23
  # reachability engine version only changes through a standard pip upgrade (advance notice).
24
24
  # Pass --reach-version latest to opt into the newest published version instead.
25
- DEFAULT_COANA_CLI_VERSION: Final = "15.12.11"
25
+ DEFAULT_COANA_CLI_VERSION: Final = "15.13.0"
26
26
 
27
27
  # Vendored from coana-package-manager, where it is generated; the only code that may read or
28
28
  # write the cache Coana shares with the Socket CLIs. See "Launching Coana" in that repo's
@@ -132,7 +132,7 @@ class ReachabilityAnalyzer:
132
132
  org_slug: Socket organization slug
133
133
  target_directory: Directory to analyze
134
134
  tar_hash: Tar hash from manifest upload or existing scan (optional)
135
- output_path: Output file path for results
135
+ output_path: Output file path for results, relative to target_directory unless absolute
136
136
  timeout: Analysis timeout, forwarded verbatim to coana --analysis-timeout
137
137
  (coana parses the units, e.g. '90s', '10m', '1h'; a bare number is seconds)
138
138
  memory_limit: Memory limit, forwarded verbatim to coana --memory-limit
@@ -282,8 +282,9 @@ class ReachabilityAnalyzer:
282
282
  log.error(f"Reachability analysis failed with exit code {returncode}")
283
283
  raise Exception(f"Reachability analysis failed with exit code {returncode}")
284
284
 
285
- # Extract scan ID from output file
286
- scan_id = self._extract_scan_id(output_path)
285
+ # Coana runs in target_directory, so a relative output_path lands there.
286
+ report_path = os.path.join(target_directory, output_path)
287
+ scan_id = self._extract_scan_id(report_path)
287
288
 
288
289
  log.info("Reachability analysis completed successfully")
289
290
  if scan_id:
@@ -291,7 +292,7 @@ class ReachabilityAnalyzer:
291
292
 
292
293
  return {
293
294
  "scan_id": scan_id,
294
- "report_path": output_path,
295
+ "report_path": report_path,
295
296
  "tar_hash_used": tar_hash
296
297
  }
297
298
 
@@ -561,7 +561,7 @@ def main_code():
561
561
 
562
562
  # If only-facts-file mode, mark the facts file for submission
563
563
  if config.only_facts_file:
564
- facts_file_to_submit = os.path.abspath(output_path)
564
+ facts_file_to_submit = os.path.abspath(result['report_path'])
565
565
  log.info(f"Only-facts-file mode: will submit only {facts_file_to_submit}")
566
566
 
567
567
  # If reach-use-only-pregenerated-sboms mode, submit CDX, SPDX, and facts file
@@ -570,9 +570,8 @@ def main_code():
570
570
  sbom_files_to_submit = []
571
571
  for scan_path in scan_paths:
572
572
  sbom_files_to_submit.extend(core.find_sbom_files(scan_path))
573
- # Use relative path for facts file
574
- if os.path.exists(output_path):
575
- sbom_files_to_submit.append(output_path)
573
+ if os.path.exists(result['report_path']):
574
+ sbom_files_to_submit.append(result['report_path'])
576
575
  log.info(f"Pre-generated SBOMs mode: will submit {len(sbom_files_to_submit)} files (CDX, SPDX, and facts file)")
577
576
 
578
577
  except Exception as e:
@@ -20,12 +20,14 @@ from socketsecurity.core.tools.reachability import (
20
20
 
21
21
  VERSION = "1.2.3"
22
22
 
23
- # Records what it was run with in $FAKE_COANA_RUN, or fails when passed --fail.
23
+ # Records what it was run with in $FAKE_COANA_RUN, or fails when passed --fail. Like Coana, it
24
+ # writes the facts file to the --socket-mode path, resolved against its cwd.
24
25
  FAKE_CLI_WRAPPER = """
25
26
  import { writeFileSync } from 'node:fs'
26
27
  const args = process.argv.slice(2)
27
28
  if (args.includes('--fail')) process.exit(1)
28
29
  writeFileSync(process.env.FAKE_COANA_RUN, JSON.stringify({ args, cwd: process.cwd(), env: process.env }))
30
+ writeFileSync(args[args.indexOf('--socket-mode') + 1], JSON.stringify({ tier1ReachabilityScanId: 'reach-scan-id' }))
29
31
  """
30
32
 
31
33
 
@@ -84,6 +86,27 @@ def test_runs_the_cached_cli_wrapper_with_the_args_and_cwd(fake_run_path):
84
86
  assert run["cwd"] == str(fake_run_path.parent)
85
87
 
86
88
 
89
+ @pytest.mark.parametrize("absolute", [False, True])
90
+ def test_report_path_is_where_coana_wrote_the_facts_file(fake_run_path, tmp_path, monkeypatch, absolute):
91
+ target = tmp_path / "project"
92
+ target.mkdir()
93
+ monkeypatch.chdir(tmp_path)
94
+ output_path = str(tmp_path / "out" / "facts.json") if absolute else ".socket.facts.json"
95
+ if absolute:
96
+ (tmp_path / "out").mkdir()
97
+
98
+ result = _analyzer().run_reachability_analysis(
99
+ org_slug="my-org",
100
+ target_directory=str(target),
101
+ tar_hash="tar-hash-abc123",
102
+ output_path=output_path,
103
+ version=VERSION,
104
+ )
105
+
106
+ assert result["report_path"] == (output_path if absolute else str(target / ".socket.facts.json"))
107
+ assert result["scan_id"] == "reach-scan-id"
108
+
109
+
87
110
  def test_reach_debug_appends_debug_long_flag(fake_run_path):
88
111
  """G9: --reach-debug -> coana --debug; does not emit the global -d."""
89
112
  args = _run(fake_run_path, reach_debug=True)["args"]