From a3a1c88859710e21b30b7916cc0959241e8a2b1c Mon Sep 17 00:00:00 2001 From: ymq Date: Wed, 16 Sep 2026 15:23:11 +0800 Subject: [PATCH] =?UTF-8?q?docs(readme):=20deliver=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=9C=9F=E5=AE=9E=E6=80=A7=E4=B8=89=E9=87=8D=E9=97=A8=E7=A6=81?= =?UTF-8?q?=E6=AE=B5(2026-09-16=20pbls=20M1a=E7=A9=BA=E5=A3=B3=E4=BA=8B?= =?UTF-8?q?=E6=95=85)=E2=80=94=E2=80=94git=E6=94=B6=E5=8F=A3=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E5=8C=96/=E4=BB=A3=E7=A0=81=E7=A9=BA=E5=A3=B3?= =?UTF-8?q?=E7=A1=AC=E9=97=A8=E7=A6=81=5Fvalidate=5Fstub=5Fcode/=E4=BA=A7?= =?UTF-8?q?=E5=87=BA=E6=96=87=E4=BB=B6=E6=9C=BA=E6=A2=B0=E6=A0=B8=E9=AA=8C?= =?UTF-8?q?=E6=AE=B5,=E9=80=9A=E7=94=A8=E8=A7=84=E5=88=99:=E9=97=A8?= =?UTF-8?q?=E7=A6=81=E8=AF=81=E6=8D=AE=E5=BF=85=E9=A1=BB=E5=BC=95=E6=93=8E?= =?UTF-8?q?=E6=9C=BA=E6=A2=B0=E8=AE=A1=E7=AE=97=E4=B8=8D=E9=9D=A0agent?= =?UTF-8?q?=E8=87=AA=E8=BF=B0,QC=E5=8F=96=E8=AF=81=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E2=89=A0=E5=88=A40=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/README.md b/README.md index ab5fba5..46f821c 100644 --- a/README.md +++ b/README.md @@ -130,3 +130,34 @@ old_string 唯一性校验(0/多次拒绝,replace_all 放行)+ 原子写 + - `gateway.run_message(image_paths)`:build_image_parts 构造 + 超限 notes 注入 content。 - 实测:中性文件名红蓝两图,agent 正确答「第一张红色、第二张蓝色」,degrade 0 次。 +## deliver 代码真实性三重门禁(2026-09-16 pbls M1a 空壳事故根治) + +**事故形状**:develop agent 声称「已用 write_file 落盘 17141 字符、G1~G6 严格退出码门禁」, +实测交付的 verify_gate.py 只有 9 行纯注释 1225 字节——LLM 把「对文件的描述」当文件内容写入; +且 git 证据由 agent 自称(实为引擎代收口)。QC 抓到时代价已是 4 轮烧光 + fault + pause。 + +三层确定性门禁(全部引擎层,不靠 LLM 自觉): + +1. **git 收口引擎化**(38efb3e):deliver 时引擎代为 add+commit 本任务写入的 + apps/modules 仓库,收口核验记录(改了哪些仓库/几个文件/commit hash)回填交付件正文—— + agent 无法再自称「已提交」伪造 git 证据。 +2. **代码空壳硬门禁 `_validate_stub_code`**(0d02ac6):deliver 时本任务 write_file + 实写的每个 `.py` 必须 ast 可解析且有真实可执行语句(纯注释/pass/纯 docstring/ + 语法错误一律拒绝,`__init__.py`/`conftest.py` 豁免),`.json` 必须可解析; + `files` 参数先验后写(`_validate_code_files_params`),防空壳落盘后被收口变既成事实。 + 拒绝时回填可行动 FAIL(指出文件+原因),agent 当轮重写——空壳死在 deliver 入口, + 不再烧 QC 轮次。native + 文本兜底两条 deliver 路径都挂载。 +3. **产出文件机械核验段**:引擎自动计算每个代码产出文件的实测字节/行数/语法/语句数, + 以「产出文件机械核验(引擎自动计算,非 agent 声明)」标题回填交付件正文—— + 「声称 17141 实测 1225」类矛盾一眼可见,QC 拿到引擎级证据底座, + 不再依赖自己 run_shell 逐个取证(取证失败盲判 0 分退也在烧重试预算,实测 9 轮里 3 轮是盲审)。 + +配套技能(pipeline-core 7bfa8d6):develop 角色「代码真实性铁律」(write_file 必须完整正文、 +大文件拆小分批、声称数字须与引擎核验一致、勿自称 commit/push);QC review-develop +「优先读引擎回填两段核验当权威证据;声称 vs 实测矛盾直接按造假退;取证失败禁盲判 0 分, +改 read_file 逐项或 ask_question 冒泡」。 + +**通用规则**:质量门禁的判定证据必须来自引擎机械计算(字节/行数/ast/commit hash), +不能来自 agent 的自我声明;QC 尺子要配「取证失败 ≠ 判 0 分」的出路,否则盲审烧轮次。 + +