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 15%
Model-judged precision N/A
F1 N/A
Tier 1 recall 33.3%
Tier 2 recall 0%
Tier 3 recall 16.7%
Tier 4 recall 25%
Security recall 0%
Defect recall 23.1%
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 3
Defects missed 17
Findings 4
Unkeyed findings 1
Intended findings 0
Carried findings Not recorded

Cost, usage, and speed

Total bill $0.0448
Review bill $0.0448
Judge bill N/A
Tokens 53969
Duration 1m 57s

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-1408f01117f795c2
Build ID
build-913c48fc7b53af61
Cohort ID
cohort-b65e5ff0e0bc5ce2
Harness
bench 1 / 510c32b5841ecbfd4f98c2e8a431b98b80327ba1 dirty
Adapter
afi 1 / sha256:a1a935298956020ee6d767a756847abb4c00694c88c2eb80d454886ebc4acf8c
Exit code
0
Wall time
117
Deadline exceeded
No
Budget
$3.00
Billing limit
$3.00

Usage

Normalized reviewer-tool usage projection

Input tokens
53192
Output tokens
777
Cached input
84003
Reasoning tokens
4404
Requests
8
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

values()` reads `sweep_bytes_reclaimed` at index 4 and `sweep_blobs_removed` at index 5, but `COUNTERS` at lines 50-57 has the opposite order (`sweep_blobs_removed_total` first,… values()` reads `sweep_bytes_reclaimed` at index 4 and `sweep_blobs_removed` at index 5, but `COUNTERS` at lines 50-57 has the opposite order (`sweep_blobs_removed_total` first, `sweep_bytes_reclaimed_total` second). The exposition will render blob counts under the bytes-reclaimed metric name and vice versa - exactly the failure mode the comment on lines 30-32 warns about.

bug
Category: bug Confidence: Not recorded

services/proxy/src/metrics.rs:88

Evidence quote

Not recorded

Suggested fix

Not recorded

rejectedNo keyed defect (scorer)
Finding f2

bug

!index.contains_key(hex)` removes a blob when no index entry references it, but the cache write order in `store.rs` (`BlobWriter::commit` renames the blob into place, then the route writes the index… !index.contains_key(hex)` removes a blob when no index entry references it, but the cache write order in `store.rs` (`BlobWriter::commit` renames the blob into place, then the route writes the index entry via `BlobStore::link`) lets a sweep running between those two steps see a blob with no index entry yet and delete it. The trailing `link` then writes a stale entry that forces a guaranteed miss on the next request; the same path also removes the orphan-safety guarantee the comment on lines 117-118 relies on.

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:119

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 3 (locality)
Finding f3

bug

forget(&index, &gone)` runs unconditionally, including on a dry run, and the loop in `forget` only calls `fs::remove_file` (no `dry_run` argument). A `?dry_run=true` call to `POST /v1/admin/cache/sweep` would still delete index entries for the blobs whose bytes it did not remove, leaving the index pointing at now-removed bytes on a query the operator believed was read-only.

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:140

Evidence quote

Not recorded

Suggested fix

Not recorded

matchedDefect 12 (locality)
Finding f4

bug

The age floor (`candidate.age >= self.min_age`) is only applied to the ceiling-driven removal branch, but the second branch (`remaining >= self.max_bytes`) is checked before the first; if the store… The age floor (`candidate.age >= self.min_age`) is only applied to the ceiling-driven removal branch, but the second branch (`remaining >= self.max_bytes`) is checked before the first; if the store is already over the ceiling at sweep start, even freshly-fetched blobs that an index entry *does* name are removed as long as `remaining` stays above `max_bytes`, contradicting the docs/operations.md claim that `CAIRN_CACHE_MIN_AGE` is a grace period protecting recent fetches (the grace only protects when the store is *not* over the ceiling at sweep entry).

bug
Category: bug Confidence: Not recorded

services/proxy/src/sweep.rs:119

Evidence quote

Not recorded

Suggested fix

Not recorded

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