use caseofficial ogbuilds guide

Your codebase's security score, explained: the exact math behind quality·vibes's 0–100

By ogbuilds, the studio behind quality·vibes · updated 2026-06-10

the short answer

quality·vibes's security score is a weighted average of six category subscores: secrets & credentials (30), injection & unsafe code (20), auth & access control (15), data exposure (15), dependencies & supply chain (10), transport & TLS (10). Each category starts at 100 and loses points per finding by severity (critical −40, high −22, medium −10, low −4). The overall number maps to a grade: A at 90+, B at 80+, C at 65+, D at 50+, F below.

Secrets and credentials carries weight 30. That single decision explains most of what your score does, because a repo with a live key committed into it can't score well no matter how tidy the rest is. The remaining math is all on this page, since a number you can't take apart is a number you can't act on.

a quality·vibes report scoring a repo 97/100, with six weighted subscores from secrets & credentials to transport & tls
a real report: the overall score is the weighted average of six category subscores

Why secrets carry almost a third of the score

Every repo is scored across six categories, and they don't count equally. Secrets & credentials carries weight 30, almost a third of the total, because a committed live key is the most directly exploitable thing a repo can contain. Injection & unsafe code is 20. Auth & access control and data exposure are 15 each. Dependencies & supply chain and transport & TLS are 10 each.

The weighting is the opinionated part, tuned to vibe-coded apps: the issues that are both most common in AI-generated codebases and most damaging when public get the most influence. A repo with perfect code and one committed Stripe key scores far worse than a repo with clean secrets and a missing lockfile. Which is the right way round, if you ask which of the two can cost you money by Friday.

The deduction table, worked through

Start each category at 100. Then subtract per finding: 40 for a critical, 22 for a high, 10 for a medium, 4 for a low. Those subtractions stack. One critical and two mediums in the same category leaves it on 100 − 40 − 10 − 10 = 40, and the overall score is the weighted average across all six.

Take a repo with one critical secret finding and one high injection finding, everything else clean. Secrets drops to 60, injection to 78, and the overall lands at (60×30 + 78×20 + 100×15 + 100×15 + 100×10 + 100×10) / 100 = 73.6, a C. Fixing that one secret recovers 12 weighted points by itself. That's why it sits at the top of your findings list.

What the letter grade means, and what it doesn't

The bands: 90 and above is an A, 80 a B, 65 a C, 50 a D, and anything under 50 is an F. An A means the scan found nothing serious. A C means real findings worth a fixing session. A D or F almost always means at least one critical issue, usually a committed secret, and that one gets handled today, starting with credential rotation.

Two boundaries. The score sees only what pattern-based static checks can see: no code execution, no CVE database, no pentest, so 100 reads as "clean against these checks" rather than "invulnerable". And it earns its keep as a delta. Run a scan, paste the prompts into Claude Code, run it again, watch the grade move. The two free scans cover exactly that loop.

quality·vibes's scoring system at a glance

ComponentValueMeaning
Secrets & credentialsweight 30Committed keys, hardcoded passwords, credentialed connection strings
Injection & unsafe codeweight 20String-built SQL, eval/exec, shell-from-variables, unsafe deserialisation
Auth & access controlweight 15Debug mode, wildcard CORS, default/none JWT secrets, cookie flags
Data exposureweight 15Committed .env, key files, service-account JSON, dumps, .gitignore gaps
Dependencies & supply chainweight 10Lockfiles, version pinning, raw-URL deps, curl|sh installs
Transport & TLSweight 10Disabled TLS verification, plain-http calls, missing helmet on Express
Deductions per findingcrit −40 / high −22 / med −10 / low −4They stack, down from each category's starting 100
GradesA ≥90 · B ≥80 · C ≥65 · D ≥50 · F <50Applied to the weighted average of all six categories

frequently asked

Why is one critical finding worth −40?

Because a critical finding, a live committed key say, isn't a 10% problem. The deduction is sized so one critical drags its category to 60 and dents the overall grade visibly, which matches how urgent it is to fix.

Can a category score go below zero?

It floors at zero. Deductions stack per finding, and once a category is on the floor the exact number stops meaning much. Read it as a flag instead: that category needs a session of its own, worked in the order the report ranks it.

Is a score of 100 a guarantee my app is secure?

No. Nothing turned up across the pattern-based checks, and that's worth something. But quality·vibes never executes code, never consults a vulnerability database, and isn't a pentest. A 100 is a clean first pass, not a certificate.

How do I improve my score fastest?

Work the findings list from the top. It's already sorted by severity and category weight, so one critical secret is worth more to you than every low finding in the report combined. Each finding carries its own Claude prompt, so a fix is a paste rather than a project.

Last updated June 10, 2026

ready to try quality·vibes?

scan your repo