Skip to content

Commit 15db88d

Browse files
avara1986claude
andcommitted
feat(sca): runtime SCA reachability with telemetry benchmarks
Implements Runtime SCA Reachability — the tracer reports which vulnerable symbols have actually been invoked at runtime, reducing false positives from static SCA analysis. - DependencyEntry model with reachability metadata tracking - DependencyTracker for heartbeat-based dependency reporting - Skip re-report scan when SCA is disabled (idle heartbeat optimization) - CVE loader, registry, resolver, and instrumenter for SCA hooks - SCA product integration with telemetry writer - SLO benchmark suite (benchmarks/telemetry_dependencies/) - Standalone benchmark scripts (perf_bench_heartbeat_cycles/sca_telemetry) - Riot env and suitespec entries for SCA tests and benchmarks - Flask integration test for SCA telemetry via testagent Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 2a51a9a commit 15db88d

50 files changed

Lines changed: 3749 additions & 251 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@
22
# This file is autogenerated by pip-compile with Python 3.14
33
# by the following command:
44
#
5-
# pip-compile --allow-unsafe --no-annotate .riot/requirements/1428c37.in
5+
# pip-compile --allow-unsafe --no-annotate .riot/requirements/11335dd.in
66
#
77
attrs==26.1.0
88
babel==2.18.0
99
blinker==1.9.0
10-
click==8.3.1
10+
certifi==2026.2.25
11+
charset-normalizer==3.4.7
12+
click==8.3.2
1113
coverage[toml]==7.13.5
1214
flask==2.3.3
1315
flask-babel==4.0.0
16+
greenlet==3.3.2
1417
hypothesis==6.45.0
18+
idna==3.11
1519
iniconfig==2.3.0
1620
itsdangerous==2.2.0
1721
jinja2==3.1.6
@@ -21,13 +25,15 @@ opentracing==2.4.0
2125
packaging==26.0
2226
pluggy==1.6.0
2327
psycopg2-binary==2.9.11
24-
pygments==2.19.2
28+
pygments==2.20.0
2529
pytest==9.0.2
2630
pytest-cov==7.1.0
2731
pytest-mock==3.15.1
2832
pytest-randomly==4.0.1
2933
pytz==2026.1.post1
34+
requests==2.33.1
3035
sortedcontainers==2.4.0
31-
sqlalchemy==2.0.48
36+
sqlalchemy==2.0.49
3237
typing-extensions==4.15.0
33-
werkzeug==3.1.7
38+
urllib3==2.6.3
39+
werkzeug==3.1.8
Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@
22
# This file is autogenerated by pip-compile with Python 3.12
33
# by the following command:
44
#
5-
# pip-compile --allow-unsafe --no-annotate .riot/requirements/1df8e9a.in
5+
# pip-compile --allow-unsafe --no-annotate .riot/requirements/148c37a.in
66
#
77
attrs==26.1.0
88
babel==2.18.0
99
blinker==1.9.0
10-
click==8.3.1
10+
certifi==2026.2.25
11+
charset-normalizer==3.4.7
12+
click==8.3.2
1113
coverage[toml]==7.13.5
1214
flask==3.1.3
1315
flask-babel==4.0.0
16+
greenlet==3.3.2
1417
hypothesis==6.45.0
18+
idna==3.11
1519
iniconfig==2.3.0
1620
itsdangerous==2.2.0
1721
jinja2==3.1.6
@@ -21,13 +25,15 @@ opentracing==2.4.0
2125
packaging==26.0
2226
pluggy==1.6.0
2327
psycopg2-binary==2.9.11
24-
pygments==2.19.2
28+
pygments==2.20.0
2529
pytest==9.0.2
2630
pytest-cov==7.1.0
2731
pytest-mock==3.15.1
2832
pytest-randomly==4.0.1
2933
pytz==2026.1.post1
34+
requests==2.33.1
3035
sortedcontainers==2.4.0
31-
sqlalchemy==2.0.48
36+
sqlalchemy==2.0.49
3237
typing-extensions==4.15.0
33-
werkzeug==3.1.7
38+
urllib3==2.6.3
39+
werkzeug==3.1.8
Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,21 @@
22
# This file is autogenerated by pip-compile with Python 3.9
33
# by the following command:
44
#
5-
# pip-compile --allow-unsafe --no-annotate .riot/requirements/5cef9f9.in
5+
# pip-compile --allow-unsafe --no-annotate .riot/requirements/176aab2.in
66
#
77
attrs==26.1.0
88
babel==2.18.0
99
blinker==1.9.0
10+
certifi==2026.2.25
11+
charset-normalizer==3.4.7
1012
click==8.1.8
1113
coverage[toml]==7.10.7
1214
exceptiongroup==1.3.1
1315
flask==2.3.3
1416
flask-babel==4.0.0
17+
greenlet==3.2.5
1518
hypothesis==6.45.0
19+
idna==3.11
1620
importlib-metadata==8.7.1
1721
iniconfig==2.1.0
1822
itsdangerous==2.2.0
@@ -23,15 +27,17 @@ opentracing==2.4.0
2327
packaging==26.0
2428
pluggy==1.6.0
2529
psycopg2-binary==2.9.11
26-
pygments==2.19.2
30+
pygments==2.20.0
2731
pytest==8.4.2
2832
pytest-cov==7.1.0
2933
pytest-mock==3.15.1
3034
pytest-randomly==4.0.1
3135
pytz==2026.1.post1
36+
requests==2.32.5
3237
sortedcontainers==2.4.0
33-
sqlalchemy==2.0.48
38+
sqlalchemy==2.0.49
3439
tomli==2.4.1
3540
typing-extensions==4.15.0
36-
werkzeug==3.1.7
41+
urllib3==2.6.3
42+
werkzeug==3.1.8
3743
zipp==3.23.0
Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@
22
# This file is autogenerated by pip-compile with Python 3.13
33
# by the following command:
44
#
5-
# pip-compile --allow-unsafe --no-annotate .riot/requirements/6843c56.in
5+
# pip-compile --allow-unsafe --no-annotate .riot/requirements/18269eb.in
66
#
77
attrs==26.1.0
88
babel==2.18.0
99
blinker==1.9.0
10-
click==8.3.1
10+
certifi==2026.2.25
11+
charset-normalizer==3.4.7
12+
click==8.3.2
1113
coverage[toml]==7.13.5
1214
flask==3.1.3
1315
flask-babel==4.0.0
16+
greenlet==3.3.2
1417
hypothesis==6.45.0
18+
idna==3.11
1519
iniconfig==2.3.0
1620
itsdangerous==2.2.0
1721
jinja2==3.1.6
@@ -21,13 +25,15 @@ opentracing==2.4.0
2125
packaging==26.0
2226
pluggy==1.6.0
2327
psycopg2-binary==2.9.11
24-
pygments==2.19.2
28+
pygments==2.20.0
2529
pytest==9.0.2
2630
pytest-cov==7.1.0
2731
pytest-mock==3.15.1
2832
pytest-randomly==4.0.1
2933
pytz==2026.1.post1
34+
requests==2.33.1
3035
sortedcontainers==2.4.0
31-
sqlalchemy==2.0.48
36+
sqlalchemy==2.0.49
3237
typing-extensions==4.15.0
33-
werkzeug==3.1.7
38+
urllib3==2.6.3
39+
werkzeug==3.1.8
Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,21 @@
22
# This file is autogenerated by pip-compile with Python 3.10
33
# by the following command:
44
#
5-
# pip-compile --allow-unsafe --no-annotate .riot/requirements/1335c92.in
5+
# pip-compile --allow-unsafe --no-annotate .riot/requirements/190e5df.in
66
#
77
attrs==26.1.0
88
babel==2.18.0
99
blinker==1.9.0
10-
click==8.3.1
10+
certifi==2026.2.25
11+
charset-normalizer==3.4.7
12+
click==8.3.2
1113
coverage[toml]==7.13.5
1214
exceptiongroup==1.3.1
1315
flask==2.3.3
1416
flask-babel==4.0.0
17+
greenlet==3.3.2
1518
hypothesis==6.45.0
19+
idna==3.11
1620
iniconfig==2.3.0
1721
itsdangerous==2.2.0
1822
jinja2==3.1.6
@@ -22,14 +26,16 @@ opentracing==2.4.0
2226
packaging==26.0
2327
pluggy==1.6.0
2428
psycopg2-binary==2.9.11
25-
pygments==2.19.2
29+
pygments==2.20.0
2630
pytest==9.0.2
2731
pytest-cov==7.1.0
2832
pytest-mock==3.15.1
2933
pytest-randomly==4.0.1
3034
pytz==2026.1.post1
35+
requests==2.33.1
3136
sortedcontainers==2.4.0
32-
sqlalchemy==2.0.48
37+
sqlalchemy==2.0.49
3338
tomli==2.4.1
3439
typing-extensions==4.15.0
35-
werkzeug==3.1.7
40+
urllib3==2.6.3
41+
werkzeug==3.1.8

.riot/requirements/1ab3731.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#
2+
# This file is autogenerated by pip-compile with Python 3.12
3+
# by the following command:
4+
#
5+
# pip-compile --allow-unsafe --no-annotate .riot/requirements/1ab3731.in
6+
#
7+
attrs==26.1.0
8+
coverage[toml]==7.13.5
9+
hypothesis==6.45.0
10+
iniconfig==2.3.0
11+
mock==5.2.0
12+
opentracing==2.4.0
13+
packaging==26.0
14+
pluggy==1.6.0
15+
pygments==2.20.0
16+
pytest==9.0.3
17+
pytest-cov==7.1.0
18+
pytest-mock==3.15.1
19+
sortedcontainers==2.4.0

.riot/requirements/1d488a9.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#
2+
# This file is autogenerated by pip-compile with Python 3.13
3+
# by the following command:
4+
#
5+
# pip-compile --allow-unsafe --no-annotate .riot/requirements/1d488a9.in
6+
#
7+
attrs==26.1.0
8+
coverage[toml]==7.13.5
9+
hypothesis==6.45.0
10+
iniconfig==2.3.0
11+
mock==5.2.0
12+
opentracing==2.4.0
13+
packaging==26.0
14+
pluggy==1.6.0
15+
pygments==2.20.0
16+
pytest==9.0.3
17+
pytest-cov==7.1.0
18+
pytest-mock==3.15.1
19+
sortedcontainers==2.4.0
Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@
22
# This file is autogenerated by pip-compile with Python 3.12
33
# by the following command:
44
#
5-
# pip-compile --allow-unsafe --no-annotate .riot/requirements/1f1aeb9.in
5+
# pip-compile --allow-unsafe --no-annotate .riot/requirements/1dbdbea.in
66
#
77
attrs==26.1.0
88
babel==2.18.0
99
blinker==1.9.0
10-
click==8.3.1
10+
certifi==2026.2.25
11+
charset-normalizer==3.4.7
12+
click==8.3.2
1113
coverage[toml]==7.13.5
1214
flask==2.3.3
1315
flask-babel==4.0.0
16+
greenlet==3.3.2
1417
hypothesis==6.45.0
18+
idna==3.11
1519
iniconfig==2.3.0
1620
itsdangerous==2.2.0
1721
jinja2==3.1.6
@@ -21,13 +25,15 @@ opentracing==2.4.0
2125
packaging==26.0
2226
pluggy==1.6.0
2327
psycopg2-binary==2.9.11
24-
pygments==2.19.2
28+
pygments==2.20.0
2529
pytest==9.0.2
2630
pytest-cov==7.1.0
2731
pytest-mock==3.15.1
2832
pytest-randomly==4.0.1
2933
pytz==2026.1.post1
34+
requests==2.33.1
3035
sortedcontainers==2.4.0
31-
sqlalchemy==2.0.48
36+
sqlalchemy==2.0.49
3237
typing-extensions==4.15.0
33-
werkzeug==3.1.7
38+
urllib3==2.6.3
39+
werkzeug==3.1.8

.riot/requirements/1e5dd1a.txt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#
2+
# This file is autogenerated by pip-compile with Python 3.10
3+
# by the following command:
4+
#
5+
# pip-compile --allow-unsafe --no-annotate .riot/requirements/1e5dd1a.in
6+
#
7+
attrs==26.1.0
8+
coverage[toml]==7.13.5
9+
exceptiongroup==1.3.1
10+
hypothesis==6.45.0
11+
iniconfig==2.3.0
12+
mock==5.2.0
13+
opentracing==2.4.0
14+
packaging==26.0
15+
pluggy==1.6.0
16+
pygments==2.20.0
17+
pytest==9.0.3
18+
pytest-cov==7.1.0
19+
pytest-mock==3.15.1
20+
sortedcontainers==2.4.0
21+
tomli==2.4.1
22+
typing-extensions==4.15.0
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
# This file is autogenerated by pip-compile with Python 3.13
33
# by the following command:
44
#
5-
# pip-compile --allow-unsafe --no-annotate .riot/requirements/f40feb8.in
5+
# pip-compile --allow-unsafe --no-annotate .riot/requirements/42964a4.in
66
#
77
attrs==26.1.0
88
babel==2.18.0
99
blinker==1.9.0
1010
certifi==2026.2.25
11-
charset-normalizer==3.4.6
12-
click==8.3.1
11+
charset-normalizer==3.4.7
12+
click==8.3.2
1313
coverage[toml]==7.13.5
1414
flask==3.1.3
1515
flask-babel==4.0.0
@@ -27,17 +27,17 @@ opentracing==2.4.0
2727
packaging==26.0
2828
pluggy==1.6.0
2929
psycopg2-binary==2.9.11
30-
pygments==2.19.2
30+
pygments==2.20.0
3131
pytest==9.0.2
3232
pytest-cov==7.1.0
3333
pytest-mock==3.15.1
3434
pytest-randomly==4.0.1
3535
pytz==2026.1.post1
36-
requests==2.33.0
36+
requests==2.31.0
3737
sortedcontainers==2.4.0
38-
sqlalchemy==2.0.48
38+
sqlalchemy==2.0.49
3939
typing-extensions==4.15.0
4040
urllib3==2.6.3
41-
werkzeug==3.1.7
41+
werkzeug==3.1.8
4242
zope-event==6.1
4343
zope-interface==8.2

0 commit comments

Comments
 (0)