AntFleet

Agent investigation · 0xf1e9…bba3

Ratspeak

1 findingupdated 3 weeks ago
token0xf1e9baa65d418a9025e1851dd2d37f1ad208bba3basescan ↗tweet ↗

SARIF backlog

CodeQL · Snyk · Semgrep

Validate scanner backlog claims through AntFleet's reachability and patch-verification gates, and emit AntFleet findings as SARIF v2.1.0 for GitHub Code Scanning.

1. Export AntFleet findings as SARIF v2.1.0
curl -L https://www.antfleet.dev/api/repos/ratspeak/Ratspeak/findings.sarif \
  -o antfleet.sarif
2. Ingest a scanner SARIF (CodeQL / Snyk / Semgrep)

Tokens are minted server-side via pnpm exec tsx apps/web/scripts/mint-sarif-ingest-token.ts and are valid for 5 minutes. Ask the AntFleet team for one bound to your install + repo.

curl -X POST https://www.antfleet.dev/api/repos/ratspeak/Ratspeak/sarif \
  -H "Authorization: Bearer $ANTFLEET_SARIF_TOKEN" \
  -H "Content-Type: application/json" \
  --data-binary @"@codeql-results.sarif"
3. Render AntFleet findings on the GitHub Security tab

Drop the customer-owned workflow at /integrations/codescanning.yml into your repo's .github/workflows/ directory. It pulls the export above and uploads via github/codeql-action/upload-sarif.

Finding writeups

ratspeak-bench-2026-08-25

MEDIUM bug: Duration::MAX passed to await_ready — patch attempt models_disagreed, unverified

medium3 weeks ago

What the fleet found

AntFleet's two-model consensus review (Claude Opus + GPT-5) ran against 3 commit-replay PRs on [AntFleet/bench-ratspeak](https://github.com/AntFleet/bench-ratspeak) (fork of ratspeak/Ratspeak, pinned at upstream 8651827, 2026-08-19):

| Replay | Surface | Verdict | |--------|---------|---------| | e99752fc1 | runtime: LXMF persistence off protocol lock | Clean | | f10b74540 | dashboard: mobile message selection hardening | Clean | | b3088d282 | android: BLE RNode reconnect lifecycle | 1 unanimous MEDIUM finding |

---

MEDIUM (bug) — Duration::MAX passed to await_ready

Both models unanimously flagged spawn_startup_rnode_activity_monitor ([crates/ratspeak-runtime/src/rnode_activity.rs:268](https://github.com/ratspeak/Ratspeak/blob/main/crates/ratspeak-runtime/src/rnode_activity.rs)):

readiness = observer.await_ready(std::time::Duration::MAX) => readiness,

Reasoning: tokio timer wheels are known to panic via Instant::checked_add overflow when handed near-infinite Durations. Recommended scope: bounded timeout, or an unbounded API variant.

Patch Agent outcome

Patch generation ran against this finding (per-install enablement). Outcome: models_disagreed — both providers declined to propose a patch, so no suggestion block shipped and no patch entered the repro-verifier stage. The finding therefore stands as-agreed and unverified: no executed proof, no shipped fix.

Persisted decline rationales (verbatim, from finding_status):

> Opus: "The specific line observer.await_ready(std::time::Duration::MAX) > referenced by the finding is not present in the SOURCE excerpt shown (which ends > at the tokio::select! before the await_ready call), so I cannot construct a > diff with verbatim context around the change site." > > GPT-5: "A localized patch is impossible because the line containing > observer.await_ready(std::time::Duration::MAX) is not included in the provided > SOURCE, and the rules prohibit reconstructing omitted code."

Both declines are the #132 anti-hallucination floor working as designed: providers refuse to construct diffs against source they weren't shown.

Evidence