AI code review and quality gates
The first read of every pull request, done for you
When agents write more of your code, review becomes the bottleneck. A reviewer agent checks each pull request, agent-built or human-written, against your own rulebook, fixes what it can in agent-built changes, and hands your senior engineers only the decisions that need a person.
YOU HAND OVERPR #2214 · 48 lines
PR #2214 · OrderService.csRead diff…
○Team standards○Tests○Security
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=" + id;
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty);
71var key = "sk_live_51H…";
○Team standards○Tests○Security
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=" + id;
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty);
71var key = "sk_live_51H…";
○Team standards○Tests○Security
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=" + id;
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty);
71var key = "sk_live_51H…";
○Team standards○Tests○Security
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=" + id;
1Query built from user inputFixing…HIGH
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty);
71var key = "sk_live_51H…";
○Team standards○Tests○Security
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=" + id;
1Query built from user inputFixing…HIGH
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty);
71var key = "sk_live_51H…";
○Team standards○Tests○Security
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=" + id;
1Query built from user inputFixing…HIGH
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty);
2No test for an empty cart · rule T-3Fixing…MED
71var key = "sk_live_51H…";
○Team standards○Tests○Security
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=" + id;
1Query built from user inputFixing…HIGH
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty);
2No test for an empty cart · rule T-3Fixing…MED
71var key = "sk_live_51H…";
○Team standards○Tests○Security
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=" + id;
1Query built from user inputFixing…HIGH
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty);
2No test for an empty cart · rule T-3Fixing…MED
71var key = "sk_live_51H…";
3Live key committed to sourceFor you: rotate the keyHIGH
○Team standards○Tests○Security
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=" + id;
1Query built from user inputFixing…HIGH
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty);
2No test for an empty cart · rule T-3Fixing…MED
71var key = "sk_live_51H…";
3Live key committed to sourceFor you: rotate the keyHIGH
○Team standards○Tests○Security
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=@id";
1Query built from user inputAuto-fixed: parameterizedHIGH
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty);
2No test for an empty cart · rule T-3Fixing…MED
71var key = "sk_live_51H…";
3Live key committed to sourceFor you: rotate the keyHIGH
✓Team standards○Tests○Security
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=@id";
1Query built from user inputAuto-fixed: parameterizedHIGH
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty); // + EmptyCart test
2No test for an empty cart · rule T-3Auto-fixed: test addedMED
71var key = "sk_live_51H…";
3Live key committed to sourceFor you: rotate the keyHIGH
✓Team standards✓Tests○Security
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=@id";
1Query built from user inputAuto-fixed: parameterizedHIGH
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty); // + EmptyCart test
2No test for an empty cart · rule T-3Auto-fixed: test addedMED
71var key = "sk_live_51H…";
3Live key committed to sourceFor you: rotate the keyHIGH
✓Team standards✓Tests!Security · 1 for you
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=@id";
1Query built from user inputAuto-fixed: parameterizedHIGH
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty); // + EmptyCart test
2No test for an empty cart · rule T-3Auto-fixed: test addedMED
71var key = "sk_live_51H…";
3Live key committed to sourceFor you: rotate the keyHIGH
✓Team standards✓Tests!Security · 1 for you
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=@id";
1Query built from user inputAuto-fixed: parameterizedHIGH
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty); // + EmptyCart test
2No test for an empty cart · rule T-3Auto-fixed: test addedMED
71var key = "sk_live_51H…";
3Live key committed to sourceFor you: rotate the keyHIGH
✓Team standards✓Tests!Security · 1 for you
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=@id";
1Query built from user inputAuto-fixed: parameterizedHIGH
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty); // + EmptyCart test
2No test for an empty cart · rule T-3Auto-fixed: test addedMED
71var key = "sk_live_51H…";
3Live key committed to sourceFor you: rotate the keyHIGH
✓Team standards✓Tests!Security · 1 for you
40public async Task<Order> Find(string id) {
41 var sql = "SELECT * FROM orders WHERE id=@id";
1Query built from user inputAuto-fixed: parameterizedHIGH
42 return await _db.QuerySingle<Order>(sql);
43}
58public decimal Total(Cart c) =>
59 c.Items.Sum(i => i.Price * i.Qty); // + EmptyCart test
2No test for an empty cart · rule T-3Auto-fixed: test addedMED
71var key = "sk_live_51H…";
3Live key committed to sourceFor you: rotate the keyHIGH
✓Team standards