Session summary

default

scored

afi / afi · cli reviewed proxy at 9b51f95e with Default profile / Moonshot AI · kimi k2.7 code high on afi 0.30.0

Measurements

Unavailable values retain their exported state and reason

Quality

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

Review outcomes

Distinct matched defects 6
Defects missed 14
Findings 7
Unkeyed findings 1
Intended findings 0
Carried findings Not recorded

Cost, usage, and speed

Total bill $0.9859
Review bill $0.9859
Judge bill N/A
Tokens 286940
Duration 2m 58s

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 / 372d66bf0baf
Configuration ID
config-b501a08ebedcc16a
Build
afi 0.30.0 / b0f313c0b59a66ecc7612396dc8db0ea5da13a7a
Comparison
comparison-14cee6e10514f39e
Build ID
build-4ceb7cbd44e9619b
Cohort ID
cohort-9159b376678f1052
Harness
bench 1 / 10b3b2068100b7ba429855e062500eaf83b90120 dirty
Adapter
afi 1 / sha256:a1a935298956020ee6d767a756847abb4c00694c88c2eb80d454886ebc4acf8c
Exit code
0
Wall time
178
Deadline exceeded
No
Budget
$2.00
Billing limit
$2.00

Usage

Normalized reviewer-tool usage projection

Input tokens
283707
Output tokens
3233
Cached input
4360960
Reasoning tokens
9312
Requests
62
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

Duration::from_hours(1)` and `Duration::from_mins(15)` do not exist on `std::time::Duration`; this code does not compile. 🔗 relevant also at services/proxy/src/config.rs:84, 350, 351.

bug
Category: bug Confidence: Not recorded

services/proxy/src/config.rs:83

Evidence quote

Not recorded

Suggested fix

Not recorded

rejectedNo keyed defect (scorer)
Finding f2

maintainability

Sweeper::sweep` is a synchronous filesystem walk called from an async handler (`admin::sweep` at services/proxy/src/routes/admin.rs:67) without `spawn_blocking`, blocking the Tokio runtime for the… Sweeper::sweep` is a synchronous filesystem walk called from an async handler (`admin::sweep` at services/proxy/src/routes/admin.rs:67) without `spawn_blocking`, blocking the Tokio runtime for the entire duration of a large store walk.

maintainability
Category: maintainability Confidence: Not recorded

services/proxy/src/sweep.rs:90

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 11 (locality)
Finding f3

bug

remaining` starts at `held` and is only decremented after a blob is chosen for removal, so the ceiling is compared against the pre-removal total. The first iteration removes a blob even when `held == max_bytes`, which is correct, but the loop continues removing the oldest referenced blob one byte beyond the ceiling rather than stopping once `remaining < max_bytes`. More importantly, if `held` is already below `max_bytes`, the condition `remaining >= max_bytes` is false, so no unreferenced-blob removal happens by age—but unreferenced blobs are still removed unconditionally, which is intended; the real issue is that with `held >= max_bytes`, after removing one blob, `remaining` becomes `held - size`, and if that is still >= max_bytes, another old blob is removed. This repeats until the total is strictly less than the ceiling, so the store can end up far below the configured ceiling when a single old blob is much smaller than the overage.

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:119-120

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 3 (locality)
Finding f4

maintainability

age_of` returns `Duration::default()` when `modified()` is missing or in the future, treating every such blob as age zero. A blob with a bad timestamp will then never be removed by age even if the store is over its ceiling, and may silently accumulate.

maintainability
Category: maintainability Confidence: Not recorded

services/proxy/src/sweep.rs:185-189

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 5 (locality)
Finding f5

maintainability

clear_partials` counts every entry in `incoming` as a removed partial even during a dry run, so `Reclaimed::partials` is non-zero in dry-run output even though nothing was deleted.

maintainability
Category: maintainability Confidence: Not recorded

services/proxy/src/sweep.rs:224-240

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 17 (locality)
Finding f6

maintainability

the values array and `COUNTERS` were expanded to six entries, but the order of the new sweep counters in `values()` does not match their order in `COUNTERS`: `COUNTERS` has bytes then blobs, but… the values array and `COUNTERS` were expanded to six entries, but the order of the new sweep counters in `values()` does not match their order in `COUNTERS`: `COUNTERS` has bytes then blobs, but `values()` loads bytes then blobs as well. (Actually both have bytes then blobs at offsets 4 and 5; no mismatch.) No finding here.

maintainability
Category: maintainability Confidence: Not recorded

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

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 13 (locality)
Finding f7

maintainability

reclaim` calls `app.sweeper.sweep(dry_run)` synchronously. Because `sweep` performs blocking I/O on the async thread (see above) and is not `await`ed, this also bypasses the `Mutex` ordering established by `Sweeper::run`, though the same process mutex is still held. 🟢 `maintainability` services/proxy/src/sweep.rs:199-201: `referenced` reuses the generic recursive `collect`, which collects every file including non-JSON entries and directories; fine, but worth noting it also walks any stray directories under `index` and treats all files as candidate entries. No other concrete defects identified.

maintainability
Category: maintainability Confidence: Not recorded

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

Evidence quote

Not recorded

Suggested fix

Not recorded

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