Files
PromptCR-Lab/openspec/changes/init-promptcr-platform/specs/dataset-management/spec.md
T
2026-09-19 12:54:45 +08:00

50 lines
3.0 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.
# Spec: dataset-management
## ADDED Requirements
### Requirement: Git 仓库解析与候选 commit 筛选
系统 SHALL 接受开源 Git 仓库地址作为输入,遍历提交历史,按"变更规模适中、语言分布均衡、提交信息完整"规则筛选候选 commit。
#### Scenario: 筛选候选 commit
- **WHEN** 用户提供开源 Git 仓库地址并触发数据集构建
- **THEN** 系统遍历提交历史并输出符合筛选规则的候选 commit 列表
### Requirement: Unidiff 提取
系统 SHALL 为每个入选 commit 提取统一 Unidiff 格式变更文本,并保留变更前后文件上下文。
#### Scenario: 提取 diff 与上下文
- **WHEN** 一个 commit 被选中为样本
- **THEN** 系统产出 Unidiff 变更文本及变更前后文件上下文并持久化
### Requirement: 可插拔缺陷预埋
系统 SHALL 按可插拔缺陷规则在真实 diff 中预埋缺陷。内置缺陷类型 MUST 至少包括:空指针引用、资源未关闭、边界条件错误(含边界条件错乱)、逻辑运算符误用、并发安全问题。每种缺陷 MUST 为一条独立规则文件并按语言组织;用户新增规则文件即可自定义缺陷类型而无需改动框架代码。所有语言的规则 MUST 基于语法解析做 AST 级变换,MUST NOT 使用正则/纯文本级替换:Python 用标准库 `ast`;Java 用 `javalang`;JavaScript 用 `esprima`(新增依赖须在代码注释或文档中说明理由)。禁止引入重型多语言解析框架(如 tree-sitter、ANTLR)。无论内置或自定义规则,植入位置 MUST 精确可知。
#### Scenario: 内置规则预埋缺陷
- **WHEN** 对一个样本执行缺陷预埋
- **THEN** 系统按适用语言的规则植入缺陷,并记录缺陷类型与精确植入位置
#### Scenario: 自定义规则即插即用
- **WHEN** 用户新增一条自定义缺陷规则文件且不改动框架代码
- **THEN** 新样本可预埋该自定义缺陷并被正确标注
### Requirement: Ground Truth 标注
系统 SHALL 为每个样本生成含缺陷位置、缺陷类型、参考修复建议、语言类型的 Ground Truth 记录。
#### Scenario: 生成 Ground Truth
- **WHEN** 缺陷预埋完成
- **THEN** 系统产出与预埋一致的 Ground Truth 记录(缺陷类型/位置/参考修复/语言),抽查可复验
### Requirement: 实验数据集交付
系统 SHALL 交付 12 个 commit 样本的实验数据集,覆盖至少 3 种主流编程语言且语言分布均衡。
#### Scenario: 数据集构建完成
- **WHEN** 数据集构建流程结束
- **THEN** 产出 12 个带标注样本,覆盖 ≥3 种语言且分布均衡
### Requirement: 排除真实缺陷挖掘
系统 MUST NOT 做真实缺陷的自动挖掘(不做静态分析告警收集、不做历史 bug commit 自动识别),缺陷一律采用预埋方式。
#### Scenario: 仅预埋来源
- **WHEN** 检查数据集中任意缺陷记录
- **THEN** 该缺陷均来源于内置或自定义预埋规则,且有对应规则标识