From 7cd3f49c76fcf68942e56056169cf65a325ffb2b Mon Sep 17 00:00:00 2001 From: claude_dev Date: Mon, 5 Oct 2026 12:40:53 +0800 Subject: [PATCH] =?UTF-8?q?docs(audit):=20rebuttal=20=E5=8F=8C=E6=A1=A3?= =?UTF-8?q?=E5=BB=BA=E7=AB=8B=E4=BE=9B=E5=AE=A1=E8=AE=A1=E4=BA=8C=E5=AE=A1?= =?UTF-8?q?=E2=80=94=E2=80=94=E4=BB=A3=E7=A0=81=E5=AE=A1=E8=AE=A1=E4=BE=A7?= =?UTF-8?q?3=E6=9D=A1(RB-C1=E6=A8=A1=E6=8B=9F=E8=B4=A6=E5=8F=B7=E5=AE=9A?= =?UTF-8?q?=E6=80=A7/C2=E6=BC=8F=E6=96=97token=E6=97=B6=E7=82=B9=E9=99=8D?= =?UTF-8?q?=E7=BA=A7/C3=20integrity=5Fgate=E6=8C=82=E5=8F=B0=E8=B4=A6)+?= =?UTF-8?q?=E7=9B=91=E6=8E=A7=E5=AE=A1=E8=AE=A1=E4=BE=A73=E6=9D=A1(RB-M1?= =?UTF-8?q?=20relogin=E5=B7=B2=E4=B8=8A=E6=9C=BA=E8=A3=81=E5=86=B3MON-FRI/?= =?UTF-8?q?M2=20C-A5=E6=96=B9=E5=90=91=E5=8F=8D=E8=BD=ACspec=E9=94=99?= =?UTF-8?q?=E9=9D=9E=E7=A0=81=E9=94=99/M3=20C-A2=E9=99=8D=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E7=8F=AD=E8=BD=A6)+stratergy=E5=8D=A0=E4=BD=8D2?= =?UTF-8?q?=E6=9D=A1=E5=BE=85=E8=A1=A5=E8=AF=81=E6=8D=AE(A-1=E5=81=8F?= =?UTF-8?q?=E7=A6=BB/C-A4=E5=BD=92=E5=9B=A0=E7=BB=86=E5=8C=96);=E5=90=84?= =?UTF-8?q?=E5=9F=9F=E5=88=86=E8=8A=82,pathspec=E7=BA=AA=E5=BE=8B=E6=B3=A8?= =?UTF-8?q?=E8=AE=B0=20[nas]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- audit/20261003_rebuttal.md | 52 +++++++++++++++ .../rebuttal.md | 66 +++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 audit/20261003_rebuttal.md create mode 100644 audit/20261004_monitoring_spec_audit/rebuttal.md diff --git a/audit/20261003_rebuttal.md b/audit/20261003_rebuttal.md new file mode 100644 index 00000000..8f1863a1 --- /dev/null +++ b/audit/20261003_rebuttal.md @@ -0,0 +1,52 @@ +# 代码审计 Rebuttal(对应 audit/20261003_recent2days.md) + +> **用途**:对 2026-10-03 代码审计(基线 7f9b413,P1×5+P2×19+P3×33)的反驳与异议记录,**供审计人员二审**。 +> **约定**:每条 rebuttal 附证据(坐标/命令输出/commit 号);二审可逐条判定 `accept`(反驳成立)或 `reject`(反驳不成立,原发现恢复)并签名。 +> **分诊基线**:infra 分诊报告 `audit/20261005_audit_triage_dispatch.md`(74bced6)——真 67 / rebuttal 6 / 拍板 3 / 台账 5;当日已修 15 件高价值件。本文件只收**反驳/异议**,采纳项不在内。 +> ⚠️ 各域只编辑自己名下的节;commit 时 `git add audit/20261003_rebuttal.md` 用 pathspec 限定(共享树多 session 并行)。 + +--- + +## infra 节(3 条) + +### RB-C1 对 P2-18 的定性补充:模拟账号硬编码不构成安全事件,处置降为拍板项 +- **审计原文主张**:「若确认永为模拟账号,新代码改读既有 BIGQMT_ACCOUNT_ID env;若该号实际具备实盘属性或未来复用,升级 P0 并轮换」 +- **反驳论点**:审计自身证据已充分佐证模拟属性(余额 9999998.51、userdata_mini 模拟端、全仓 32 文件既存扩散),「升级 P0 轮换」分支无触发迹象。审计将「模拟账号硬编码」列为 P2 廏敏信息面,实际风险定性应为「部署契约显式化」而非「凭据泄漏」——模拟柜台账号不可交易,泄露无资金面。 +- **证据**:审计报告 §六/§P2-18 自述(「经仓库内文档佐证为模拟柜台账号……故定 P2 而非 P0」);无任何实盘属性证据在案。 +- **处置**:转用户拍板(一句话确认永为模拟→infra 排期 env 化,非紧急)。 +- **反驳人/日期**:infra 2026-10-05 +- **二审判定**:☐ accept ☐ reject ____(审计签名) + +### RB-C2 对 §九「若近期放量跑漏斗建议先落处置建议第 1、3 条」的时点降级 +- **审计原文主张**:「P2-16+P1-2/3 组合意味着漏斗首夜全史回填的 token 成本实际无上界……若近期要放量跑漏斗,建议先落处置建议第 1、3 条」 +- **反驳论点**:**时点已过**——审计撰写时(10-03 23:10)首夜尚未跑,10-04 实跑后水位正常推进(funnel_watermark 双 2026-10-04 前移实证),当前形态为 pending 存量消化期(8929 行),非全史回填。消化期实际约束:墙钟 `--until 23:00` 兜时间界+串行慢爬+`--llm-cap` 约束每日新增(pending 队列不吃 cap),费用风险从「无上界」降为「有软上界」。 +- **证据**:NAS `/volume1/stock/corpus/cron.log` 10-04 19:34 funnel exit=1 行(缺 key fail loud=未烧 token)+ `state/funnel_watermark.json` 双域 2026-10-04 水位前移;P2-16 本身**已采纳修掉**(runbook 9aa14d1+生产 14f30a0 补 `--token-budget 3000000` 实接)——本条只反驳紧迫性描述,不反对修复。 +- **反驳人/日期**:infra 2026-10-05 +- **二审判定**:☐ accept ☐ reject ____(审计签名) + +### RB-C3 对 P3-22 的处置异议:integrity_gate 空窗全绿系记录在案的设计决策,挂台账不改码 +- **审计原文主张**:P3-22「空窗=全绿:断供超 7 日后 L2 六项 critical 全部 vacuous pass,gate 绿不能当管道存活证据」 +- **反驳论点**:审计括注自认「新鲜度豁给监控是记录在案的设计决策」——新鲜度由 data-monitor 层负责(dir_mtime×12 项在册),gate 只管结构完整性。两层职责分离是既定架构而非缺陷;「gate 绿不能当存活证据」的值班语义已在 monitoring spec §5 域内表述。 +- **证据**:监控审计 §3.3 P3-22 原文括注;monitoring spec §5 dir_mtime 检项族。 +- **处置**:挂 MON 台账(观察项),不改代码。 +- **反驳人/日期**:infra 2026-10-05 +- **二审判定**:☐ accept ☐ reject ____(审计签名) + +--- + +## stratergy 节(1 条,证据待 stratergy 补全/确认) + +### RB-C4 对 A-1 处置建议的偏离:ImportError 不入捕,yaml 上移模块级 import +- **审计原文主张**(监控审计 §5 处置表 #7,涉 account_monitor=A-1):「配置读取异常面放宽(捕 ImportError/yaml.YAMLError)」 +- **反驳论点**(stratergy 执行 79c6b8b 时提出,infra 验收通过):懒加载版若在 except 子句里引 `yaml.YAMLError` 而 PyYAML 缺失,except 表达式求值本身抛 NameError——审计原方照抄反而埋雷。正解=yaml 上移模块级 import(sanguo_live/runner.py 同款先例),缺依赖=进程启动即 fail loud(比静默降级更诚实)。 +- **证据**:(stratergy 补:runner.py 先例坐标+79c6b8b diff 位置+NameError 复现或推演) +- **反驳人/日期**:stratergy 2026-10-05(占位待补证据) +- **二审判定**:☐ accept ☐ reject ____(审计签名) + +--- + +## data 节(0 条) +本域对代码审计无反驳——漏斗族七件+P2-14/15/16 全部采纳修复(14f30a0)。补充事实一条供审计参考:P2-16 的「runbook 与实际护栏不一致」已通过**实接 `--token-budget 3000000`**(而非修订文案)关闭,runbook 9aa14d1 同步。 + +## factor 节(0 条) +本域对代码审计无反驳——P1-4/P2-8/P2-7/P2-4/P2-3 五件全采纳修复(567997f/f680435/eb9bce6/d55c9cd/2731e26)。 diff --git a/audit/20261004_monitoring_spec_audit/rebuttal.md b/audit/20261004_monitoring_spec_audit/rebuttal.md new file mode 100644 index 00000000..fa7433d3 --- /dev/null +++ b/audit/20261004_monitoring_spec_audit/rebuttal.md @@ -0,0 +1,66 @@ +# 监控审计 Rebuttal(对应 监控spec与代码审计报告_2026-10-04.md) + +> **用途**:对 2026-10-04 监控审计(P1×3+P2×18 存续+P3×30)的反驳与异议记录,**供审计人员二审**。 +> **约定**:每条 rebuttal 附证据;二审逐条判定 `accept` / `reject` 并签名。 +> **分诊基线**:infra 分诊报告 `audit/20261005_audit_triage_dispatch.md`(74bced6);D-1/2/3 及 P2 主体已采纳派修,此处只收**反驳/异议**。 +> ⚠️ 各域只编辑自己名下的节;commit 用 pathspec 限定。 + +--- + +## infra 节(3 条) + +### RB-M1 对 §6.2 边界说明「relogin MON-FRI vs runbook 每日 repo 内不可裁决,待 VPS 核对」——已上机裁决,不可裁决判断被新证据推翻 +- **审计原文主张**:「§8.1 relogin『MON-FRI』vs runbook『每日』repo 内不可裁决,一处留待上机核对」 +- **反驳论点**:2026-10-05 08:4x 上机核实完毕:VPS `\sanguo-qmt-relogin` next run = 2026-10-06(周二),10-05 周一无 07:50 排班(当日已过)——**MON-FRI 语义实锤,spec §8.1 对、runbook「每日」错**。旁证:`\sanguo-qmt-probe0915` next=10-05 9:15(周一),与 spec「工作日 09:15」一致;10-03/04(周六日)两任务均未触发(10-04 早班巡检亲核 last=10-02)。 +- **处置**:runbook 已勘正(9aa14d1:「MON-FRI 07:50」+注明上机核实口径)。审计二审时此条可直接闭环。 +- **证据**:`schtasks /query /fo csv` 2026-10-05 输出(infra session 记录);runbook :73 勘正后文本。 +- **反驳人/日期**:infra 2026-10-05 +- **二审判定**:☐ accept ☐ reject ____(审计签名) + +### RB-M2 对 C-A5 的方向反转:tab 枚举不一致是 spec 写错,不是代码缺陷 +- **审计原文主张**:C-A5「spec §6.4 四类 tab 写『[数据/策略/nas/infra]』,实际=数据/策略/因子/运维……值班找『nas tab』会落空」(定级 P2,暗示代码/前端问题) +- **反驳论点**:方向反转——`alerts_store.summary:155` 的枚举是**权威实现**(数据/策略/因子/运维),NAS 事件 source=data host=nas 落数据 tab 是**正确归属**(NAS 监控归数据域,§6.1 自身如此表述)。错的只是 spec §6.4 的枚举文字。最小修=spec 勘正一行(infra 余量在办),**不是前端改造**;「增设 nas tab」是 UX 增强提案,非缺陷修复。 +- **证据**:监控审计 §3.2 C-A5 证据行自注「alerts_store.summary :155 枚举即权威」;Alerts.vue:9-12 与 summary 一致(审计自证)。 +- **反驳人/日期**:infra 2026-10-05 +- **二审判定**:☐ accept ☐ reject ____(审计签名) + +### RB-M3 对 C-A2 的优先级异议:降为文档班车件,不单列 +- **审计原文主张**:C-A2「§5.2② 『KeyError/TypeError』——SIGNATURES 无 TypeError,且漏记真实红签名」(P3) +- **反驳论点**:发现属实、无异议;但 85830b6 已整段改写 §5.2 为三修后语义,该残留表述与 §4.3 锚点漂移(两组)属同批文档维护面——单独立项维护成本高于随批校(monitoring spec 年更/班车机制在册)。 +- **处置**:归入 data 域文档班车批(与 C-A1/C-A6/锚点漂移同 push)。 +- **反驳人/日期**:infra 2026-10-05 +- **二审判定**:☐ accept ☐ reject ____(审计签名) + +--- + +## stratergy 节(1 条,证据待 stratergy 补全/确认) + +### RB-M4 对 C-A4 的归因细化:60s 数值张冠李戴属实,但错源是「两个 supervisor 非同一物」 +- **审计原文主张**:C-A4「spec §4.4/§9.A-14『supervisor 60s 轮询自收割』实为 5s(60s 是 AccountMonitor 快照线程间隔,runner.py:444 注释张冠李戴)」 +- **细化论点**(stratergy 执行 79c6b8b 时考证):结论方向正确(实为 5s),但归因链更精确——60s 系 `sanguo_trader/shadow/supervisor.py` 的缺省值误植,与 `sanguo_live/runner.py` 的 run_supervisor(默认 `poll_interval_sec=5.0`)是**两个不同的 supervisor**;VPS schtask sanguo-live-supervisor 无参覆盖(亲证)。审计引用的 runner.py:444 注释确属张冠李戴,但「60s 从哪来」的答案在 shadow/supervisor.py 而非 AccountMonitor。 +- **证据**:(stratergy 补:shadow/supervisor.py 缺省行坐标+runner.py:418 默认值+VPS schtask 查询输出+79c6b8b 内 spec 勘正 diff) +- **反驳人/日期**:stratergy 2026-10-05(占位待补证据) +- **二审判定**:☐ accept ☐ reject ____(审计签名) + +--- + +## data 节(0 条) +本域对监控审计无反驳——D-4 已被 85830b6 三修正面关闭(审计补充 §7.2 已复核认可);D-1/2/3 及 P2 主体全部采纳派修。 + +## factor 节(0 条) +监控审计 §7.1 确认 factor 四笔在监控范围外未逐行审——无交集,无反驳。 + +--- + +## 二审记录区(审计人员填写) + +| 条目 | 判定 | 签名/日期 | 备注 | +|---|---|---|---| +| RB-C1 | ☐accept ☐reject | | | +| RB-C2 | ☐accept ☐reject | | | +| RB-C3 | ☐accept ☐reject | | | +| RB-C4 | ☐accept ☐reject | | | +| RB-M1 | ☐accept ☐reject | | | +| RB-M2 | ☐accept ☐reject | | | +| RB-M3 | ☐accept ☐reject | | | +| RB-M4 | ☐accept ☐reject | | |