Files
L2keka/docs/user-stories.md
hangshuo652 1b89743d77 评审真实性增强:前端硬规则+人工启动方案+文档-实现三级校验
- 前端存在性硬规则:detectFrontend 源码级判定,web形态无真实前端/不可访问 → 实现完整度封顶50%(CLI/插件豁免)
- verify 多态:build_status 支持 done/failed/done_no_ui,前端按钮新增「无前端」
- 人工启动方案:评审环境自动启动失败 → awaiting_browse 暂停,评委手动启动后填 service_url 走 /verify-browse 恢复(SSRF 信任评委确认地址)
- Gitea 稳定性:clone 自动重试×3(525抖动)+ 每队独立 token 回退(全局账号失效兜底)
- A 阶段报告备份:feature_inventory.__stageA_report 防 B 阶段维度重复累积/A维度丢失
- tryTest 依赖预装:Python 项目自动 pip install(测试不再因缺依赖误判失败)
- 运行验证压缩静态维度:前端缺失+测试失败 → 静态纸面维度封顶50%(防原型拿高分)
- 文档-实现三级校验:claim-consistency 注入运行时证据(构建/测试/前端),识别「代码有但跑不起来」的虚报(逸飞冲天 61%→25%)
- 赛事文档:中期20%+最终80%(AI=人工总分)、评审表/评审规则/赛事说明/07设计同步
- 清空 review_snapshots 测试污染数据,保留当前正式分(零号158/逸飞冲天126)
- 测试 446 全通过(后端435+前端11)
2026-09-01 08:44:56 +08:00

132 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AI-Review 用户故事与验收用例
> 来源:`config/teams.json`2026年技术大赛报名表 14 支真实队伍)
> 覆盖机制:评审管线(3阶段)、按时提交(§3.3.9 增强)、空仓库影响、硬规则、校准、L2/L3 认定
> 用途:驱动验收测试 `server/src/__tests__/user-stories.test.ts`
---
## 1. 参赛选手(Primary Actor
### US-01 按时提交的参赛者
**作为** 一名按时完成开发并在截止日前提交代码的参赛者,
**我希望** 我的作品被完整评审且不受迟交扣分,
**以便** 我得到与作品质量相匹配的分数。
**验收标准:**
- US-01-1 评审管线完整运行(clone → 构建 → 维度 → 校准 → 硬规则 → 出分)
- US-01-2 提交时间 = git 最后 commit 时间,且早于 project.deadline → `late_days ≤ 0`penalty = 0
- US-01-3 最终得分 = 原始总分(无迟交扣分)
### US-02 迟交的参赛者
**作为** 一名错过截止日期后才提交代码的参赛者,
**我希望** 系统明确记录我的迟交天数并扣除相应分数,
**以便** 公平地与其他按时提交的队伍竞争。
**验收标准:**
- US-02-1 commit 时间晚于 deadline → `late_days > 0`
- US-02-2 penalty = `min(总分, late_days × late_penalty)`,默认 late_penalty=5
- US-02-3 迟交超过 7 天 → 扣光总分
- US-02-4 前端展示「迟交 N 天」标识
### US-03 空仓库/未上传代码的参赛者
**作为** 一名建了条目但仓库内容为空的参赛者,
**我希望** 系统不因 git 异常而逃逸扣分,同时如实反映空仓库的评分影响,
**以便** 评审结果公平反映"没有交付内容"的事实。
**验收标准:**
- US-03-1 空仓库(可 clone,无文件)→ 走正常评审,不出逃逸
- US-03-2 空仓库文件数 = 0,代码统计全 0 注入 AI context
- US-03-3 Agent核心维度门槛 4 项全失败 → 判定 0 分
- US-03-4 演示与文档维度无 README → 硬规则封顶 ≤2 分
- US-03-5 迟交判定:无 git commit → 用条目创建时间兜底,若创建晚于 deadline 则正常扣分
### US-04 自拟选题的参赛者(A0/B0
**作为** 一名选择"自拟选题"并把自己的实际选题写在备注栏的参赛者,
**我希望** 系统按我上传的标准维度进行评审,
**以便** 我的自拟项目得到合理评估。
**验收标准:**
- US-04-1 带 track 创建项目 → 自动导入对应赛道默认标准
- US-04-2 赛道一/赛道二 标准维度数与总分符合模板(赛道一 12维/200、赛道二 8维/100
### US-05 选择官方选题的参赛者(A1-A6/B1-B6
**作为** 一名选择官方给定选题的参赛者,
**我希望** 系统按赛道标准评审而不受选题编号影响,
**以便** 官方选题与自拟选题公平竞争。
**验收标准:**
- US-05-1 标准快照在评审时被锁定(`standard_snapshot`),后续改标准不影响已评审结果
- US-05-2 评审依据维度优先使用标准快照内容(`dim.content` 优先于内置兜底指南)
---
## 2. 项目管理员(Admin
### US-06 创建比赛项目
**作为** 项目管理员,
**我希望** 创建项目时必须指定赛道并设置截止时间,
**以便** 系统能自动导入对应标准并支持迟交判定。
**验收标准:**
- US-06-1 创建项目缺 track → 400 `赛道为必选项`
- US-06-2 带 track 创建 → 自动导入默认标准
- US-06-3 可设置 `deadline``late_penalty`
### US-07 批量导入参赛队伍
**作为** 项目管理员,
**我希望** 从报名表批量导入队伍(含 gittea 凭据与选题),
**以便** 快速录入 14 支队伍。
**验收标准:**
- US-07-1 批量导入合法条目成功
- US-07-2 重复 repo_url 被唯一约束拒绝
- US-07-3 非法 service_url(内网/本机)被拒绝
### US-08 人工修正评审结果
**作为** 项目管理员,
**我希望** 人工修正维度分数后系统重新计算总分与最终分(含迟交扣分),
**以便** 纠正 AI 评分偏差。
**验收标准:**
- US-08-1 修正后重算 totalScore,应用 max_score_cap 再扣迟交
- US-08-2 迟交扣分复用已存的 late_days(不重新判定提交时间)
---
## 3. 评审系统自身(System
### US-09 评审管线按阶段推进
**作为** 评审系统,
**我希望** 评审按固定管线执行并能被诊断,
**以便** 任何阶段失败都不会静默挂起。
**验收标准:**
- US-09-1 管线日志 `[pipe:entryId]` 覆盖 START/CLONE/ANALYZE/GATES/TEST/BROWSE/OVERVIEW/SUBAGENT/DONE/FAIL
- US-09-2 任一步骤抛错 → FAIL 兜底,状态不静默卡死
### US-10 维度独立评分
**作为** 评审系统,
**我希望** 每个维度独立评分,互不因其他维度判定而扣分,
**以便** 例如非 Agent 项目只要测试真实通过就应给效果与数据分。
**验收标准:**
- US-10-1 效果与数据维度有真实测试证据时据实给分,不因"非 Agent"否决
---
## 用户故事 → 测试映射
| 用户故事 | 验收用例 | 测试文件位置 |
|---|---|---|
| US-01 按时提交 | `US-01-1` ~ `US-01-3` | user-stories.test.ts TC-US01 |
| US-02 迟交 | `US-02-1` ~ `US-02-4` | user-stories.test.ts TC-US02 |
| US-03 空仓库 | `US-03-1` ~ `US-03-5` | user-stories.test.ts TC-US03 |
| US-04 自拟选题 | `US-04-1` ~ `US-04-2` | user-stories.test.ts TC-US04 |
| US-05 官方选题 | `US-05-1` ~ `US-05-2` | user-stories.test.ts TC-US05 |
| US-06 创建项目 | `US-06-1` ~ `US-06-3` | user-stories.test.ts TC-US06 |
| US-07 批量导入 | `US-07-1` ~ `US-07-3` | user-stories.test.ts TC-US07 |
| US-08 人工修正 | `US-08-1` ~ `US-08-2` | user-stories.test.ts TC-US08 |
| US-09 管线诊断 | `US-09-1` ~ `US-09-2` | user-stories.test.ts TC-US09 |
| US-10 维度独立 | `US-10-1` | user-stories.test.ts TC-US10 |