Session summary

default

scored

afi / afi · cli reviewed proxy at 9b51f95e with Default profile / OpenAI · gpt 5.6 sol high on afi 0.30.0

Measurements

Unavailable values retain their exported state and reason

Quality

Recall 60%
Model-judged precision N/A
F1 N/A
Tier 1 recall 100%
Tier 2 recall 57.1%
Tier 3 recall 50%
Tier 4 recall 50%
Security recall 50%
Defect recall 76.9%
Maintainability recall 0%
Performance recall 33.3%
Median anchor distance 0
Worst anchor distance 0
Refusals a judge overturned Not recorded

Review outcomes

Distinct matched defects 12
Defects missed 8
Findings 12
Unkeyed findings 0
Intended findings 0
Carried findings Not recorded

Cost, usage, and speed

Total bill $0.1998
Review bill $0.1998
Judge bill N/A
Tokens 1574
Duration 2m 5s

Execution and identity

Lifecycle, reviewer, build, settings, and normalized execution limits

Lifecycle
completed
Lifecycle reason
Not recorded
Started
Finished
Reviewer
afi
Reviewer tool
afi · cli
Configuration
default / 89cd13e3b4e0
Configuration ID
config-323a87a9eb99b1e3
Build
afi 0.30.0 / b0f313c0b59a66ecc7612396dc8db0ea5da13a7a
Comparison
comparison-004ca4a8ec71f5cd
Build ID
build-13a6e5be87bc4a53
Cohort ID
cohort-fdab2adfb8a4bd39
Harness
bench 1 / 348a7e367b8c52f1ce72828ed09c15b0e9fac38b dirty
Adapter
afi 1 / sha256:a1a935298956020ee6d767a756847abb4c00694c88c2eb80d454886ebc4acf8c
Exit code
0
Wall time
125
Deadline exceeded
No
Budget
$8.00
Billing limit
$8.00

Usage

Normalized reviewer-tool usage projection

Input tokens
15
Output tokens
1559
Cached input
96617
Reasoning tokens
6785
Requests
5
Models counted
Not recorded

Judge

Normalized assessment summary

Judge data is N/A for this run

Findings

Review text is escaped; normalized decisions follow each finding

Finding f1

bug

forget` runs even for `dry_run=true`, deleting index entries and turning a supposedly non-destructive preview into cache misses and upstream refetches

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:140

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 12 (locality)
Finding f2

bug

The sweep unlinks every file in `incoming` without checking age or ownership, including active artifact and index writes, causing concurrent fetches to fail during commit or link

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:232

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 17 (locality)
Finding f3

bug

A newly committed blob is temporarily absent from the index before `BlobStore::link`, so a concurrent sweep treats it as orphaned, deletes it, and makes the in-flight cache request fail

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:119

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 18 (locality)
Finding f4

security

fs::metadata` follows directory symlinks, so recursive collection can escape the blob root and the sweep can delete files in the symlink target

security
Category: security Confidence: Not recorded

services/proxy/src/sweep.rs:164

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 4 (locality)
Finding f5

bug

On-demand sweeps call `sweep` directly instead of the mutex-protected `run`, allowing HTTP sweeps and the scheduled sweep to overlap and over-evict the cache

bug
Category: bug Confidence: Not recorded

services/proxy/src/routes/admin.rs:76

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 6 (locality)
Finding f6

performance

The synchronous recursive filesystem walk runs directly on a Tokio worker thread, so a large scheduled or HTTP sweep can stall unrelated requests

performance
Category: performance Confidence: Not recorded

services/proxy/src/sweep.rs:84

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 11 (locality)
Finding f7

bug

Sorting elapsed ages ascending processes the newest blobs first, so capacity eviction removes recently written blobs instead of the oldest ones

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:102

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 1 (locality)
Finding f8

bug

Failed deletions are still subtracted from `remaining`, counted as reclaimed, and added to `gone`, so the sweep can delete their index entries while leaving the bytes on disk and falsely report the… Failed deletions are still subtracted from `remaining`, counted as reclaimed, and added to `gone`, so the sweep can delete their index entries while leaving the bytes on disk and falsely report the store under its ceiling

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:134

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 2 (locality)
Finding f9

bug

Sweep metric values are emitted in the reverse order of `COUNTERS`, causing the blobs-removed metric to report bytes and the bytes-reclaimed metric to report blob count

bug
Category: bug Confidence: Not recorded

services/proxy/src/metrics.rs:94

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 13 (locality)
Finding f10

performance

Eviction age uses modification time, which cache reads never update, so frequently accessed old blobs are treated as cold and evicted while less-used newer blobs remain

performance
Category: performance Confidence: Not recorded

services/proxy/src/sweep.rs:186

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 5 (locality)
Finding f11

bug

tokio::time::interval` yields its first tick immediately, so the proxy sweeps at startup rather than waiting one configured interval as documented

bug
Category: bug Confidence: Not recorded

services/proxy/src/main.rs:108

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 7 (locality)
Finding f12

bug

Using `remaining >= self.max_bytes` evicts a blob when usage exactly equals the configured maximum, even though the store is already within the ceiling

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:120

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 3 (locality)

Source artifacts

Open a row to inspect or download evidence from this atomically published local run

findings present

Open verified source artifact

Open this path at the exported commit

The artifact is present; its content is available through the verified source link

meta present

Open verified source artifact

Open this path at the exported commit

The artifact is present; its content is available through the verified source link

record present

Open verified source artifact

Open this path at the exported commit

The artifact is present; its content is available through the verified source link

result present

Open verified source artifact

Open this path at the exported commit

The artifact is present; its content is available through the verified source link

spend present

Open verified source artifact

Open this path at the exported commit

The artifact is present; its content is available through the verified source link

stderr present

Open verified source artifact

Open this path at the exported commit

The artifact is present; its content is available through the verified source link

summary present

Open verified source artifact

Open this path at the exported commit

The artifact is present; its content is available through the verified source link

traffic present

Open verified source artifact

Open this path at the exported commit

The artifact is present; its content is available through the verified source link

benchee benchee-dashboard-1 built from 10f4ec58 Static benchmark evidence ·