first commit

This commit is contained in:
eeymoo
2026-09-19 12:54:45 +08:00
commit 6fc5b64077
126 changed files with 8601 additions and 0 deletions
@@ -0,0 +1,49 @@
# 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** 该缺陷均来源于内置或自定义预埋规则,且有对应规则标识