Reward established GitHub accounts in freebuff bot-sweep scoring#534
Reward established GitHub accounts in freebuff bot-sweep scoring#534
Conversation
Prevents false-positive high-tier flags for first-day power users whose linked GitHub is years old. A day-1 account running heavy freebuff usage previously scored 90 (high) on volume + new-acct signals alone. Established GH subtracts -20 (≥1y) or -40 (≥3y), pulling these profiles into the medium tier unless an independent signal (creation cluster, 24/7 distinct hours, suspicious email) also trips. Reviewer prompt updated to weight the counter-signal.
Greptile SummaryThis PR recalibrates the freebuff bot-sweep scoring to reward established GitHub accounts as a counter-signal, addressing a false-positive ban of a legitimate day-1 power user with a 4-year-old GitHub account. Changes:
Confidence Score: 4/5Safe to merge — logic is correct, score math is well-reasoned, and the system remains human-supervised throughout. The if-else ordering is correct, the score deltas are calibrated to the stated goal, and the LLM prompt update is symmetric and appropriately caveated. The only open items are a minor prompt field-name inconsistency and the optional cleanup of low/negative-score suspects from the output list — neither affects correctness or safety of the advisory system. No files require special attention. Both changed files are straightforward and low-risk. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[GitHub account age lookup] --> B{ageDays?}
B -->|< 7d| C[+60 — gh-new<7d]
B -->|7–29d| D[+30 — gh-new<30d]
B -->|30–89d| E[+10 — gh-new<90d]
B -->|90–364d| F[No adjustment — neutral zone]
B -->|≥ 365d and < 1095d| G[-20 — gh-established:Xy]
B -->|≥ 1095d 3+ years| H[-40 — gh-established:Xy]
C --> I[Re-score]
D --> I
E --> I
F --> I
G --> I
H --> I
I --> J{score ≥ 80?}
J -->|Yes| K[HIGH tier]
J -->|No| L[MEDIUM tier]
K --> M[Human review + LLM advisory]
L --> M
|
| A very young GitHub account (gh_age < 7d, especially < 1d) combined with heavy usage is one of the strongest bot signals we have: real developers almost never create a GitHub account on the same day they start running an agent. Weigh this heavily in tiering. | ||
| Conversely, an established GitHub account (gh_age ≥ 1 year, especially ≥ 3 years) is a strong counter-signal. Account-age spoofing by buying old accounts is possible but uncommon at our abuse scale. An established GitHub + a natural agent mix (basher, code-reviewer, file-picker alongside the root agent) + some activity gaps during the day reads like an excited first-day power user, not a bot. Don't tier these as HIGH unless there's a second independent signal (creation cluster membership, true 24/7 distinct_hours, suspicious email pattern). |
There was a problem hiding this comment.
Inconsistent field name in LLM guidance
The new guidance uses distinct_hours to describe the field that appears in the suspect data as distinct_hrs24 (line 79). The existing TIER 1 description (line 49) uses yet another variant: distinct_hours_24h. The model sees three names for the same field, which could lead it to misread or misquote a value when justifying a tier decision.
Consider aligning all three occurrences to the actual field name the model will see in the data (distinct_hrs24).
| Conversely, an established GitHub account (gh_age ≥ 1 year, especially ≥ 3 years) is a strong counter-signal. Account-age spoofing by buying old accounts is possible but uncommon at our abuse scale. An established GitHub + a natural agent mix (basher, code-reviewer, file-picker alongside the root agent) + some activity gaps during the day reads like an excited first-day power user, not a bot. Don't tier these as HIGH unless there's a second independent signal (creation cluster membership, true 24/7 distinct_hours, suspicious email pattern). | |
| Don't tier these as HIGH unless there's a second independent signal (creation cluster membership, true 24/7 distinct_hrs24, suspicious email pattern). |
Summary
Test plan
🤖 Generated with Claude Code