mirror of
https://github.com/norandom/OpenUltraSAST.git
synced 2026-10-18 20:49:28 +00:00
feat(ranking): phase 1 -- tier-0 taint requests are no longer asked
A pair with no sink of its family in reach cannot yield a flow, in any
language under any dataflow model, so its taint request is never issued. The
count is recorded as requests_pruned -- exact, so not a degradation -- and a
test asserts that every other pair's request still goes out.
637-file plugin, 500-region budget
tier_counts {0: 2161, 1: 60, 2: 20, 3: 211, 4: 48}
pruned 2,161 of 2,500 = 86% evidence pass 94.5s
taint 339 requests -> 2,400s TIMEOUT
Gate met and exceeded; the scan still does not finish, and the reason corrects
phase 0. "1,148 ms per request" was an average over a 250-request set that was
88% tier 0 and answered instantly; the ~30 real requests in it cost ~9.5s each.
Pruning removes exactly the cheap questions and keeps the expensive ones, so it
cannot make them faster. The honest cost of a taint question that CAN have an
answer is 7-10s at callDepth=3, and that is what phase 2 and 5.13 design
against -- not 1.1s, and not 6.6s either. Both specs corrected.
869 tests pass.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01T7XD7x5KonMdmGRkp63EQG
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
88ada8e48c
commit
9a8e9f083f
@@ -826,8 +826,10 @@
|
||||
independent of the region's family, both repeated 2,500 times. Memoised across the batch (found while
|
||||
building flow-aware-ranking's evidence mode, which asks no dataflow and still took an hour), the same
|
||||
250 requests with both joins on: **2,026.3 s → 287.0 s, 8,105 → 1,148 ms per request, identical 5,779
|
||||
rows.** A 7× speedup with nothing about the analysis changed. The base cost of a taint request is about
|
||||
1.1 s, and the levers above still apply to it.
|
||||
rows.** A 7× speedup with nothing about the analysis changed -- but "1.1 s" is an average over a set
|
||||
that was 88% tier-0 pairs answering instantly. With those pruned (flow-aware-ranking phase 1), the 339
|
||||
requests that CAN have an answer still exceed 2,400 s: **7–10 s per real request at `callDepth = 3`**.
|
||||
The memoisation was real and stays; the per-request figure to design against is that one.
|
||||
- **The estimate this replaces was wrong and worth recording as wrong.** ">0.94s per request" came from
|
||||
assuming taint COMPLETED within its 2,400s ceiling. It timed out, so that was a floor presented as a
|
||||
figure. The measured cost is seven times higher.
|
||||
|
||||
@@ -93,6 +93,17 @@ A phase that cannot show that is not an improvement, it is a story.
|
||||
- **Phase 1 — tier 0 only, no model.** Exact pruning. Gate: **53% fewer taint requests issued, measured** —
|
||||
and nothing more. 1,177 requests at 6.63 s is still 2.2 hours, so this phase does NOT make the scan finish;
|
||||
it halves the problem. Claiming completion here would send someone looking for a bug where there is none.
|
||||
|
||||
**Done 2026-09-10, gate exceeded, scan still does not finish — and the reason corrects phase 0's cost
|
||||
figure.** On the 637-file plugin: `tier_counts = {0: 2161, 1: 60, 2: 20, 3: 211, 4: 48}`, **2,161 of 2,500
|
||||
requests pruned (86%)**, evidence pass 94.5 s. The remaining **339 requests still hit the 2,400 s ceiling**
|
||||
— more than 7 s each.
|
||||
|
||||
Phase 0 reported 1,148 ms per request after memoisation. That was an average over a 250-request set of
|
||||
which 88% were tier 0 and returned instantly; the ~30 real requests in it cost about 9.5 s each. Pruning
|
||||
removes exactly the cheap questions and keeps the expensive ones, so it cannot make those faster. The
|
||||
honest per-request cost of a taint question that *can* have an answer is **7–10 s at `callDepth = 3`**,
|
||||
and that is the number phase 2 and 5.13 must work against — not 1.1 s, and not 6.6 s either.
|
||||
- **Phase 2 — heuristic tiers, still no model.** The vector and tiers defined below, ordered within a tier
|
||||
by a published weighted sum. Gate: `budget_at_recall` — the smallest K holding every pinned CVE — **below
|
||||
50 on every pinned repository**, and `pmpro`'s taint query completing at that K. This is the phase that
|
||||
|
||||
Reference in New Issue
Block a user