roast-my-code
Roast the target codebase with devastating accuracy and actionable fixes.
Usage
/roast # Review cwd at spicy level
/roast src/ # Review src/ directory
/roast --level=savage # Maximum roast intensity
/roast src/ --level=sensei # TDD-focused wisdom
/roast --diff # Review staged changes only
/roast --quick # Fast scan (top 3 checkers)
/roast --lang=ja # Force output language
Levels
| Level |
Tone |
Best For |
| gentle |
Friendly mentor |
Juniors, OSS contributors |
| spicy |
Sarcastic reviewer (default) |
Daily use, team reviews |
| savage |
Brutally honest senior |
Content, self-roasts |
| sensei |
TDD master (t_wada style) |
TDD adoption, testing culture |
Instructions
Follow these steps precisely. Do NOT skip any step.
Step 1: Parse Arguments
Parse the user's input to extract:
TARGET_PATH: directory or file to review (default: current working directory)
LEVEL: one of gentle/spicy/savage/sensei (default: spicy)
OUTPUT_LANG: detect from the user's message language (en or ja).
If the user wrote in Japanese, set to ja. Otherwise, set to en.
If --lang= is specified, use that value instead of auto-detection.
DIFF_MODE: boolean (default: false). If --diff is present, set to true.
QUICK_MODE: boolean (default: false). If --quick is present, set to true.
Extract --level=, --lang=, --diff, --quick from the argument string.
Everything else is treated as the target path.
Diff mode: When DIFF_MODE is true, run git diff --cached --name-only
via Bash to get the list of staged files. Only analyze those files instead
of the full project. If no files are staged, inform the user and exit.
Project detection (Step 2) still runs normally to determine framework context.
Quick mode: When QUICK_MODE is true, run only these 3 checkers:
Security, Architecture, TDD. Skip all other checkers. Output includes a
note that this was a quick scan.
Step 2: Project Detection
Analyze the target to detect the project type. Run these checks:
Glob: TARGET_PATH/**/package.json
Glob: TARGET_PATH/**/tsconfig.json
Glob: TARGET_PATH/**/Cargo.toml
Glob: TARGET_PATH/**/go.mod
Glob: TARGET_PATH/**/requirements.txt
Glob: TARGET_PATH/**/pyproject.toml
Glob: TARGET_PATH/**/*.sln
Glob: TARGET_PATH/.git
Read the root-level package.json (at TARGET_PATH/package.json) first.
If none exists, fall back to the nearest package.json to TARGET_PATH.
Extract:
dependencies and devDependencies keys
scripts keys
engines field
Detect frameworks by checking dependency names:
- HTTP frameworks: express, hono, fastify, koa, @nestjs/core
- Frontend frameworks: react, vue, svelte, @angular/core, next, nuxt
- Test frameworks: jest, vitest, mocha, @testing-library/*
- Language: presence of tsconfig.json = TypeScript
Store results as:
LANG: typescript | javascript | rust | go | python | csharp | unknown
HAS_TESTS: boolean
HAS_HTTP_FRAMEWORK: boolean
HAS_FRONTEND_FRAMEWORK: boolean
HAS_GIT: boolean
HAS_PACKAGE_MANIFEST: boolean
Step 3: Checker Activation
Determine which checkers to run based on detection results:
| Checker |
Reference File |
Condition |
| Security |
references/security.md |
Always |
| Architecture |
references/architecture.md |
Always |
| Complexity |
references/complexity.md |
Always |
| TDD |
references/tdd.md |
Always |
| Type Safety |
references/type-safety.md |
LANG = typescript OR .ts/.tsx files found |
| Error Handling |
references/error-handling.md |
Always |
| Naming |
references/naming.md |
Always |
| Dead Code |
references/dead-code.md |
Always |
| Performance |
references/performance.md |
Always |
| Dependencies |
references/dependencies.md |
HAS_PACKAGE_MANIFEST |
| API Design |
references/api-design.md |
HAS_HTTP_FRAMEWORK |
| Frontend |
references/frontend.md |
HAS_FRONTEND_FRAMEWORK |
| Git Hygiene |
references/git-hygiene.md |
HAS_GIT |
Step 4: Execute Checks (2-Phase)
Uses a compact index for fast detection, then reads full reference files
only for categories with findings.
Phase 1: Quick Scan
Read references/checks-index.md (single file — all 162 check
patterns in one place).
Batch Grep execution — combine patterns per category x severity:
- For each active checker category, combine all Grep patterns at the
same severity level using
| (OR) into a single Grep call.
- Example: Security Grep [critical] has 6 patterns — combine into
1 Grep call with patterns joined by
|.
- This reduces ~100+ individual Greps to ~20-30 batched calls.
- Presence (P): pattern found = potential finding. Map matched
lines back to the specific check by inspecting which sub-pattern
matched.
- Absence (A): run a separate Grep per absence check. Zero
results = finding.
Glob checks — run all Glob patterns from the index in parallel.
Bash checks — run Bash commands from the index in parallel where
independent. Group related commands together.
Map results — for each match, identify the specific check name
from the index. Record:
- Which categories have findings (= need Phase 2 detail)
- Which categories are clean (= Strengths, skip in Phase 2)
- Approximate severity distribution per category
Phase 1 rules:
- Skip
node_modules/, dist/, build/, .next/, vendor/,
target/, .git/ directories.
- Sample up to 20 files per category for tractability.
- For large projects, prioritize:
src/ > lib/ > app/ > others.
Phase 1 target: ~20-30 Grep + 10-15 Glob/Bash calls total.
Phase 2: Detailed Roast
Read references/roast-style.md to load the roast persona for
the selected LEVEL.
For each category WITH findings from Phase 1:
a. Read the category's full reference file (e.g.,
references/security.md).
b. For each finding detected in Phase 1, extract from the reference:
- Roast line (en and ja — select based on OUTPUT_LANG)
- Fix description
- Exact deduction value
c. Refine findings: verify context around matches, discard false
positives from batch grep, deepen analysis where needed.
d. Record each confirmed finding with:
category: checker name
check: check item name
severity: critical / error / warning / info
location: file path and line number(s)
evidence: the actual code/pattern found
deduction: point deduction value
For categories with zero findings: do NOT read the reference
file. Add the category to Strengths in the final output.
Important rules:
- Only report findings backed by actual evidence found in the code.
- Do NOT invent findings for entertainment. Every roast must be
grounded in fact.
- Deduplication: If the same issue appears in multiple checkers
(e.g., CORS in Security and API Design, Error Boundaries in Error
Handling and Frontend), count the deduction in only ONE category —
whichever is more specific. Note the cross-reference in the other
category without deducting.
- Per-check cap: max 3 findings per check type count toward the
score. Additional instances are reported but do not deduct further.
- Parallelism: Run Grep and Glob calls for independent checks in
parallel where possible. Batch tool calls to minimize round-trips.
Step 5: Calculate Scores
For each active checker category:
- Start at 100 points.
- Apply deductions for each finding:
critical: -20 points
error: -10 points
warning: -4 points
info: -1 point
- Per-check cap: Max 3 findings per check type count toward the
score. Additional instances are reported but do not deduct further points.
- Floor at 0 (no negative scores).
- The category score displayed in the table is always out of 100
(do NOT multiply by weight here).
Calculate the Overall Score using category weights:
- Weights: Security 1.5x, Architecture 1.2x,
TDD 1.5x in sensei mode (1.0x otherwise), all others 1.0x.
overall = sum(score_i * weight_i) / sum(weight_i)
- Weights are used ONLY in this overall calculation, not on individual
category scores.
Determine the Grade:
| Grade |
Score Range |
Label |
| S |
90 - 100 |
Immaculate |
| A |
80 - 89 |
Solid |
| B |
70 - 79 |
Decent |
| C |
60 - 69 |
Needs Work |
| D |
40 - 59 |
Rough |
| F |
0 - 39 |
Dumpster Fire |
Step 6: Generate Output
Compose the final output using the Output Format below.
Apply the roast persona from roast-style.md for the selected LEVEL.
Rules:
- Every finding gets a roast line AND a concrete fix.
- Group findings by category.
- Show the most critical findings first within each category.
- Keep total output under 300 lines. If more findings exist, show top 5 per
category and note how many were omitted.
- Lines should be under 80 characters where possible for screenshot-friendliness.
- Language: If
OUTPUT_LANG is ja, write all roast lines, fix descriptions,
summary text, and section labels in Japanese. Category names in the scorecard
table and structural elements (box-drawing, header) remain in English.
If OUTPUT_LANG is en, write everything in English.
Output Format
Generate output following this structure (adapt rows to active checkers):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔥 ROAST MY CODE — REPORT CARD 🔥
Level: {LEVEL} | Target: {TARGET_PATH}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 OVERALL: {GRADE} ({SCORE}/100)
┌─────────────────────────────────────┐
│ Category Score Grade │
├─────────────────────────────────────┤
│ Security {xx}/100 {G} │
│ Architecture {xx}/100 {G} │
│ Complexity {xx}/100 {G} │
│ TDD {xx}/100 {G} │
│ Type Safety {xx}/100 {G} │
│ Error Handling {xx}/100 {G} │
│ Naming {xx}/100 {G} │
│ Dead Code {xx}/100 {G} │
│ Performance {xx}/100 {G} │
│ Dependencies {xx}/100 {G} │
│ API Design {xx}/100 {G} │
│ Frontend {xx}/100 {G} │
│ Git Hygiene {xx}/100 {G} │
└─────────────────────────────────────┘
(Only show rows for active checkers)
━━━ 🔥 FINDINGS ━━━━━━━━━━━━━━━━━━━━━━
## {CATEGORY} ({SCORE}/100)
### 🚨 {CHECK_NAME} [{SEVERITY}]
📍 {file_path}:{line}
> {code evidence or description}
💬 "{ROAST_LINE}"
🔧 Fix: {actionable fix description}
---
(Repeat for each finding, grouped by category)
━━━ 📋 SUMMARY ━━━━━━━━━━━━━━━━━━━━━━━
🏆 Top 3 Strengths:
1. {strength}
2. {strength}
3. {strength}
💀 Top 3 Priorities to Fix:
1. {priority with file reference}
2. {priority with file reference}
3. {priority with file reference}
📈 Quick Wins (< 5 min each):
- {quick fix 1}
- {quick fix 2}
- {quick fix 3}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Roasted with ❤️ by roast-my-code
⭐ github.com/sakimyto/roast-my-code
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Output Rules
- Scorecard table always appears first.
- Findings are grouped by category, ordered by score
(worst category first).
- Within each category, findings are ordered: critical > error >
warning > info.
- Summary always appears last.
- If a category scored 100 (no findings), show it in the table
but skip the findings section for it. Add it to Strengths.
- The roast line MUST match the selected LEVEL's tone from
roast-style.md.
- Every roast MUST be paired with a Fix.
- Use box-drawing characters for the table exactly as shown.
- If the overall grade is S, add a congratulatory roast:
"I came here to roast, but your code left me speechless.
Well played."
Scoring Quick Reference
| Severity |
Deduction |
Examples |
| critical |
-20 |
Hardcoded secrets, SQL injection, no tests |
| error |
-10 |
Empty catch, God files, any abuse |
| warning |
-4 |
console.log, TODO comments, inline styles |
| info |
-1 |
Missing engine field, no readonly |
| Weight |
Category |
Multiplier |
Note |
| High |
Security |
1.5x |
Always |
| Medium |
Architecture |
1.2x |
Always |
| Elevated |
TDD |
1.5x |
sensei mode only (1.0x otherwise) |
| Normal |
All others |
1.0x |
|
Note: Weights apply ONLY to the overall weighted average, not to
individual category scores (which are always displayed out of 100).
Per-check cap: max 3 findings per check type count toward the score.
| Grade |
Range |
Vibe |
| S |
90-100 |
Ship it yesterday |
| A |
80-89 |
Production-ready |
| B |
70-79 |
Code review approved |
| C |
60-69 |
Needs another pass |
| D |
40-59 |
Intern's first week? |
| F |
0-39 |
Call the fire department |
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: roast-my-code3description: Comprehensive code review in roast style. Analyzes security, architecture, complexity, TDD compliance, type safety, error handling, naming, dead code, performance, dependencies, API design, frontend quality, and git hygiene. Delivers findings as entertaining roasts with actionable fixes. Use /roast to review your codebase. Supports --level (gentle/spicy/savage/sensei). Use when this capability is needed.4---56# roast-my-code78Roast the target codebase with devastating accuracy and actionable fixes.910## Usage1112```13/roast # Review cwd at spicy level14/roast src/ # Review src/ directory15/roast --level=savage # Maximum roast intensity16/roast src/ --level=sensei # TDD-focused wisdom17/roast --diff # Review staged changes only18/roast --quick # Fast scan (top 3 checkers)19/roast --lang=ja # Force output language20```2122## Levels2324| Level | Tone | Best For |25|-------|------|----------|26| gentle | Friendly mentor | Juniors, OSS contributors |27| **spicy** | Sarcastic reviewer (default) | Daily use, team reviews |28| savage | Brutally honest senior | Content, self-roasts |29| sensei | TDD master (t_wada style) | TDD adoption, testing culture |3031## Instructions3233Follow these steps precisely. Do NOT skip any step.3435### Step 1: Parse Arguments3637Parse the user's input to extract:3839- `TARGET_PATH`: directory or file to review (default: current working directory)40- `LEVEL`: one of gentle/spicy/savage/sensei (default: spicy)41- `OUTPUT_LANG`: detect from the user's message language (en or ja).42 If the user wrote in Japanese, set to ja. Otherwise, set to en.43 If `--lang=` is specified, use that value instead of auto-detection.44- `DIFF_MODE`: boolean (default: false). If `--diff` is present, set to true.45- `QUICK_MODE`: boolean (default: false). If `--quick` is present, set to true.4647Extract `--level=`, `--lang=`, `--diff`, `--quick` from the argument string.48Everything else is treated as the target path.4950**Diff mode:** When `DIFF_MODE` is true, run `git diff --cached --name-only`51via Bash to get the list of staged files. Only analyze those files instead52of the full project. If no files are staged, inform the user and exit.53Project detection (Step 2) still runs normally to determine framework context.5455**Quick mode:** When `QUICK_MODE` is true, run only these 3 checkers:56Security, Architecture, TDD. Skip all other checkers. Output includes a57note that this was a quick scan.5859### Step 2: Project Detection6061Analyze the target to detect the project type. Run these checks:6263```64Glob: TARGET_PATH/**/package.json65Glob: TARGET_PATH/**/tsconfig.json66Glob: TARGET_PATH/**/Cargo.toml67Glob: TARGET_PATH/**/go.mod68Glob: TARGET_PATH/**/requirements.txt69Glob: TARGET_PATH/**/pyproject.toml70Glob: TARGET_PATH/**/*.sln71Glob: TARGET_PATH/.git72```7374Read the **root-level** `package.json` (at `TARGET_PATH/package.json`) first.75If none exists, fall back to the nearest `package.json` to TARGET_PATH.76Extract:7778- `dependencies` and `devDependencies` keys79- `scripts` keys80- `engines` field8182Detect frameworks by checking dependency names:8384- **HTTP frameworks:** express, hono, fastify, koa, @nestjs/core85- **Frontend frameworks:** react, vue, svelte, @angular/core, next, nuxt86- **Test frameworks:** jest, vitest, mocha, @testing-library/*87- **Language:** presence of tsconfig.json = TypeScript8889Store results as:9091- `LANG`: typescript | javascript | rust | go | python | csharp | unknown92- `HAS_TESTS`: boolean93- `HAS_HTTP_FRAMEWORK`: boolean94- `HAS_FRONTEND_FRAMEWORK`: boolean95- `HAS_GIT`: boolean96- `HAS_PACKAGE_MANIFEST`: boolean9798### Step 3: Checker Activation99100Determine which checkers to run based on detection results:101102| Checker | Reference File | Condition |103|---------|---------------|-----------|104| Security | `references/security.md` | Always |105| Architecture | `references/architecture.md` | Always |106| Complexity | `references/complexity.md` | Always |107| TDD | `references/tdd.md` | Always |108| Type Safety | `references/type-safety.md` | LANG = typescript OR .ts/.tsx files found |109| Error Handling | `references/error-handling.md` | Always |110| Naming | `references/naming.md` | Always |111| Dead Code | `references/dead-code.md` | Always |112| Performance | `references/performance.md` | Always |113| Dependencies | `references/dependencies.md` | HAS_PACKAGE_MANIFEST |114| API Design | `references/api-design.md` | HAS_HTTP_FRAMEWORK |115| Frontend | `references/frontend.md` | HAS_FRONTEND_FRAMEWORK |116| Git Hygiene | `references/git-hygiene.md` | HAS_GIT |117118### Step 4: Execute Checks (2-Phase)119120Uses a compact index for fast detection, then reads full reference files121only for categories with findings.122123#### Phase 1: Quick Scan1241251. **Read** `references/checks-index.md` (single file — all 162 check126 patterns in one place).1271282. **Batch Grep execution** — combine patterns per category x severity:129 - For each active checker category, combine all Grep patterns at the130 same severity level using `|` (OR) into a single Grep call.131 - Example: Security Grep [critical] has 6 patterns — combine into132 1 Grep call with patterns joined by `|`.133 - This reduces ~100+ individual Greps to ~20-30 batched calls.134 - **Presence (P)**: pattern found = potential finding. Map matched135 lines back to the specific check by inspecting which sub-pattern136 matched.137 - **Absence (A)**: run a separate Grep per absence check. Zero138 results = finding.1391403. **Glob checks** — run all Glob patterns from the index in parallel.1411424. **Bash checks** — run Bash commands from the index in parallel where143 independent. Group related commands together.1441455. **Map results** — for each match, identify the specific check name146 from the index. Record:147 - Which categories have findings (= need Phase 2 detail)148 - Which categories are clean (= Strengths, skip in Phase 2)149 - Approximate severity distribution per category150151**Phase 1 rules:**152153- Skip `node_modules/`, `dist/`, `build/`, `.next/`, `vendor/`,154 `target/`, `.git/` directories.155- Sample up to 20 files per category for tractability.156- For large projects, prioritize: `src/` > `lib/` > `app/` > others.157158**Phase 1 target: ~20-30 Grep + 10-15 Glob/Bash calls total.**159160#### Phase 2: Detailed Roast1611621. **Read** `references/roast-style.md` to load the roast persona for163 the selected LEVEL.1641652. **For each category WITH findings** from Phase 1:166 a. Read the category's full reference file (e.g.,167 `references/security.md`).168 b. For each finding detected in Phase 1, extract from the reference:169 - Roast line (en and ja — select based on OUTPUT_LANG)170 - Fix description171 - Exact deduction value172 c. Refine findings: verify context around matches, discard false173 positives from batch grep, deepen analysis where needed.174 d. Record each confirmed finding with:175 - `category`: checker name176 - `check`: check item name177 - `severity`: critical / error / warning / info178 - `location`: file path and line number(s)179 - `evidence`: the actual code/pattern found180 - `deduction`: point deduction value1811823. **For categories with zero findings**: do NOT read the reference183 file. Add the category to Strengths in the final output.184185**Important rules:**186187- Only report findings backed by actual evidence found in the code.188- Do NOT invent findings for entertainment. Every roast must be189 grounded in fact.190- **Deduplication:** If the same issue appears in multiple checkers191 (e.g., CORS in Security and API Design, Error Boundaries in Error192 Handling and Frontend), count the deduction in only ONE category —193 whichever is more specific. Note the cross-reference in the other194 category without deducting.195- Per-check cap: max **3 findings** per check type count toward the196 score. Additional instances are reported but do not deduct further.197- **Parallelism:** Run Grep and Glob calls for independent checks in198 parallel where possible. Batch tool calls to minimize round-trips.199200### Step 5: Calculate Scores201202For each active checker category:2032041. Start at **100 points**.2052. Apply deductions for each finding:206 - `critical`: **-20** points207 - `error`: **-10** points208 - `warning`: **-4** points209 - `info`: **-1** point2103. **Per-check cap:** Max **3 findings** per check type count toward the211 score. Additional instances are reported but do not deduct further points.2124. Floor at **0** (no negative scores).2135. The category score displayed in the table is always out of **100**214 (do NOT multiply by weight here).215216Calculate the **Overall Score** using category weights:217218- Weights: Security **1.5x**, Architecture **1.2x**,219 TDD **1.5x** in sensei mode (1.0x otherwise), all others **1.0x**.220- `overall = sum(score_i * weight_i) / sum(weight_i)`221- Weights are used ONLY in this overall calculation, not on individual222 category scores.223224Determine the **Grade**:225226| Grade | Score Range | Label |227|-------|-----------|-------|228| S | 90 - 100 | Immaculate |229| A | 80 - 89 | Solid |230| B | 70 - 79 | Decent |231| C | 60 - 69 | Needs Work |232| D | 40 - 59 | Rough |233| F | 0 - 39 | Dumpster Fire |234235### Step 6: Generate Output236237Compose the final output using the Output Format below.238Apply the roast persona from roast-style.md for the selected LEVEL.239240**Rules:**241242- Every finding gets a roast line AND a concrete fix.243- Group findings by category.244- Show the most critical findings first within each category.245- Keep total output under 300 lines. If more findings exist, show top 5 per246 category and note how many were omitted.247- Lines should be under 80 characters where possible for screenshot-friendliness.248- **Language:** If `OUTPUT_LANG` is ja, write all roast lines, fix descriptions,249 summary text, and section labels in Japanese. Category names in the scorecard250 table and structural elements (box-drawing, header) remain in English.251 If `OUTPUT_LANG` is en, write everything in English.252253---254255## Output Format256257Generate output following this structure (adapt rows to active checkers):258259```260━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━261 🔥 ROAST MY CODE — REPORT CARD 🔥262 Level: {LEVEL} | Target: {TARGET_PATH}263━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━264265📊 OVERALL: {GRADE} ({SCORE}/100)266267┌─────────────────────────────────────┐268│ Category Score Grade │269├─────────────────────────────────────┤270│ Security {xx}/100 {G} │271│ Architecture {xx}/100 {G} │272│ Complexity {xx}/100 {G} │273│ TDD {xx}/100 {G} │274│ Type Safety {xx}/100 {G} │275│ Error Handling {xx}/100 {G} │276│ Naming {xx}/100 {G} │277│ Dead Code {xx}/100 {G} │278│ Performance {xx}/100 {G} │279│ Dependencies {xx}/100 {G} │280│ API Design {xx}/100 {G} │281│ Frontend {xx}/100 {G} │282│ Git Hygiene {xx}/100 {G} │283└─────────────────────────────────────┘284(Only show rows for active checkers)285286━━━ 🔥 FINDINGS ━━━━━━━━━━━━━━━━━━━━━━287288## {CATEGORY} ({SCORE}/100)289290### 🚨 {CHECK_NAME} [{SEVERITY}]291📍 {file_path}:{line}292> {code evidence or description}293294💬 "{ROAST_LINE}"295296🔧 Fix: {actionable fix description}297298---299300(Repeat for each finding, grouped by category)301302━━━ 📋 SUMMARY ━━━━━━━━━━━━━━━━━━━━━━━303304🏆 Top 3 Strengths:305 1. {strength}306 2. {strength}307 3. {strength}308309💀 Top 3 Priorities to Fix:310 1. {priority with file reference}311 2. {priority with file reference}312 3. {priority with file reference}313314📈 Quick Wins (< 5 min each):315 - {quick fix 1}316 - {quick fix 2}317 - {quick fix 3}318319━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━320 Roasted with ❤️ by roast-my-code321 ⭐ github.com/sakimyto/roast-my-code322━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━323```324325### Output Rules3263271. **Scorecard table** always appears first.3282. **Findings** are grouped by category, ordered by score329 (worst category first).3303. Within each category, findings are ordered: critical > error >331 warning > info.3324. **Summary** always appears last.3335. If a category scored 100 (no findings), show it in the table334 but skip the findings section for it. Add it to Strengths.3356. The roast line MUST match the selected LEVEL's tone from336 roast-style.md.3377. Every roast MUST be paired with a Fix.3388. Use box-drawing characters for the table exactly as shown.3399. If the overall grade is S, add a congratulatory roast:340 "I came here to roast, but your code left me speechless.341 Well played."342343---344345## Scoring Quick Reference346347| Severity | Deduction | Examples |348|----------|-----------|---------|349| critical | -20 | Hardcoded secrets, SQL injection, no tests |350| error | -10 | Empty catch, God files, `any` abuse |351| warning | -4 | console.log, TODO comments, inline styles |352| info | -1 | Missing engine field, no readonly |353354| Weight | Category | Multiplier | Note |355|--------|----------|-----------|------|356| High | Security | 1.5x | Always |357| Medium | Architecture | 1.2x | Always |358| Elevated | TDD | 1.5x | sensei mode only (1.0x otherwise) |359| Normal | All others | 1.0x | |360361**Note:** Weights apply ONLY to the overall weighted average, not to362individual category scores (which are always displayed out of 100).363Per-check cap: max 3 findings per check type count toward the score.364365| Grade | Range | Vibe |366|-------|-------|------|367| S | 90-100 | Ship it yesterday |368| A | 80-89 | Production-ready |369| B | 70-79 | Code review approved |370| C | 60-69 | Needs another pass |371| D | 40-59 | Intern's first week? |372| F | 0-39 | Call the fire department |373374---375> Converted and distributed by [TomeVault](https://tomevault.io/claim/sakimyto) — claim your Tome and manage your conversions.376<!-- tomevault:4.0:skill_md:2026-04-13 -->