src2sink 1.0.1__tar.gz → 1.0.2__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 (124) hide show
  1. {src2sink-1.0.1/src2sink.egg-info → src2sink-1.0.2}/PKG-INFO +20 -1
  2. {src2sink-1.0.1 → src2sink-1.0.2}/README.md +19 -0
  3. {src2sink-1.0.1 → src2sink-1.0.2}/pyproject.toml +1 -1
  4. {src2sink-1.0.1 → src2sink-1.0.2/src2sink.egg-info}/PKG-INFO +20 -1
  5. {src2sink-1.0.1 → src2sink-1.0.2}/LICENSE +0 -0
  6. {src2sink-1.0.1 → src2sink-1.0.2}/setup.cfg +0 -0
  7. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/__init__.py +0 -0
  8. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/__init__.py +0 -0
  9. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/api_client_discovery.py +0 -0
  10. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/auth_cards.py +0 -0
  11. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/crypto_cards.py +0 -0
  12. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/data_stores.py +0 -0
  13. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/graphs.py +0 -0
  14. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/index_v2.py +0 -0
  15. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/library_source_map.py +0 -0
  16. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/openapi_discovery.py +0 -0
  17. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/openapi_edges.py +0 -0
  18. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/openapi_match.py +0 -0
  19. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/openapi_models.py +0 -0
  20. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/openapi_report.py +0 -0
  21. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/payload_producers.py +0 -0
  22. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/phase3.py +0 -0
  23. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/pii_cross_repo.py +0 -0
  24. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/pii_flow_v2.py +0 -0
  25. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/pii_lifecycle.py +0 -0
  26. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/pii_lifecycle_report.py +0 -0
  27. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/pii_touchpoint_collect.py +0 -0
  28. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/pii_touchpoint_utils.py +0 -0
  29. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/queues.py +0 -0
  30. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/ropa.py +0 -0
  31. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/service_call_collect.py +0 -0
  32. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/service_call_index.py +0 -0
  33. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/service_call_models.py +0 -0
  34. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/service_call_report.py +0 -0
  35. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/service_calls.py +0 -0
  36. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/taint_buckets.py +0 -0
  37. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/taint_catalogs.py +0 -0
  38. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/taint_writers.py +0 -0
  39. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/aggregators/traces_index.py +0 -0
  40. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/build_metabase_v2.py +0 -0
  41. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/constants.py +0 -0
  42. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/curate_internal_libraries.py +0 -0
  43. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/__init__.py +0 -0
  44. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/ast_walk.py +0 -0
  45. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/base.py +0 -0
  46. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/config.py +0 -0
  47. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/file_context.py +0 -0
  48. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/go.py +0 -0
  49. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/http_out.py +0 -0
  50. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/java.py +0 -0
  51. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/javascript.py +0 -0
  52. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/kotlin.py +0 -0
  53. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/node_factory.py +0 -0
  54. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/patterns.py +0 -0
  55. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/python_extractor.py +0 -0
  56. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/regex_extractors.py +0 -0
  57. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/ts_extractors.py +0 -0
  58. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/extractors/unified.py +0 -0
  59. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/graph_common.py +0 -0
  60. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/internal_groups.py +0 -0
  61. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/known_api_clients.py +0 -0
  62. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/library_taint_java.py +0 -0
  63. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/limits.py +0 -0
  64. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/models/__init__.py +0 -0
  65. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/models/auth_model.py +0 -0
  66. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/models/crypto_agility.py +0 -0
  67. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/models/pii_lifecycle.py +0 -0
  68. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/models/ropa.py +0 -0
  69. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/prescreen.py +0 -0
  70. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/py.typed +0 -0
  71. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/record_fleet_baseline.py +0 -0
  72. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/renderers/__init__.py +0 -0
  73. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/renderers/markdown.py +0 -0
  74. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/renderers/mermaid.py +0 -0
  75. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/repo_utils.py +0 -0
  76. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/safe_paths.py +0 -0
  77. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/sanitize.py +0 -0
  78. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/schema.py +0 -0
  79. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/trace.py +0 -0
  80. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/trace_batch.py +0 -0
  81. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink/vocabulary.py +0 -0
  82. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink.egg-info/SOURCES.txt +0 -0
  83. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink.egg-info/dependency_links.txt +0 -0
  84. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink.egg-info/entry_points.txt +0 -0
  85. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink.egg-info/requires.txt +0 -0
  86. {src2sink-1.0.1 → src2sink-1.0.2}/src2sink.egg-info/top_level.txt +0 -0
  87. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_aggregators_extra.py +0 -0
  88. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_api_client_discovery.py +0 -0
  89. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_build_internals.py +0 -0
  90. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_build_main.py +0 -0
  91. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_characterization.py +0 -0
  92. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_config_hygiene.py +0 -0
  93. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_curate.py +0 -0
  94. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_dependency_pinning.py +0 -0
  95. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_field_precision.py +0 -0
  96. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_graph_common.py +0 -0
  97. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_internal_groups.py +0 -0
  98. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_limits.py +0 -0
  99. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_module_imports.py +0 -0
  100. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_openapi.py +0 -0
  101. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_output_neutralisation.py +0 -0
  102. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_phase0_smoke.py +0 -0
  103. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_phase1_config.py +0 -0
  104. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_phase1_extractors.py +0 -0
  105. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_phase2_graphs.py +0 -0
  106. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_phase3_pii.py +0 -0
  107. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_phase4_aggregators.py +0 -0
  108. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_phase4_extractor_snapshots.py +0 -0
  109. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_phase4_fleet_regression.py +0 -0
  110. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_phase4_regression.py +0 -0
  111. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_phase4_taint_caps.py +0 -0
  112. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_post_phase4_backlog.py +0 -0
  113. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_prescreen.py +0 -0
  114. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_redos_bounds.py +0 -0
  115. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_renderers.py +0 -0
  116. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_repo_utils_helpers.py +0 -0
  117. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_run_manifest.py +0 -0
  118. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_sanitize.py +0 -0
  119. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_security_input_handling.py +0 -0
  120. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_source_map_fix.py +0 -0
  121. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_trace_batch.py +0 -0
  122. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_trace_render.py +0 -0
  123. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_zz_security_coverage_gate.py +0 -0
  124. {src2sink-1.0.1 → src2sink-1.0.2}/tests/test_zz_untrusted_interpolation_guard.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: src2sink
3
- Version: 1.0.1
3
+ Version: 1.0.2
4
4
  Summary: Cross-repository source-to-sink metabase for LLM-assisted SAST
5
5
  Author: Brett Crawley
6
6
  License-Expression: MIT
@@ -194,6 +194,24 @@ annotations with a stated reason rather than blanket rule exclusions.
194
194
  Publishing a version to PyPI: [`docs/releasing.md`](https://github.com/mimecast/src2sink/blob/main/docs/releasing.md).
195
195
  Known small gaps: [`docs/todo.md`](https://github.com/mimecast/src2sink/blob/main/docs/todo.md).
196
196
 
197
+ ### Verifying a release
198
+
199
+ Releases from 1.0.2 carry signed build provenance (SLSA Build L2) tying each
200
+ artefact to the source commit, tag, and workflow run that produced it — so a file
201
+ claiming to be src2sink can be checked rather than trusted:
202
+
203
+ ```sh
204
+ # downloaded from the GitHub release
205
+ gh attestation verify src2sink-1.0.2-py3-none-any.whl --repo mimecast/src2sink
206
+
207
+ # installed from PyPI (PEP 740 attestation)
208
+ python -m pypi_attestations verify pypi --repo mimecast/src2sink src2sink-1.0.2-*.whl
209
+ ```
210
+
211
+ 1.0.0 and 1.0.1 predate this and have no provenance. What the claim does and does
212
+ not cover — and the plan for Build L3 — is in
213
+ [`docs/slsa.md`](https://github.com/mimecast/src2sink/blob/main/docs/slsa.md).
214
+
197
215
  > **Incremental behaviour:** each re-run compares the repo's current `git HEAD` SHA
198
216
  > against the SHA stored in the existing per-repo JSON. Repos that haven't changed are
199
217
  > skipped (`skip group/name (unchanged)`); only changed repos are re-extracted.
@@ -351,6 +369,7 @@ Do not add public PyPI fallbacks.
351
369
  - [`docs/api-clients-json.md`](https://github.com/mimecast/src2sink/blob/main/docs/api-clients-json.md) — the internal-service binding file.
352
370
  - [`metabase-usage.md`](https://github.com/mimecast/src2sink/blob/main/metabase-usage.md) — using the output as LLM context.
353
371
  - [`docs/releasing.md`](https://github.com/mimecast/src2sink/blob/main/docs/releasing.md) — publishing a version to PyPI.
372
+ - [`docs/slsa.md`](https://github.com/mimecast/src2sink/blob/main/docs/slsa.md) — build-provenance plan (SLSA Build L2 → L3).
354
373
  - [`CHANGELOG.md`](https://github.com/mimecast/src2sink/blob/main/CHANGELOG.md) — what shipped in each version.
355
374
  - [`NEXT_STEPS.md`](https://github.com/mimecast/src2sink/blob/main/NEXT_STEPS.md) — roadmap · [`docs/todo.md`](https://github.com/mimecast/src2sink/blob/main/docs/todo.md) — known small gaps.
356
375
  - `/ai-sast-scanner` skill — SAST prompt this metabase feeds.
@@ -159,6 +159,24 @@ annotations with a stated reason rather than blanket rule exclusions.
159
159
  Publishing a version to PyPI: [`docs/releasing.md`](https://github.com/mimecast/src2sink/blob/main/docs/releasing.md).
160
160
  Known small gaps: [`docs/todo.md`](https://github.com/mimecast/src2sink/blob/main/docs/todo.md).
161
161
 
162
+ ### Verifying a release
163
+
164
+ Releases from 1.0.2 carry signed build provenance (SLSA Build L2) tying each
165
+ artefact to the source commit, tag, and workflow run that produced it — so a file
166
+ claiming to be src2sink can be checked rather than trusted:
167
+
168
+ ```sh
169
+ # downloaded from the GitHub release
170
+ gh attestation verify src2sink-1.0.2-py3-none-any.whl --repo mimecast/src2sink
171
+
172
+ # installed from PyPI (PEP 740 attestation)
173
+ python -m pypi_attestations verify pypi --repo mimecast/src2sink src2sink-1.0.2-*.whl
174
+ ```
175
+
176
+ 1.0.0 and 1.0.1 predate this and have no provenance. What the claim does and does
177
+ not cover — and the plan for Build L3 — is in
178
+ [`docs/slsa.md`](https://github.com/mimecast/src2sink/blob/main/docs/slsa.md).
179
+
162
180
  > **Incremental behaviour:** each re-run compares the repo's current `git HEAD` SHA
163
181
  > against the SHA stored in the existing per-repo JSON. Repos that haven't changed are
164
182
  > skipped (`skip group/name (unchanged)`); only changed repos are re-extracted.
@@ -316,6 +334,7 @@ Do not add public PyPI fallbacks.
316
334
  - [`docs/api-clients-json.md`](https://github.com/mimecast/src2sink/blob/main/docs/api-clients-json.md) — the internal-service binding file.
317
335
  - [`metabase-usage.md`](https://github.com/mimecast/src2sink/blob/main/metabase-usage.md) — using the output as LLM context.
318
336
  - [`docs/releasing.md`](https://github.com/mimecast/src2sink/blob/main/docs/releasing.md) — publishing a version to PyPI.
337
+ - [`docs/slsa.md`](https://github.com/mimecast/src2sink/blob/main/docs/slsa.md) — build-provenance plan (SLSA Build L2 → L3).
319
338
  - [`CHANGELOG.md`](https://github.com/mimecast/src2sink/blob/main/CHANGELOG.md) — what shipped in each version.
320
339
  - [`NEXT_STEPS.md`](https://github.com/mimecast/src2sink/blob/main/NEXT_STEPS.md) — roadmap · [`docs/todo.md`](https://github.com/mimecast/src2sink/blob/main/docs/todo.md) — known small gaps.
321
340
  - `/ai-sast-scanner` skill — SAST prompt this metabase feeds.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "src2sink"
3
- version = "1.0.1"
3
+ version = "1.0.2"
4
4
  description = "Cross-repository source-to-sink metabase for LLM-assisted SAST"
5
5
  authors = [{ name = "Brett Crawley" }]
6
6
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: src2sink
3
- Version: 1.0.1
3
+ Version: 1.0.2
4
4
  Summary: Cross-repository source-to-sink metabase for LLM-assisted SAST
5
5
  Author: Brett Crawley
6
6
  License-Expression: MIT
@@ -194,6 +194,24 @@ annotations with a stated reason rather than blanket rule exclusions.
194
194
  Publishing a version to PyPI: [`docs/releasing.md`](https://github.com/mimecast/src2sink/blob/main/docs/releasing.md).
195
195
  Known small gaps: [`docs/todo.md`](https://github.com/mimecast/src2sink/blob/main/docs/todo.md).
196
196
 
197
+ ### Verifying a release
198
+
199
+ Releases from 1.0.2 carry signed build provenance (SLSA Build L2) tying each
200
+ artefact to the source commit, tag, and workflow run that produced it — so a file
201
+ claiming to be src2sink can be checked rather than trusted:
202
+
203
+ ```sh
204
+ # downloaded from the GitHub release
205
+ gh attestation verify src2sink-1.0.2-py3-none-any.whl --repo mimecast/src2sink
206
+
207
+ # installed from PyPI (PEP 740 attestation)
208
+ python -m pypi_attestations verify pypi --repo mimecast/src2sink src2sink-1.0.2-*.whl
209
+ ```
210
+
211
+ 1.0.0 and 1.0.1 predate this and have no provenance. What the claim does and does
212
+ not cover — and the plan for Build L3 — is in
213
+ [`docs/slsa.md`](https://github.com/mimecast/src2sink/blob/main/docs/slsa.md).
214
+
197
215
  > **Incremental behaviour:** each re-run compares the repo's current `git HEAD` SHA
198
216
  > against the SHA stored in the existing per-repo JSON. Repos that haven't changed are
199
217
  > skipped (`skip group/name (unchanged)`); only changed repos are re-extracted.
@@ -351,6 +369,7 @@ Do not add public PyPI fallbacks.
351
369
  - [`docs/api-clients-json.md`](https://github.com/mimecast/src2sink/blob/main/docs/api-clients-json.md) — the internal-service binding file.
352
370
  - [`metabase-usage.md`](https://github.com/mimecast/src2sink/blob/main/metabase-usage.md) — using the output as LLM context.
353
371
  - [`docs/releasing.md`](https://github.com/mimecast/src2sink/blob/main/docs/releasing.md) — publishing a version to PyPI.
372
+ - [`docs/slsa.md`](https://github.com/mimecast/src2sink/blob/main/docs/slsa.md) — build-provenance plan (SLSA Build L2 → L3).
354
373
  - [`CHANGELOG.md`](https://github.com/mimecast/src2sink/blob/main/CHANGELOG.md) — what shipped in each version.
355
374
  - [`NEXT_STEPS.md`](https://github.com/mimecast/src2sink/blob/main/NEXT_STEPS.md) — roadmap · [`docs/todo.md`](https://github.com/mimecast/src2sink/blob/main/docs/todo.md) — known small gaps.
356
375
  - `/ai-sast-scanner` skill — SAST prompt this metabase feeds.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes