Skip to content

Commit 716f1ed

Browse files
committed
feat: add review submission flow
1 parent f75d72d commit 716f1ed

4 files changed

Lines changed: 621 additions & 21 deletions

File tree

src/app/challenges/review/001-sympy-point2d-ai-patch/page.tsx

Lines changed: 97 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { join } from "node:path";
44
import type { Metadata } from "next";
55
import Link from "next/link";
66

7+
import { ReviewSubmissionForm } from "@/components/challenges/ReviewSubmissionForm";
78
import { AppShell } from "@/components/layout/AppShell";
89
import { Badge } from "@/components/ui/Badge";
910

@@ -29,8 +30,9 @@ export default function FirstReviewChallengePage() {
2930
<a className="active" href="#review">
3031
第一题
3132
</a>
32-
<a href="#diff">AI Diff</a>
33-
<a href="#rubric">Rubric</a>
33+
<a href="#diff">AI 补丁</a>
34+
<a href="#submit">提交审核</a>
35+
<a href="#rubric">评分</a>
3436
</nav>
3537
<div className="actions">
3638
<Link className="button button-outline" href="/">
@@ -53,6 +55,7 @@ export default function FirstReviewChallengePage() {
5355
<span className="id">001</span>
5456
<Badge tone="review">Review</Badge>
5557
<Badge tone="mid">Mid</Badge>
58+
<span className="pill">Python / SymPy</span>
5659
</div>
5760
<h1>这个 AI 修复能合并吗?</h1>
5861
<p>
@@ -61,13 +64,10 @@ export default function FirstReviewChallengePage() {
6164
</p>
6265
<div className="source-grid">
6366
<a href="https://github.com/sympy/sympy/issues/22684" rel="noreferrer" target="_blank">
64-
SymPy Issue
65-
</a>
66-
<a href="https://github.com/sympy/sympy/pull/22714" rel="noreferrer" target="_blank">
67-
Correct PR
67+
原始 Issue
6868
</a>
6969
<a href="https://arxiv.org/abs/2503.15223" rel="noreferrer" target="_blank">
70-
PatchDiff Paper
70+
论文来源
7171
</a>
7272
</div>
7373
</section>
@@ -80,55 +80,131 @@ export default function FirstReviewChallengePage() {
8080
</div>
8181
<div className="section-body">
8282
<p>
83-
阅读下面的 AI PR diff,判断它是否可以 merge。如果不能,需要指出具体问题、影响和修复建议。
83+
阅读下面的 AI PR diff,判断它是否可以 merge。如果不能,需要指出具体问题、影响和修复建议。你不需要了解整个
84+
SymPy 项目,只需要围绕本页给出的行为规则和 diff 做判断。
8485
</p>
8586
<div className="review-template">
86-
<pre>{`Can merge? Yes / No
87+
<pre>{`是否可以合并:可以 / 不可以
8788
88-
Finding 1:
89-
- Severity:
90-
- Problem:
91-
- Why it matters:
92-
- Suggested fix:
89+
问题 1:
90+
- 严重程度:
91+
- 问题描述:
92+
- 影响说明:
93+
- 修复建议:
9394
94-
Finding 2:
95+
问题 2:
9596
...`}</pre>
9697
</div>
9798
</div>
9899
</section>
99100

101+
<section className="challenge-section card">
102+
<div className="card-head">
103+
<h2>题目上下文</h2>
104+
<span className="mono">Python</span>
105+
</div>
106+
<div className="section-body">
107+
<p>
108+
`Point` / `Point2D` 是 SymPy 里的几何点对象。坐标必须是合法的 SymPy 表达式,并且不能是明确的虚数坐标。
109+
</p>
110+
<p>
111+
`evaluate(False)` 表示临时关闭部分自动化简。真实 issue 的问题是:关闭自动化简后,普通坐标也可能被旧逻辑误判,
112+
从而抛出 `Imaginary coordinates are not permitted`。
113+
</p>
114+
<p>
115+
所以这道题的关键不是“只要不报错就行”,而是判断 AI 补丁有没有同时保住两个行为:普通坐标不要误杀,明确的虚数坐标仍然要拒绝。
116+
</p>
117+
</div>
118+
</section>
119+
120+
<section className="challenge-section card">
121+
<div className="card-head">
122+
<h2>预期行为表</h2>
123+
<span className="mono">review hints</span>
124+
</div>
125+
<div className="behavior-table-wrap">
126+
<table className="behavior-table">
127+
<thead>
128+
<tr>
129+
<th>输入场景</th>
130+
<th>期望行为</th>
131+
<th>审核时要看什么</th>
132+
</tr>
133+
</thead>
134+
<tbody>
135+
<tr>
136+
<td>
137+
<code>with evaluate(False): Point(1, 2)</code>
138+
</td>
139+
<td>应该允许创建点</td>
140+
<td>不能再误报 imaginary coordinates</td>
141+
</tr>
142+
<tr>
143+
<td>
144+
<code>with evaluate(False): Point(I, 2)</code>
145+
</td>
146+
<td>应该继续抛出错误</td>
147+
<td>检查这个约束在补丁后是否仍成立</td>
148+
</tr>
149+
<tr>
150+
<td>
151+
<code>Point(x, y)</code>
152+
</td>
153+
<td>符号输入不应被粗暴拒绝</td>
154+
<td>不确定是否为虚数时,不能当成明确非法</td>
155+
</tr>
156+
</tbody>
157+
</table>
158+
</div>
159+
</section>
160+
100161
<section className="challenge-section card" id="diff">
101162
<div className="card-head">
102-
<h2>AI PR Diff</h2>
163+
<h2>AI PR 变更</h2>
103164
<span className="mono">ai-pr.diff</span>
104165
</div>
105166
<pre className="diff-block">{diff}</pre>
106167
</section>
168+
169+
<ReviewSubmissionForm />
107170
</article>
108171

109172
<aside className="challenge-side">
110173
<section className="card">
111174
<div className="card-head">
112-
<h2>背景</h2>
175+
<h2>快速判断</h2>
113176
</div>
114177
<div className="section-body compact">
115178
<p>
116-
SymPy `Point` / `Point2D` 不允许创建带有虚数坐标的点。真实 bug 是:
117-
在 `evaluate(False)` 下,即使输入没有虚数,也可能错误抛出异常。
179+
语言:Python。
180+
</p>
181+
<p>
182+
类型:Review Mode,不要求你改代码。
118183
</p>
119184
<p>
120-
你要审核的是 AI 补丁,不是上游最终合并的正确修复
185+
目标:判断 AI PR 能否合并,并写出 review findings
121186
</p>
122187
</div>
123188
</section>
124189

190+
<section className="card">
191+
<div className="card-head">
192+
<h2>看 Diff 顺序</h2>
193+
</div>
194+
<div className="section-body compact">
195+
<p>1. 先看 AI 改了哪一行判断条件。</p>
196+
<p>2. 再看新增测试只覆盖了什么场景。</p>
197+
<p>3. 最后用行为表检查是否有回归。</p>
198+
</div>
199+
</section>
200+
125201
<section className="card" id="rubric">
126202
<div className="card-head">
127203
<h2>评分重点</h2>
128204
</div>
129205
<div className="rubric-list">
130206
<div className="rubric-item">
131-
<span>Merge 判断</span>
207+
<span>合并判断</span>
132208
<strong>30%</strong>
133209
</div>
134210
<div className="rubric-item">

0 commit comments

Comments
 (0)