1. Your first finding
Write a file that looks like a normal afternoon's work, and watch Redline name four problems in it, with no model call.
Start a branch
$ git checkout -b feat/load-user
Create the file
Save this as src/user.ts, creating src/ if your repository has none. Every line of it is something an assistant writes when it is told to make the error go away.
type User = { id: string; name: string }
// TODO: handle retries
export function loadUser(raw: string) {
// @ts-ignore
return JSON.parse(raw) as unknown as User
}
export type Payload = unknown
Stage it
Redline reviews a diff, and a file git does not track yet is not in one. Skip this and the review stops with there is nothing to review — the diff is empty.
$ git add src/user.ts
Run the review
$ npx redlinegate@latest review profile javascript-typescript — rules in scope: core, typescript src/user.ts:3 Redline/HIGH [core/untracked-todo]: this TODO carries no ticket reference, so nothing will bring anyone back to it. src/user.ts:5 Redline/BLOCKER [core/type-checker-suppression]: a type-checker suppression needs an inline explanation AND a ticket reference on the same line. src/user.ts:6 Redline/BLOCKER [core/unsafe-assertion]: a double assertion overrides the type checker with no stated reason. src/user.ts:9 Redline/HIGH [typescript/unknown-type-alias]: this alias names `unknown`, so it reads as a contract it is not. 4 finding(s) that is every rule a checker can decide; the rest of the standard needs a model
The messages are shortened here; your terminal prints each one in full, with the fix. In the playground you see exactly these four. In your own repository the profile line names your profile, a warn line may say which files no stack covers, and anything else already on your branch is reviewed too.
Run it in a terminal. When the output is piped or captured, for example by a script or an assistant running it for you, review prints the prompt for a model instead of the findings.
Reading a finding
Every finding has the same three parts, in the same order:
- Severity —
BLOCKERmust not merge,HIGHis a deliberate trade-off,SUGGESTIONis optional. See The output contract. - Rule id — the part in brackets. It is stable, it is what you pass to
explain, and it is how the organisation measures which rules earn their place. - The problem and the fix, in one or two sentences.
These four came from a checker, not a model, which is why they are the same every time. Most of the standard needs judgement — a missing auth check, customer data in a log line — and that is what the next step adds.
A local review always exits 0 and is never recorded. It is a mirror, not a gate: nothing here can block you.