feat(提交结果): 没通过时显示「通过 x/y 个测试点」;编译失败不等三次就能用 AI 分析
Some checks failed
Deploy / deploy (push) Has been cancelled
Some checks failed
Deploy / deploy (push) Has been cancelled
学生拿不到 info(每个点带 output_md5,只给管理员),测试点表格从来只有管理员看得见, 学生这边只有一句「答案错误」—— 从 2/8 交到 6/8 的人,感受是连输五次。 - 提交详情新增 caseSummary,后端从 info 数出通过数下发,不放开原文。 比赛提交、SQL 题(被杀的测试点会 break,total 偏小)、无逐点结果时为 null - 结果面板标题缀上通过数并加进度条,提交详情页标题同步;一个都没过时不缀 - POST /ai/hint 对编译失败跳过失败次数门槛,throttleAi 照旧;前端显示条件同口径 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013TecwAowmYcoNZRheSyTgH
This commit is contained in:
@@ -113,6 +113,9 @@ export const aiAnalysisRequestSchema = z.object({
|
||||
/**
|
||||
* 解锁「让 AI 分析我的代码」所需的失败提交数。前端拿它决定按钮露不露面、
|
||||
* 后端拿它卡 POST /ai/hint —— 放在契约里就是为了不让两边各写一个 3。
|
||||
*
|
||||
* 编译失败不受这个门槛限制:报错只关乎语法、不涉及解法,而英文编译报错恰恰是
|
||||
* 零基础学生最先撞上、最容易直接放弃的那堵墙。
|
||||
*/
|
||||
export const HINT_MIN_FAILURES = 3
|
||||
|
||||
|
||||
@@ -138,6 +138,18 @@ export const submissionDetailSchema = z.object({
|
||||
*/
|
||||
problemDisplayId: z.string(),
|
||||
showLink: z.boolean(),
|
||||
/**
|
||||
* 通过了几个测试点,给学生看「离 AC 还差多远」。`info` 只给管理员(每个点带
|
||||
* output_md5),所以这里只算出两个数下发,不放开原文。
|
||||
*
|
||||
* 为 null 的情形:比赛提交(ACM 只报对错,多给通过数等于变相放水,和 AI 提示同口径)、
|
||||
* SQL 题(`judge/run.ts` 遇到被杀的测试点会 break,total 偏小)、没有逐点结果
|
||||
* (待判、编译失败)。
|
||||
*/
|
||||
caseSummary: z.object({
|
||||
passed: z.number().int(),
|
||||
total: z.number().int(),
|
||||
}).nullable(),
|
||||
})
|
||||
|
||||
/**
|
||||
@@ -152,7 +164,7 @@ export const embeddedSubmissionSchema = submissionDetailSchema
|
||||
// problemDisplayId 也要去掉:下面的 problem 就是它,同一个值留两份,
|
||||
// 而路由只填了 problem —— 这里漏 omit 的那阵子,凡是收到过站内信的人
|
||||
// 打开消息页都是 500(parse 抛在缺失的 problemDisplayId 上,列表为空时才碰巧不炸)。
|
||||
.omit({ info: true, contestId: true, problemId: true, problemDisplayId: true })
|
||||
.omit({ info: true, contestId: true, problemId: true, problemDisplayId: true, caseSummary: true })
|
||||
// 旧 SubmissionSafeModelSerializer 里 problem 是
|
||||
// `SlugRelatedField(slug_field="_id")`,即**展示用题号**而非数字主键。
|
||||
// 站内信页面拿它拼 `/problem/<题号>` 链接,给数字 id 会拼出打不开的地址。
|
||||
|
||||
Reference in New Issue
Block a user