评审真实性增强:前端硬规则+人工启动方案+文档-实现三级校验

- 前端存在性硬规则: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)
This commit is contained in:
hangshuo652
2026-09-01 08:44:56 +08:00
parent f8b4e9d44d
commit 1b89743d77
43 changed files with 3362 additions and 290 deletions
@@ -61,19 +61,13 @@ export interface FileSignature {
lang: 'ts' | 'js' | 'py' | 'other';
symbols: string[]; // export/function/class 定义行原文(≤5条)
}
export function buildInventory(files: {path,content}[]): {
signatures: FileSignature[]; // 全部文本文件
totalLines: number;
coreFiles: string[]; // 按规则选出的"精读文件包"
}
export function extractSignatures(files: {path,content}[]): FileSignature[]; // 全部文本文件
export function renderInventoryText(sigs: FileSignature[], budgetChars?: number): string; // 紧凑索引文本
```
- **语言范围**ts/tsx/js/jsx/mjs + pythondef/class 正则);其余语言仅记 path+lines
- **符号提取**:正则匹配 `^(export\s+)?(async\s+)?(function|class|const\s+\w+\s*=\s*(\(|async))` 与 python `^def |^class `
- **coreFiles 选择规则**(替代现"前 60 个文件"粗暴截断):
1. 入口/路由/服务/控制器目录下的代码文件(src/、app/、api/ 等)
2. DIM_FILE_FILTERS 各维度命中的文件
3. 按行数降序补足至预算
- **精读文件选择(coreFiles)**:实现中不单独产出 coreFiles 字段——精读包由 `filterFilesForDim` 的维度过滤(`DIM_FILE_FILTERS`)+ 40000 字符预算承担,**符号索引全量注入**所有实现类维度 prompt 头部,保证 100% 文件可见(2026-08-27 对齐实现,原 buildInventory/coreFiles 接口未落地,已废弃)
#### 3.1.2 投喂策略改造
@@ -92,7 +86,8 @@ export function buildInventory(files: {path,content}[]): {
[{feature:'一句话功能', files:['文件:行号'], depth:'real|partial|stub'}]"
合并去重 → FeatureInventory
{ features:[{name, files, depth}], totalFiles, analyzedChunks }
落库:entries.project_understanding 附加字段(或新列 feature_inventory TEXT
落库:entries.feature_inventory TEXTJSON 数组,2026-08-27 新增 migration),
同时返回文本注入实现类维度 prompt;落库失败非致命(不影响注入)
```
- 注入**功能完整性/规模·功能点**维度 prompt:「以下是全量代码扫描发现的实际功能清单,请对照 README 声称与验收基准逐项核对」
@@ -172,7 +167,7 @@ README/验收基准声称的核心功能如下:
真实=该项满分权重;部分=50%权重;占位=0分。
```
- **评分绑定**:子 Agent 返回的 checks 表存入 ai_report.dimensions[n].checks;解析失败回退现状(不崩)
- **评分绑定**:子 Agent 返回的 checks 表存入 ai_report.dimensions[n].checks2026-08-27 修复:runSubAgent 最终 prompt 对实现类维度要求 checks 字段,parseDimResponse 解析并透传,供详情页/PDF 展示);解析失败回退现状(不崩)
- 结合 3.3 信号:toPrompt 中的 stubFiles 作为"重点核查"提示一并注入
### 3.5 判档修正:定性设计维度豁免 C 档(解决问题 #4)
@@ -235,13 +230,18 @@ export function isQuantEvidenceDim(name): boolean // 替代 isEffectDim 在三
## 7. P1 实施清单
- [ ] code-inventory.ts 符号索引器 + 单测
- [ ] discoverFiles 投喂策略改造(索引全量 + coreFiles 全文 + 预算 40K
- [ ] discoverFeatureInventory Map-Reduce 功能发现轮 + 落库 + 注入
- [ ] ai-log-audit.ts + git 变更集采集 + 封顶应用 + 注入 + 单测
- [ ] code-signals.ts + 单测
- [ ] 实现类维度定向追踪 prompt 模板 + checks 解析 + 评分绑定
- [ ] standard-utils.ts 判档白名单重构(isQuantEvidenceDim+ 相关单测更新
- [ ] 分支提醒
- [ ] AGENTS.md 同步
- [ ] 回归:§6 四场景实测 + 全量 vitest
- [x] code-inventory.ts 符号索引器 + 单测
- [x] discoverFiles 投喂策略改造(索引全量 + coreFiles 全文 + 预算 40K
- [x] discoverFeatureInventory Map-Reduce 功能发现轮 + 落库feature_inventory 列)+ 注入
- [x] ai-log-audit.ts + git 变更集采集 + 封顶应用 + 注入 + 单测
- [x] code-signals.ts + 单测
- [x] 实现类维度定向追踪 prompt 模板 + checks 解析 + 评分绑定
- [x] standard-utils.ts 判档白名单重构(isQuantEvidenceDim+ 相关单测更新
- [x] 分支提醒
- [x] AGENTS.md 同步
- [x] 回归:§6 四场景实测 + 全量 vitest
> **2026-08-27 修正记录**P1 落地后审计发现 3 处文档-实现偏差,均已修正——
> ① §3.4 checks 表:原实现只注入 prompt 不解析存储,已修复(runSubAgent 最终 prompt 要求 checks + parseDimResponse 透传 + 5 项单测);
> ② §3.1.3 功能发现落库:原仅内存注入,已新增 entries.feature_inventory 列落库;
> ③ §3.1.1 coreFiles 接口:原设计 buildInventory/coreFiles 未落地,精读包由 filterFilesForDim + 40K 预算承担,文档已对齐实现。