Session summary

default

scored

afi / afi · cli reviewed proxy at 9b51f95e with Default profile / Minimax · m3 high on afi 0.30.0

Measurements

Unavailable values retain their exported state and reason

Quality

Recall 20%
Model-judged precision N/A
F1 N/A
Tier 1 recall 0%
Tier 2 recall 28.6%
Tier 3 recall 33.3%
Tier 4 recall 0%
Security recall 0%
Defect recall 15.4%
Maintainability recall 0%
Performance recall 66.7%
Median anchor distance 0
Worst anchor distance 1
Refusals a judge overturned Not recorded

Review outcomes

Distinct matched defects 4
Defects missed 16
Findings 4
Unkeyed findings 0
Intended findings 0
Carried findings Not recorded

Cost, usage, and speed

Total bill $0.0849
Review bill $0.0849
Judge bill N/A
Tokens 81706
Duration 4m 53s

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 / 2116b14e41cc
Configuration ID
config-4ec1f072d60dba02
Build
afi 0.30.0 / b0f313c0b59a66ecc7612396dc8db0ea5da13a7a
Comparison
comparison-cf0749903d73090c
Build ID
build-5c6619f952748951
Cohort ID
cohort-fdab2adfb8a4bd39
Harness
bench 1 / c4bc25bc962489fe5de7f71b59f19b2f426564c0 dirty
Adapter
afi 1 / sha256:a1a935298956020ee6d767a756847abb4c00694c88c2eb80d454886ebc4acf8c
Exit code
0
Wall time
293
Deadline exceeded
No
Budget
$3.00
Billing limit
$3.00

Usage

Normalized reviewer-tool usage projection

Input tokens
80579
Output tokens
1127
Cached input
139037
Reasoning tokens
31203
Requests
11
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

The `values()` array orders the two new counters as `[..., sweep_bytes_reclaimed, sweep_blobs_removed]`, but the `COUNTERS` table at line 33-58 lists them as `[..., sweep_blobs_removed_total,… The `values()` array orders the two new counters as `[..., sweep_bytes_reclaimed, sweep_blobs_removed]`, but the `COUNTERS` table at line 33-58 lists them as `[..., sweep_blobs_removed_total, sweep_bytes_reclaimed_total]`. `render()` pairs them positionally, so Prometheus sees blobs_removed reporting the bytes total and bytes_reclaimed reporting the blob count — exactly the swap the "Keeping the two side by side" comment is supposed to prevent.

bug
Category: bug Confidence: Not recorded

services/proxy/src/metrics.rs:88-95

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 13 (locality)
Finding f2

bug

forget(&index, &gone)` is invoked unconditionally at the end of `sweep`, and `gone` accumulates hex digests regardless of `dry_run` (line 137). The route is documented as `?dry_run=true` reports what a sweep would reclaim without removing anything, but a dry run still `unlink`s the index files via `forget`, leaving blobs on disk with no index entries and forcing a refetch on the next cache lookup.

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:140

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 12 (locality)
Finding f3

bug

reclaim` calls `app.sweeper.sweep(dry_run)` (the synchronous entry point at sweep.rs:90), bypassing the `tokio::sync::Mutex` that `Sweeper::run` (sweep.rs:82-85) acquires to honour the module's "One… reclaim` calls `app.sweeper.sweep(dry_run)` (the synchronous entry point at sweep.rs:90), bypassing the `tokio::sync::Mutex` that `Sweeper::run` (sweep.rs:82-85) acquires to honour the module's "One sweep at a time" promise. The background task and any number of concurrent admin requests can now run sweeps in parallel, each iterating candidates over a total the other is mutating.

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 f4

bug

tokio::time::interval(app.cfg.sweep_interval)` fires its first tick at t=0, but the surrounding doc comment on line 106-108 claims "The first tick is one interval away, which is what keeps a proxy… tokio::time::interval(app.cfg.sweep_interval)` fires its first tick at t=0, but the surrounding doc comment on line 106-108 claims "The first tick is one interval away, which is what keeps a proxy that has only just started from sweeping a cache it has not begun to fill." A fresh proxy sweeps an empty store immediately on startup; either the comment or the choice of constructor (`interval_at`) is wrong.

bug
Category: bug Confidence: Not recorded

services/proxy/src/main.rs:113

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 8 (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 ·