Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use when you have a candidate security finding and before it goes in a comment - restate it as a crossed boundary, prove reachability, impact and a concrete exploit, apply triage dismissals, route out-of-repository facts to needs-validation, keep the effect no stronger than the trace, then the self-refute and verifier passes
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Reviewers — language models especially — are biased toward seeing vulnerabilities and toward rating them higher than they are. A pattern that looks dangerous ("string concatenated into a query", "path from a variable") is a candidate, not a finding. Every false block costs a developer round-trip and teaches the team to skim your comments; that is how the real one gets missed.
Core principle: try to kill each finding before you write it. What survives an honest attempt is worth blocking on.
Write it in one sentence, concretely: "An unauthenticated caller can send name=../../etc/passwd to GET /export and read any file the server can read." Many candidates collapse here — you cannot name who sends what to where, or the sentence is obviously not true once written down.
The sentence must name six things: the lower-trust principal, the input or action they control, the control that was supposed to stop it, the boundary it crosses, the affected principal or resource, and the concrete result. A missing best practice, a guessed deployment behaviour, a generic parser crash or an effect on the attacker alone fills none of the last three.
Proxy and ingress behaviour, CDN cache keys, IdP and broker policy, cloud IAM attachments, browser and OS settings are real controls. Read them when they are in the repository. When they are not and one of them decides the finding, neither dismiss it ("the gateway probably strips it") nor block on it ("nothing strips it"): if the rest of the trace is complete and the claim would be HIGH or CRITICAL, it becomes a non-blocking Needs validation note with the exact missing fact (source-visibility-needs-validation). Otherwise drop it.
Drop the candidate when:
grep_code the symbol) — unless this diff adds one.Report the effect the trace reaches, not the one it would be exciting to reach:
If the strongest honest sentence is weaker than the category name suggests, the severity follows the sentence.
Name the attacker (who, with what access) and the victim (whose data or privilege). Then refute the finding if any is true:
+ and the diff adds no new path into it. Off-diff findings must name the enabling + or - line, or they are not this review's.exec argv slot after --).Collapses at the restatement.
# candidate: "SQL injection in report query"
query = f"SELECT * FROM {REPORT_TABLES[kind]} WHERE org_id = %s"
cur.execute(query, (org_id,))
Restated: "an attacker controls kind and injects SQL". But REPORT_TABLES[kind] raises KeyError for anything not in a fixed dict of table names; the user value never reaches the string. No finding.
Refuted after reading the router.
# + lines in this diff
@app.get("/files/<name>")
def download(name):
return send_file(os.path.join(UPLOAD_DIR, name))
Candidate: path traversal. But Werkzeug decodes the URL before routing and the default string converter matches no /, so neither ../../etc/passwd nor ..%2F..%2Fetc%2Fpasswd reaches the handler, and name=".." resolves to a directory, which send_file refuses. Refuted — you read the converter instead of asserting traversal.
Survives.
# + lines in this diff
@app.get("/files/<path:name>")
def download(name):
return send_file(os.path.join(UPLOAD_DIR, name))
Attacker: any visitor — the route has no auth decorator, unlike its siblings. Victim: the server's own files. The path converter accepts the decoded slashes of /files/..%2F..%2Fapp%2Fconfig.py, os.path.join keeps the .. segments, and send_file serves the file. HIGH (CWE-22), confidence 0.9; fix: send_from_directory(UPLOAD_DIR, name), which rejects paths that escape the directory.
Before the comment is written, read each surviving finding as if someone else had written it and you are trying to refute it:
file:line the evidence cites. Does each line say what the finding claims? Is the first entry a real lower-trust entry point, and the last one the claimed sink or effect?A finding that fails any step is corrected or dropped — not softened with "possibly".
A finding that passed the gate goes into the comment with: the restated claim as the exploit sentence, the trace (source file:line → sink file:line), the confidence you can defend, and the fix. Keep the refuted ones out of the comment entirely — not even as "considered and dismissed".
file:line points at a line the diff did not touch and you cannot name the line that did.아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use when the diff adds or changes an endpoint, resolver, RPC, job or query that takes an object id, a role check, a request binding or a tenant filter - BOLA/IDOR, function-level authorization, mass assignment and tenant scoping
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use on every UI change - semantic HTML, labels for controls, keyboard-navigable dialogs/menus, visible focus, and never color as the only signal
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use when a task changes any screen, form, dialog, menu or control - Lighthouse/axe scan of the changed screens, a keyboard walk, and the thresholds that fail a task
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
How to work a task returned with review, QA or UAT findings. Use when a task is in need_revision or PR review comments are in your context.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use when the repository keeps its alerting in code, or a person asks for alerts outside TaskTrooper - PrometheusRule YAML, a Cloud Monitoring alert policy in Terraform, a Datadog monitor, each routed to TaskTrooper's alert ingest URL so it opens an incident here
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.