Shared by the four pull-request review lanes in
.github/workflows/claude-bot.yml. The lane map below is here so it exists
ONCE: when each lane carried its own copy of "mine / not mine", the four copies
could quietly contradict each other and the same defect got reported twice or
not at all.
Read this from the workspace checkout, which is the base revision and is
trusted. NEVER read it from /tmp/head — a pull request controls that tree,
and a fork that could supply this file could rewrite the rubric it is judged by.
Ownership is decided by WHAT YOU WOULD HAVE TO BE RIGHT ABOUT for the finding to be true, not by how bad the consequence would be.
| lane | owns |
|---|---|
| Senior Developer | Correctness, edge cases, nil and empty handling, regressions. Layering and the runtime.Runtime dispatch rule. Security in code: authn/authz, input validation, injection, XSS, CSRF, SSRF, path traversal, secrets, unsafe defaults — weighted at internal/web/controller/, session and middleware, the PUBLIC internal/sub/ surface, and Xray config generation. Concurrency: races, deadlocks, goroutine and task leaks around the Xray and mtg-multi children, the cron jobs, the eventbus, the websockets. Performance. Maintainability and the 2-line comment cap. Frontend code quality. Every client-facing field name, encoding and hash choice the change emits. |
| Senior QA | internal/database/**, internal/database/model/**, internal/config/, internal/web/translation/**, tools/openapigen/, frontend/src/pages/api-docs/endpoints.ts, .github/workflows/**, Dockerfile*, docker-compose.yml, install.sh, x-ui.sh, DockerInit.sh, Makefile, CLAUDE.md, frontend/CLAUDE.md, docs/**, README*, SECURITY.md. Plus intent, upgrade safety, blast radius, backward compatibility of those contracts, operational impact, and labels. |
| Senior Tester | Test quality and coverage, what CI proved and what it did not, weak assertions, vacuous tests, snapshot and golden-fixture abuse. |
| Arbiter | Reconciliation, upstream wire-format resolution, and divergence BETWEEN the three link implementations. |
docs/lib/xray/: QA reports the process omission ("it was not updated").
The Arbiter reports semantic divergence between the three implementations. The
Developer reports whether the one in front of it emits the right thing.| level | means |
|---|---|
| Critical | security hole, data corruption or loss, crash, privilege escalation, authentication bypass, unrecoverable migration, or a fleet-wide outage path |
| High | likely production bug, incorrect behaviour on a common path, a breaking API or subscription-format change, a missing migration, a guaranteed CI break, or a significant performance problem |
| Medium | missing validation, an unhandled edge case, an undeclared behaviour change, documentation or OpenAPI drift, a maintainability problem, or an untested new code path |
| Low | minor readability, consistency, operational or documentation improvement |
| Suggestion | optional improvement with no correctness or release impact |
High, Medium, or Low. Reserve High for something CONFIRMED in the source and
citable as file:line, or observed in real command output. Anything inferred,
or resting on a detail you could not check, is Medium or Low.
Approve, Comment, or Request changes.
Fields on their own lines:
Severity / Confidence / Category
Location: file:line as plain text, not a Markdown link
Problem: what is wrong
Why it matters: the practical runtime, security, operational or upgrade impact
Recommendation: the preferred fix
The Tester replaces Why it matters with Evidence: the command or CI job and
the real output it read. A code example is optional and, if included, must be a
plain fenced code block — never a suggestion block, since the Arbiter
republishes the text.
Confidence: Low and say what would
confirm it. Severity and confidence ARE the filter.