Session summary

default

scored

afi / afi · cli reviewed proxy at 9b51f95e with Default profile / Moonshot AI · kimi k3 high on afi 0.30.0

Measurements

Unavailable values retain their exported state and reason

Quality

Recall 35%
Model-judged precision N/A
F1 N/A
Tier 1 recall 66.7%
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 33.3%
Median anchor distance 0
Worst anchor distance 0
Refusals a judge overturned Not recorded

Review outcomes

Distinct matched defects 7
Defects missed 13
Findings 7
Unkeyed findings 0
Intended findings 0
Carried findings Not recorded

Cost, usage, and speed

Total bill $0.2732
Review bill $0.2732
Judge bill N/A
Tokens 35839
Duration 1m 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 / bcdf242be4e8
Configuration ID
config-9a0d29758e9a0aff
Build
afi 0.30.0 / b0f313c0b59a66ecc7612396dc8db0ea5da13a7a
Comparison
comparison-222854e89c33b7aa
Build ID
build-13a6e5be87bc4a53
Cohort ID
cohort-07363c4dd57b37b6
Harness
bench 1 / 348a7e367b8c52f1ce72828ed09c15b0e9fac38b dirty
Adapter
afi 1 / sha256:a1a935298956020ee6d767a756847abb4c00694c88c2eb80d454886ebc4acf8c
Exit code
0
Wall time
118
Deadline exceeded
No
Budget
$12.00
Billing limit
$12.00

Usage

Normalized reviewer-tool usage projection

Input tokens
34466
Output tokens
1373
Cached input
69640
Reasoning tokens
6896
Requests
4
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

clear_partials` unconditionally unlinks every file in `incoming/`, but `BlobStore::writer` (store.rs:171) and `link` (store.rs:147) keep *in-progress* fetches and index temp writes in that same… clear_partials` unconditionally unlinks every file in `incoming/`, but `BlobStore::writer` (store.rs:171) and `link` (store.rs:147) keep *in-progress* fetches and index temp writes in that same directory — the doc claim "a file in `incoming` is a fetch that is not coming back" is false, so any sweep concurrent with a download (every 15 min via `spawn_sweeps`) deletes the partial out from under the writer and the fetch fails at `commit`'s rename

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:224

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 17 (locality)
Finding f2

bug

reclaim` calls `app.sweeper.sweep(dry_run)` directly, bypassing the `running` mutex that only `Sweeper::run` acquires (sweep.rs:83) — the module's own one-at-a-time invariant (sweep.rs:10) is… reclaim` calls `app.sweeper.sweep(dry_run)` directly, bypassing the `running` mutex that only `Sweeper::run` acquires (sweep.rs:83) — the module's own one-at-a-time invariant (sweep.rs:10) is broken, so a concurrent manual sweep and interval sweep each compute removals from a total the other is changing and jointly delete the store far below the ceiling

bug
Category: bug Confidence: Not recorded

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

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 11 (locality)
Finding f3

performance

sweep(dry_run)` is fully synchronous (`fs::read_dir`/`fs::metadata`/`fs::read`/`fs::remove_file` over the entire store) yet runs directly in the async handler and in the spawned loop in main.rs:116… sweep(dry_run)` is fully synchronous (`fs::read_dir`/`fs::metadata`/`fs::read`/`fs::remove_file` over the entire store) yet runs directly in the async handler and in the spawned loop in main.rs:116 — it blocks a Tokio worker thread for the whole duration of a multi-second walk of a large store, stalling unrelated requests the worker was driving

performance
Category: performance Confidence: Not recorded

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

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 6 (locality)
Finding f4

bug

values()` returns `sweep_bytes_reclaimed` then `sweep_blobs_removed`, but `COUNTERS` declares `cairn_proxy_sweep_blobs_removed_total` (line 51) before `cairn_proxy_sweep_bytes_reclaimed_total` (line… values()` returns `sweep_bytes_reclaimed` then `sweep_blobs_removed`, but `COUNTERS` declares `cairn_proxy_sweep_blobs_removed_total` (line 51) before `cairn_proxy_sweep_bytes_reclaimed_total` (line 55) — the positional zip in `render` (line 107) swaps the two, so every scrape exports the blob count under the bytes name and the byte count under the blobs name, silently breaking the `cairn_proxy_sweep_bytes_reclaimed_total` alerting docs/operations.md now prescribes

bug
Category: bug Confidence: Not recorded

services/proxy/src/metrics.rs:94

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 13 (locality)
Finding f5

bug

eviction candidates are sorted by *ascending* `age` ("oldest first" per the comment, but ascending age is newest-first), and combined with the loop at line 119 removing while `remaining >=… eviction candidates are sorted by *ascending* `age` ("oldest first" per the comment, but ascending age is newest-first), and combined with the loop at line 119 removing while `remaining >= max_bytes`, the sweep deletes the most recently fetched blobs first and stops before touching the actually-oldest ones — the exact opposite of the stated LRU intent

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:102

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 1 (locality)
Finding f6

bug

the comment says a symlink "is counted at the size of the link", but line 164 uses `fs::metadata`, which follows links — a symlinked blob is counted at its target's size while line 126's… the comment says a symlink "is counted at the size of the link", but line 164 uses `fs::metadata`, which follows links — a symlinked blob is counted at its target's size while line 126's `fs::remove_file` removes only the link, reclaiming no bytes, so `remaining`/`bytes` are inflated and the sweep reports and stops on numbers that do not match what was freed

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:160

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 4 (locality)
Finding f7

bug

remaining` is decremented and `bytes`/`removed` incremented even when the `fs::remove_file` at line 126 failed (the error is only logged at debug), so a blob that could not be deleted is treated as… remaining` is decremented and `bytes`/`removed` incremented even when the `fs::remove_file` at line 126 failed (the error is only logged at debug), so a blob that could not be deleted is treated as reclaimed — the reported totals and the stop condition diverge from what is actually on disk

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:134

Evidence quote

Not recorded

Suggested fix

Not recorded

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