Files
L2keka/docs/user-stories.md
T

132 lines
5.7 KiB
Markdown
Raw 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维/150、赛道二 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 |