docs(archive): 过期文档归档波——14 件墓碑+台账补全+两轮审计报告入库 [nas]
- 归档 12 件(git mv 保历史,audit/20261001_docs_audit/ §2.1 判定):
deployment/{vps-native-brain,windows-bridge-setup,d-phase-windows-deploy,README}
(miniQMT/FastAPI-bridge 退役架构,09-08)+vps-deploy-pending(一次性任务使命
终结)+specs/phase3b-vue(里程碑已兑现)+plans/{phase3c-paper-trading,
backtest-result-page,strategy-management-backend,factor-batch1}(已完成/被
实态推翻)+design/provider-mcp-expose(未实施行号全失效)+research/README
(死模板)
- 原位墓碑 2 件: sanguo_qmt_bridge/README(包内保留,运维语义退役)+
CHANGELOG(冻结,变更历史以 git log 为准)
- 台账: audit/README 补 5 波次表+状态列+固定安全清单约定(每波必查凭据/
鉴权面/CI 门禁 diff——历轮审计系统性盲区,docs_audit §5.2);docs/README
索引对齐归档后实态(+design/audit 行)
- 审计报告入库: 20260927_commit_docs_consistency+20261001_architecture_
code_audit+20261001_docs_audit 三目录
Co-Authored-By: Claude Code <notify@anthropic.com>
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
> **⚠️ 已归档(2026-10-01,audit/20261001_docs_audit/ §2.1 归档波)**
|
||||
>
|
||||
> - 归档原因:维护停更 3 个月([2.0.0]「即将发布」挂空自 07-02);:35「移除 Dockerfile.nas」与代码矛盾(文件还在)。冻结声明:本文件不再维护,变更历史一律以 git log 为准。
|
||||
> - 现行权威:git log。
|
||||
> - 处置:冻结(根文件保留原地);原文全文见 git 历史(归档 commit 前一版)。
|
||||
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
# commit 与文档一致性审查报告(2026-09-27)
|
||||
|
||||
> 审查人:zcode(GLM)。**绝对只读**:除本报告文件外未改动仓库任何内容;所有处置意见仅登记不执行。
|
||||
> 审查对象:2026-09-27 全天 commit(07:23 cc995fa → 22:37 3d47a4b,共 **28 个**,master)。
|
||||
> 方法:逐 commit 提取消息中的可核验声明 → 对照实际 diff → 对照文档落点(runbook / 两份 spec / factor 档 / CLAUDE.md / ci-cd.yml / CHANGELOG / README / docs 索引)→ 实物复核(tag、registry、wrapper、监控注册表、pytest 收集数、归档目录盘点)。
|
||||
|
||||
---
|
||||
|
||||
## 一、总体结论
|
||||
|
||||
**一致性:高。28 个 commit 中,27 个的消息声明与 diff、文档落点全部或基本对上(唯一例外 3d47a4b 的两处计数瑕疵见 F7);0 个 P1/P2 实质不一致。** 发现 8 项 P3 级措辞/计数瑕疵(含一条同日晚间新落约定文档里的计数错误)和 1 项过程观察。审计修复主线(早班 10 条 [vps] + 晚班 5 条 [vps])在部署班次台账、tag、CI 配置、registry 四处交叉印证一致。
|
||||
|
||||
**特别记录**:审查进行期间(22:37)有并行会话落库 `3d47a4b`(审计产物迁 `audit/`),已纳入本报告范围;该 commit 为纯 R100 改名 + 新增 README,全库 grep 无残留旧路径引用,**零断链**。
|
||||
|
||||
---
|
||||
|
||||
## 二、逐批核验结果
|
||||
|
||||
### 早班(07:23–08:34,审计终局修复波,10 条 [vps] + 3 条 [nas])
|
||||
|
||||
| commit | 声明要点 | 核验结果 |
|
||||
|---|---|---|
|
||||
| cc995fa | 影子账户 params 透传 factor env | ✅ supervisor.py +11、测试 +31 |
|
||||
| ae39b5e | #69 挑战者 szneul_eq_reb63 登记,TOP_N=200/REB=63/BAND=1.0,09-28 起跑 | ✅ registry 条目逐字段符(stage shadow / issue 69 / stage_history at 09-28) |
|
||||
| 23d4b6c | 20:50 APScheduler job 挂 ishortfall 日跑 | ✅ `sanguo_trader/scheduler.py:102` `register_ishortfall_daily_job`(docstring 20:50、晚于 20:45 周报)、`sanguo_api/app.py:73` 启动挂载;runbook L290 同步记载(见发现 F1) |
|
||||
| b8c9549 | 监控四修 + 闸门白名单补 margin/margin_sse;spec §15.4/§20.15.2 登记 | ✅ §20.15.2「09-27 审计终局 P1 四修」①–④与消息逐条对应;§15.4 白名单句在 |
|
||||
| b34ee53 | 字段形状类快速失败+断路器豁免;spec §15.4 登记 | ✅ §15.4「09-27 审计终局 P2」条目在,实案四连案、纵深第二层均记 |
|
||||
| 404330f | ridge 惩罚尺度不变形 F-2 | ✅ 代码 + factor 档 L202 注记(A+λ·diag(A)≡相关形阵+λI) |
|
||||
| 3928698 | fast_ops 相对定位 + metrics 死代码 | ✅([no-doc] 合理,纯代码) |
|
||||
| 5e69e3d | S 族导入可达 + 血统注册表 5 名对齐(F-1/F-3) | ✅ factor_registry.yaml ±10 行、monthly_batch 防线 + 测试 |
|
||||
| 0456cfb | 慢算子 8→13 勘正 + 年化基数双轨注明(F-5/F-9) | ✅ factor 档 L60 列 13 算子恰 13 个;L62 双轨注明(244 vs √252,只注明不统一+理由) |
|
||||
| 7f9ffb3 | F-6 三处 to_vt_symbol→to_generic_symbol + spec 数字校准四项 + §20.15.1 带宽 + §20.10.6 补登 + §20.15.3 退出码表 + idx-daily SCHTASKS + runbook hot_rank 注记(🟢-8) | ✅ 全部落位:exporter 函数/测试/spec §20.3 改名齐;ths_concept L322、margin ~2,000 L1026、nb_hold 深 ~2,269 L1038/1067、valuation ~5,570 L1232/1762;§20.15.1 三域带宽 (0,400)/(30,300)/(0,60)=registry 现值,与 `monitor_registry.py:26-28` 逐字对上;§20.15.3 L1800 退出码表含 health 拆分注记;runbook L257 注记在。「补三行」实为 +2 行(见 F3) |
|
||||
| 2ddd645 | ak-weekly 类型调序落 repo(share_capital 挪最后)+ L1 五件死测试删除 + §7.4 防漂移 | ✅ `ak_stock_wrapper.ps1` 尾行序=gdhs,top_holders,financial_abstract,share_capital ✓;sanguo_web/test_phase*.py 恰 5 件删除 ✓;§7.4 防漂移纪律为引用既有条目(runbook L209,09-18 加),非本 commit 新增,语义成立 |
|
||||
| c97f449 | 过户费断言 0.01 对齐 + qmt_launcher 历史名注记 | ✅ `tests/api/test_portfolio_live.py` 断言 5.01=佣5+过户0.01;qmt runbook L12 注记在 |
|
||||
| 42ccfe0 | 归档断链善后 8 处旧路径 | ✅ 9 文件 10 处改,抽查 `docs/archive/reports/` 被引件均存在 |
|
||||
| 8f918f4 | README 横幅/CHANGELOG 年份+倒挂/docs 索引重写/pyproject 2.0.0 删 wheel/CLAUDE.md 三目录/spec order_key 勘误/runbook 16641f0 注记+20:50 预告 | ✅ 全部落位:README 迁移横幅在;CHANGELOG 0.1.0 年份改 2026、倒挂纠正(0.1.0 移至 2.0.0 后);pyproject version=2.0.0、wheel 段已删留注释;research spec 幂等键 order_id→order_key(含 QMT 柜台单号日内唯一理由);runbook L284 改 16641f0;CLAUDE.md 当时尚为三目录(15:12 由 9eb1a80 补第四目录,闭环) |
|
||||
|
||||
### 午间(12:40–15:28,zcode review 三修 + 收尾)
|
||||
|
||||
| commit | 声明要点 | 核验结果 |
|
||||
|---|---|---|
|
||||
| 9eb5883 | ①本地 tag 对齐远程 + runbook 增部署班次台账节 ②审计报告 14 件归档 ③CI 加 tests/api(189 测 17s) | ✅ ①台账节在(runbook L286),tag 现 local=remote=b3fe69a;②docs/archive/reports/audit_20260927 入库 35 文件=13 md+22 probes,「14 件」=13 md+probes 目录捆(口径见 F6);③ci-cd.yml pytest 四目录在(见 F4) |
|
||||
| 9eb1a80 | CLAUDE.md CI 覆盖句同步第四目录 | ✅ 与 ci-cd.yml 实跑面一致 |
|
||||
| b7ce364 | 归因批 stage4 新模块,月度首班 10-04 | ✅ attribution_batch.py 新 147 行 + wrapper +35;runbook L223 与 factor 档 L203 均记「09-27 落地、10-04 首班」 |
|
||||
|
||||
### 下午—晚班(17:54–19:47,控制台波 + P4 spec)
|
||||
|
||||
| commit | 声明要点 | 核验结果 |
|
||||
|---|---|---|
|
||||
| fdbbb48 | 归因页崩修 + composite 接真(聚合修订) | ✅ `_aggregate_monthly_contribution`;research spec §4.7 端点段记「2026-09-27 聚合修订」 |
|
||||
| b7fc69e | 直通断言对齐聚合短表契约 | ✅ 断言改 {factorId, contributionPct} 两行,注释引 09-27 契位修复 |
|
||||
| 3a938ec | 注册表种子缺失条目自动 merge | ✅ `ensure_runtime_registry` +37、测试 +65;registry yaml paper_account_id: 63(与台账「挑战者 id=63 当班落位」对上);runbook 注册表行同步 merge 语义(只补缺不覆盖运行态) |
|
||||
| 55bcde7 | 族切换器 + 归因页整页重构;tests/api 202→208 | ✅ 收集实测 tests/api=208 恰符;spec §4.7「09-27 夜可读化波」段同步 |
|
||||
| 380bbcf / b3fe69a | P4 分解器细则两波折入(5+2 件、5 件+开工再定清单) | ✅ 两段原文入 spec §4,编号①–⑤/⑥–⑩顺延无冲突 |
|
||||
| 8032887 | 台账 append b3fe69a 班(5 条 [vps]+2 doc 顺风;run 2125) | ✅ 台账晚班 5 条与实际 [vps] commit 集合一一对应;早班 c97f449 班 10 条(影子 2+偏差日报 1+factor 3+data 4)同样与实际集合吻合 |
|
||||
|
||||
### 夜间(22:37,并行会话)
|
||||
|
||||
| commit | 声明要点 | 核验结果 |
|
||||
|---|---|---|
|
||||
| 3d47a4b | audit/ 唯一归宿约定,29 文件整目录迁入 | ⚠️ 迁移本体零断链(全库无旧路径残留引用);但「29 文件」与实际 R100=35 不符,新 README 波次表「probes/ 19 个」与实际 22 不符(见 F7) |
|
||||
|
||||
---
|
||||
|
||||
## 三、发现清单(处置意见仅登记,不执行)
|
||||
|
||||
| # | 级别 | 发现 | 证据 | 处置建议 |
|
||||
|---|---|---|---|---|
|
||||
| F1 | P3 | 8f918f4(07:57:52)runbook 写「09-27 补调度接线…落地」,而接线代码 23d4b6c 28 秒后(07:58:20)才落库;该消息自称「预告」、diff 文案却是「落地」 | 8f918f4 runbook hunk vs 23d4b6c 时间戳 | 同批次前向引用,终态一致,无需回改;后续同批多 commit 时文案留半步余地(或消息与 diff 用词取齐) |
|
||||
| F2 | P3 | 「611/615 全绿」未标 scope,实为 **tests/data_platform 单目录**口径(现值恰 615);四目录全量现值 **1998**(data_platform 615 / portfolio 737 / factor 438 / api 208,收集实测) | b8c9549/b34ee53/7f9ffb3 消息 vs pytest - collect-only | 消息为碑文不回改;后续全绿声明注明目录口径,防未来 session 误读为全量 |
|
||||
| F3 | P3 | 7f9ffb3 称「§20.10.6 登记簿补三行」,diff 实为 **+2 行**(zz_slash_test 折入双任务行;三个主题均 covered) | 7f9ffb3 hunk @@ -1335,6 +1335,8 @@ | 不回改;计数类声明按 diff 行数走 |
|
||||
| F4 | P3 | ci-cd.yml 注释「tests/api(189 测 17s…)」为 12:40 加目录当时值,现 208(55bcde7 消息自记 202→208) | ci-cd.yml:114-116 | 属「加目录时点」历史标注、带日期定语,风险低;下次触该文件顺带更新或措辞改「加目录时 189」 |
|
||||
| F5 | P3 | CHANGELOG「[2.0.0] - 2026-07-02 **(即将发布)**」与 pyproject 已定 version=2.0.0 措辞不同步 | CHANGELOG.md:42 vs pyproject.toml:3 | 下次触 CHANGELOG 时摘「(即将发布)」 |
|
||||
| F6 | P3 | 9eb5883 称「审计报告 14 件归档」,目录实装 **35 文件**(13 md + 22 probes);「14 件」=13 md+probes 目录捆,口径可自洽但易误读 | 9eb5883 name-status | 不回改;件数声明优先用文件数或注明捆口径 |
|
||||
| F7 | P3 | 3d47a4b 消息「29 文件整目录迁入」vs 实际 **R100=35**;其新增 `audit/README.md` 波次表「probes/ **19 个**核查脚本」vs 实际 **22 个**。README 是今后审计归宿的台账文档,计数应准 | `git show 3d47a4b --name-status \| grep -c ^R`=35;`ls audit/20260927_three_domain/probes/`=22 | **建议下个班车顺手改 audit/README.md 两处数字(35 文件/probes 22)**;commit 消息为碑文不回改 |
|
||||
| F8 | P3 | da32cca 清了 qmt_relogin 源码(56→11 tracked ✓),但盘面残留 8 个 `__pycache__` 孤儿 .pyc(含已删件 qmt_relogin/qmt_gate_common/qmt_probe_0915 等的编译产物;gitignore 挡住未入库) | `git ls-files scripts/qmt_relogin`=11 vs `find -type f`=19 | 随班车 `find scripts/qmt_relogin -name __pycache__ -exec rm -rf` 清一次 |
|
||||
| F9 | 观察 | docs/README.md(07:57 重写,自称「反映仓库真实结构」)未收录根目录 `audit/`(22:37 才由 3d47a4b 设约)——同日演进时差,非重写过错 | docs/README.md:3 vs audit/ 新约 | 下次索引刷新补 `audit/` 一行 |
|
||||
|
||||
---
|
||||
|
||||
## 四、与既往尾巴的对账(2026-09-26~27 体检遗留四件)
|
||||
|
||||
| 尾巴 | 现状 |
|
||||
|---|---|
|
||||
| vps-deployed tag 滞后 | ✅ 收口——9eb5883 强制对齐,现 local=remote=b3fe69a,台账 L286「随班前移」机制运转中 |
|
||||
| 未跟踪报告搭 promote 车 | ✅ 收口——9eb5883 ②归档入库 + 3d47a4b 设 audit/ 唯一归宿约定 |
|
||||
| tests/api CI 盲区 | ✅ 收口——ci-cd.yml 四目录 + CLAUDE.md 覆盖句同步(9eb1a80) |
|
||||
| 20:50 首班观察 | ⏳ 待今晚首班(代码/文档/调度接线已齐,F1 所指终态一致) |
|
||||
|
||||
---
|
||||
|
||||
## 五、附录:今日 commit 全清册(28 个,完整路径仓库 `/Users/chufeng/.openclaw/sanguo_projects/sanguo_vnpy_v2`,master)
|
||||
|
||||
```
|
||||
3d47a4b 22:37 docs(audit) 审计产物集中 audit/ [nas] ← 审查期间并行落库
|
||||
8032887 19:47 docs(runbook) 台账 append b3fe69a 班 [nas]
|
||||
b3fe69a 19:25 docs(spec) P4 分解器第二波 [nas]
|
||||
380bbcf 19:20 docs(spec) P4 分解器 QuantaAlpha [nas]
|
||||
55bcde7 18:43 feat(api) 控制台可读化波 [vps]
|
||||
3a938ec 18:06 fix(portfolio) registry 自动 merge [vps]
|
||||
b7fc69e 17:56 test(api) 断言对齐聚合短表 [vps]
|
||||
fdbbb48 17:54 fix(api) 归因页崩修+composite 接真 [vps]
|
||||
b7ce364 15:28 feat(factor) attribution_batch stage4 [vps]
|
||||
9eb1a80 15:12 docs CLAUDE.md 四目录同步 [nas][no-doc]
|
||||
9eb5883 12:40 chore zcode review 三修 [nas][no-doc]
|
||||
c97f449 08:34 chore 验收遗留清 [nas][no-doc]
|
||||
2ddd645 08:33 fix(data) ak-weekly 类型调序+死测试删除 [vps]
|
||||
42ccfe0 08:26 fix(docs) 归档断链善后 [nas][no-doc]
|
||||
7f9ffb3 08:06 docs(data) 审计终局 P3 文档批 [vps]
|
||||
0456cfb 08:06 docs(factor) 慢算子 8→13+年化双轨 [nas]
|
||||
3928698 08:04 chore(factor) fast_ops 定位+死代码 [vps][no-doc]
|
||||
404330f 08:03 fix(factor) ridge 尺度不变形 [vps]
|
||||
b34ee53 08:02 fix(data) 形状类快速失败 [vps]
|
||||
ff6ca3b 07:59 chore dev 依赖 pytest-asyncio [nas][no-doc]
|
||||
23d4b6c 07:58 feat(pipeline) 20:50 偏差日报接线 [vps][no-doc]
|
||||
b8c9549 07:58 fix(data) 监控四修 [vps]
|
||||
8f918f4 07:57 docs+config 审计修复批 [nas][no-doc]
|
||||
5e69e3d 07:57 fix(factor) S 族导入+血统 5 名 [vps][no-doc]
|
||||
3e55e82 07:57 docs 审计卫生批(4 README+19 归档)[nas][no-doc]
|
||||
da32cca 07:56 chore qmt_relogin 56→11+清理 [nas][no-doc]
|
||||
ae39b5e 07:25 feat(config) #69 挑战者登记 [vps][no-doc]
|
||||
cc995fa 07:23 feat(trader) 影子 params 透传 [vps][no-doc]
|
||||
```
|
||||
|
||||
(清册 28 行与正文计数一致:cc995fa 起、3d47a4b 止,全部为 09-27 当日落库。)
|
||||
|
||||
**核验手段留痕**:tag `git tag -l --points-at HEAD` + `git ls-remote --tags origin`;测试数 `pytest --collect-only -q`(四目录 1998 / api 208 / data_platform 615);带宽对照 `scripts/data_platform/monitor_registry.py:26-28`;wrapper 序 `scripts/data_platform/ak_stock_wrapper.ps1` 尾段;归档盘点 `ls audit/20260927_three_domain/`(13 md + probes 22)。
|
||||
@@ -0,0 +1,230 @@
|
||||
# 架构代码审计报告(第一轮 · 纯代码视角)
|
||||
|
||||
- **日期**:2026-10-01
|
||||
- **审计范围**:全仓(`sanguo_*` 十包、`scripts/`、`frontend/`、`sanguo_api`/`sanguo_web`、`config/`、`docker/`、CI workflow、`tests/`、vendored 框架集成面)
|
||||
- **方法声明**:按用户指令**未读任何项目文档**(所有 `.md`、`docs/`、`audit/` 存量报告一律未读),结论全部来自代码本身。六路只读 Explore 并行勘察 + 主线程对全部 P0 与关键 P1 逐条 file:line 实证复核(16/16 坐实,标注【已复核】)。
|
||||
- **性质**:绝对只读审计。第五节全部为处置意见,**均未执行**;git 工作区除本报告新增文件外与审计前完全一致。
|
||||
|
||||
---
|
||||
|
||||
## 一、系统架构总览(从代码还原)
|
||||
|
||||
### 1.1 运行拓扑:三机分工
|
||||
|
||||
| 机器 | 角色 | 代码证据 |
|
||||
|---|---|---|
|
||||
| Mac 开发机 | 开发 + Gitea 自托管 CI runner(`HOME=/Users/chufeng`) | `.gitea/workflows/ci-cd.yml:14` |
|
||||
| Synology NAS | Docker 单容器跑 `sanguo_api`(uvicorn 单 worker)+ APScheduler 每日 20:30 `run_live_step`;宿主 python 脚本家族做双向同步与监控 | `docker/Dockerfile.nas`、`sanguo_api/app.py:59-64`、`scripts/nas_sync/` |
|
||||
| Windows VPS(49.232.102.198) | 生产数据面:约 17 个 schtask 采集脚本直写 `data/quant_trading.db`;常驻 `sanguo-api`、`live-supervisor`、`shadow-desk`、`qmt-relogin`;miniQMT 柜台 | `scripts/data_platform/monitor_registry.py:133-151`、`sanguo_live/runner.py:416-525` |
|
||||
|
||||
### 1.2 代码分层
|
||||
|
||||
```
|
||||
vendored 框架层 vnpy_v4.4.0/、vnpy_qmt_v0.3.3/(sys.path 注入,不 pip install)
|
||||
↑
|
||||
自有包层 sanguo_data / sanguo_factor / sanguo_portfolio / sanguo_backtest
|
||||
sanguo_trader / sanguo_live / sanguo_qmt_bridge / sanguo_orchestrator
|
||||
sanguo_api(生产后端) / sanguo_web(平行遗留后端,零测试)
|
||||
↑ ↑
|
||||
脚本层 scripts/data_platform(45py)、nas_sync、strategy_monitor、
|
||||
qmt_relogin —— 80 个非归档脚本中仅 14 个 import sanguo_*,
|
||||
其余绕过包层直连 sqlite(43 处 sqlite3.connect)
|
||||
↑
|
||||
前端 Vue3 + Vite + Pinia(frontend/,手写 TS 契约)
|
||||
调度 完全外置(Windows schtask + NAS DSM 计划任务),代码内无 cron
|
||||
```
|
||||
|
||||
依赖方向总体健康:`sanguo_factor → sanguo_data` 单向(9 处 import),`sanguo_data` 零反向依赖;策略层通过 `provider` 注入与 `BrokerFacade` 两个接缝与框架解耦。
|
||||
|
||||
### 1.3 关键进程链
|
||||
|
||||
- **NAS 容器主进程**:`sanguo_api` startup 注册 APScheduler → 20:30 `run_live_step`(`sanguo_trader/live_orchestrator.py:69-196`)逐 live 账户:恢复状态 → 全量重放 qfq bar warmup → 拉当日双源 bar → `PaperEngine.step` 撮合 → 落库 → 影子下单(模式 A)/ bridge 回报校正(模式 B)。
|
||||
- **VPS 实盘链**:`sanguo_live` supervisor 轮询 `live_accounts.status` 起 CTA 账户(进程内 vnpy 原生 `MainEngine+QmtGateway+CtaStrategy`)与组合账户(独立子进程 `sanguo_portfolio.runner_live`);`AccountMonitor` daemon 每 60s 直连 xtquant 写快照。
|
||||
- **影子柜台**:第二套 supervisor 按 `mode=shadow` 账户拉子进程,`ShadowBroker` 本地撮合,与实盘双轨 EOD 对账。
|
||||
- **QMT bridge**:FastAPI(127.0.0.1:8765, token 鉴权) 封装 xtquant,经 frpc 隧道跨网;Phase 2 起另有进程内 `QmtGatewayClient` 单例替代路径。
|
||||
|
||||
### 1.4 数据流
|
||||
|
||||
下载(`datafeed.py` 三源 fallback)→ 校验(`validator.py` 7 条 fatal 规则)→ 双写(parquet 年分区原子写 + vnpy SQLite)→ 外部镜像域(corpus/dmsk 经 `partition_reader.py` 分区核,带 schema 漂移检测)→ 读取(`datareader.py` 双读、`fund_pit.py` PIT asof)→ 因子(registry 注册制 + PIT 分块 join)→ 策略(五段状态机 backtest→paper→shadow→live→retired + `promotion_gate` 硬闸)→ 执行(bridge/QMT)。
|
||||
|
||||
---
|
||||
|
||||
## 二、总体评价
|
||||
|
||||
**值得肯定的底子**(这些是后续改造可以依靠的资产):
|
||||
|
||||
1. **契约与正确性意识强**:PIT 红线、原子写范式(tmp+`os.replace` 多处贯彻)、fail-closed 防御(数据失败≠熊市的事故驱动守卫)、`trade_receipt` 指纹契约、promotion_gate 纯函数硬闸——大量"事故驱动"的防御性注释表明团队从实盘事故中系统性地固化了教训。
|
||||
2. **测试资产真实**:2358 个测试函数,非 mock 空转——`tests/trader/test_matcher.py:50-98` 测真实涨跌停板种边界(零 mock),`tests/factor/conftest.py:33-72` 合成财务域内置"缺报告期/缺公告日"等真实陷阱,`test_promotion_gate.py` 是 TDD 样板。
|
||||
3. **监控有架构设计**:声明式 `monitor_registry`(约 40 监控对象)→ 只读体检 → alerts.db 单写者 → 前端消费,结果/过程/调度/衍生四层分诊。
|
||||
|
||||
**核心短板**(第三、四节展开):安全面失守(凭据明文、无鉴权端点、平行后端裸奔)、回测正确性缺陷(前视偏差使晋升闸门的数字不可信)、实盘链路健壮性缺口(非幂等重试、无事务、丢单静默)、以及三层结构性债务(双后端并存、脚本层绕包层、数据根多处定义)。
|
||||
|
||||
---
|
||||
|
||||
## 三、问题清单
|
||||
|
||||
严重级定义:P0=实盘资金/安全直接风险;P1=正确性或可靠性缺陷,条件下会酿成实损;P2=工程质量/可维护性;P3=卫生问题。标 【复核】 的条目为主线程逐行实证过。
|
||||
|
||||
### P0(5 条)
|
||||
|
||||
**P0-1 生产凭据明文入库,两处互证** 【复核】
|
||||
- `config/backtest.yaml:14`:bcrypt hash 行尾注释直接附明文口令 `Ccf7561523*`;`:15` `jwt_secret: "change-me-in-production"`;`docker/.env`/`docker-compose.yml:46` 同占位密钥。
|
||||
- `.gitea/workflows/ci-cd.yml:174-176`:CI 每次以同一明文口令 curl 登录 NAS 后台。
|
||||
- 影响:任何能读仓库/CI 日志者即获得 NAS Web 后台 admin 凭据,且可自签 JWT。
|
||||
|
||||
**P0-2 策略文件读写接口无鉴权 + 文件名未净化 + 写入即动态执行 = 未认证代码执行面** 【复核】
|
||||
- `sanguo_api/routes_strategy.py:1-4` 自述"MVP 不挂 verify_token",全套端点无鉴权;`sanguo_api/strategy_registry.py:213-222` `os.path.join(root, rel, name)` 对 `name` 无白名单/归一化(穿越可行性取决于框架对编码路径的处理,但防御缺失是事实);写入的 `.py` 被 `_load_self_owned_module_classes` 动态 import,在回测/实盘引擎中执行。
|
||||
- API 绑定 `0.0.0.0:8000`(`run_web.py:32`)且有外网域名接入。tests/api 现有测试反而把无鉴权行为固化为预期(`tests/api/test_routes_strategy.py:18,54` 以无 token 调用断言 200)。
|
||||
|
||||
**P0-3 `sanguo_web` 平行后端:硬编码密钥 + 默认口令 + CORS 全开 + 可下真实订单 + 零测试** 【复核】
|
||||
- `sanguo_web/api/deps.py:16` `SECRET_KEY="sanguo_secret_key_change_in_production"`(JWT 可离线伪造);`deps.py:161` 管理口令默认 `admin123`;`api/__init__.py:83-89` `allow_origins=["*"]` 且 `allow_credentials=True`;`api/routes/trading.py:134-171` 直通 vnpy `send_order` 真实下单。
|
||||
- 该 app 可被 `uvicorn sanguo_web.api:app` 直接拉起;tests/ 全目录 grep `sanguo_web` 零命中(22 个模块完全未验证);与 `sanguo_api` 的 `/api/v1/auth`、`/api/v1/strategy` 路由路径冲突。
|
||||
|
||||
**P0-4 动量/轮动策略回测前视偏差,晋升闸门数字不可信** 【复核】
|
||||
- `momentum_timing.py:145-152` 以当日 `cur_date` 为区间终点在盘中 9:30 决策,而 provider SQL 上界含当日(`providers/fetchers/price.py:210-224`,end+1 排他即含当日 bar)——回测库里当日日线已存在,`panel.iloc[-1]` 取到 9:30 尚未产生的收盘价;实盘 xtdata 当日无 bar,同一代码回测/实盘取数区间天然不同。
|
||||
- 同类:`local_unified_provider.py:826-837` 用**当日** close/volume 判涨跌停/停牌,回测中 9:30 调用即"预知今天收盘"。对照组 `factor_topn.py:108-123` 已用"截面严格早于调仓日"正确规避,证明项目内有正确范式但未统一。
|
||||
|
||||
**P0-5 CI 质量门禁缺资金核心** 【复核】
|
||||
- `.gitea/workflows/ci-cd.yml:116` 仅跑 `tests/data_platform tests/portfolio tests/factor tests/api`;`tests/trader`(27 文件:撮合、涨跌停、软限、持仓账本、shadow)、`tests/backtest`、`tests/data`、`tests/orchestrator` 全部不在门禁内——撮合/风控回归可带绿灯直推 NAS。
|
||||
- 附带:测试依赖 runner 本机硬编码路径 `/Users/chufeng/.../venv310/bin/python`(`ci-cd.yml:110`),push 即自动部署 NAS(`ci-cd.yml:135-152`),可复现性为零。
|
||||
|
||||
### P1(13 条)
|
||||
|
||||
**P1-1 实盘报单模糊失败自动重发,非幂等** 【复核】
|
||||
`sanguo_qmt_bridge/xt_gateway.py:145-166` `_retry_with_reconnect` 对任何异常(含报单已发出但响应丢失的模糊失败)reconnect 后原样重发,`place_order` 挂在其上(:264);remark 写死 `sanguo_bridge`(:256)无幂等键。网络抖动时同一笔委托可能进券商两次,首单成孤儿无法追踪。
|
||||
|
||||
**P1-2 live_step 无事务性,崩溃重跑重复撮合**
|
||||
撮合中每笔成交即时 commit(`engine.py:176-177`),positions/pending/balance 只在 step 末尾整体落库(`live_orchestrator.py:174-186`);中途异常仅外层记日志(:340-341)。次日重跑把同一批 pending 再撮合一遍——成交重复、账本失真,无 run-level 标记可检测。
|
||||
|
||||
**P1-3 模式 B 回报校正按整个 QMT 账户覆盖持仓,不分账户、不同步分户**
|
||||
`live_orchestrator.py:286-298` 将 bridge /positions 的**整个账户**持仓重建进 `account.positions`(bridge 下单统一打 `sanguo_bridge` 标签却未用于过滤);`strategy:*` 分户账本不随之校正。多 paper 账户指向同一 QMT 账户时互相污染,次日 step 可在 `position_ledger.py:34-37` 崩溃。
|
||||
|
||||
**P1-4 影子下单失败永久丢单** 【复核】
|
||||
`live_orchestrator.py:227-242` bridge 失败/无响应也 `save_shadow_order(status="failed")`,`is_trade_shadowed`(`persistence.py:343-350`)按存在性去重——该笔**永不重试**,仅 logger.warning。与"不能重复下单"硬约束相比选择了"宁可丢单",且无告警升级。
|
||||
|
||||
**P1-5 `QmtGatewayClient` 资金/市值用错价格源**
|
||||
`sanguo_trader/qmt_gateway_client.py:146-148` 市值=Σvolume×price,而 vendored `td.py:171` 给 `PositionData.price` 填的是**成本价**——market_value 失真、cash=balance−mv 连带失真,经模式 B 写入 `paper_daily_balance`;`:152` `can_use` 误用 `yd_volume`。该文件全 tests/ 零覆盖。
|
||||
|
||||
**P1-6 数据写读链路文件名约定互不兼容** 【复核】
|
||||
`sanguo_data/datawriter.py:21` 写 `{symbol}.parquet`,`datareader.py:24` 读 `{prefix}{symbol}_daily.parquet`——writer 产出 reader 永远读不到,两链路同时启用即静默数据缺失,无往返测试。
|
||||
|
||||
**P1-7 provider 契约不齐,baostock 路径静默全清仓**
|
||||
`BaostockProvider` 缺 `get_limit_status_batch/get_closes_panel` 等方法;`all_weather.py:497-501` 对未实现返 `{}`,`filters.py:105-110` 把缺失一律当停牌剔除 → 换 provider 跑 all_weather 时候选剔光、持仓全卖、无任何报错。
|
||||
|
||||
**P1-8 vendored `vnpy_qmt` 三处缺陷无人兜底**(自述"源码自行维护"却无 diff 基线)
|
||||
`td.py:185-187` 未知订单的成交回报直接丢弃(重启后当日早前成交全丢);`td.py:109-110` `on_disconnected` 空实现(断线交易静默停摆);`td.py:32` session_id 取 HHMMSS 同日重启必撞。
|
||||
|
||||
**P1-9 因子事件流 9 处静默吞错**
|
||||
`sanguo_factor/fundamental_domains.py:78,132,196,249,319,357,440,518,588` `except Exception: continue`——单文件损坏/列缺失静默缩水为 NaN 特征,IC 退化完全无信号。
|
||||
|
||||
**P1-10 监控自身单点:data-monitor 两班不在自监名单** 【复核】
|
||||
`monitor_registry.py:133-151` SCHTASKS 名单含 strategy-monitor 两班,**不含** `sanguo-data-monitor-eve/morn`——data_monitor 若死,alerts/health 停更且系统内无人告警。
|
||||
|
||||
**P1-11 NAS→VPS 镜像"先删后传"+半截文件永久损坏**
|
||||
`push_vps_mirror_daily.sh:81-83` 远端分区先 `Remove-Item -Recurse -Force` 再传,中途失败即远端数据缺失至次日;`sync_parquet_daily.sh:55,69,88` 文件存在即跳过、无 size/checksum 校验——scp 中断的截断 parquet 永不重拉。
|
||||
|
||||
**P1-12 前端生产构建仍在无条件短路 mock 数据** 【复核】
|
||||
`frontend/src/api/client.ts:57` `matchPipelineMock` 不受 MOCK_ON 开关限制(build 也生效),`src/mock/index.ts:119` `PIPELINE_MOCK=true` 硬编码——pipeline 8 个页面部署后显示假数据,而真端点已存在,可能误导晋级决策。
|
||||
|
||||
**P1-13 `_ex` 对照副本已发生行为漂移**
|
||||
`all_weather_ex.py`(668 行整文件复制)自述"Phase 3 删除"仍在;`momentum_timing_ex.py` 缺母本的当日预取缓存且多出独立方法——双轨对照测的已不是同一逻辑;4 个副本零专属测试。
|
||||
|
||||
### P2(精选 14 条)
|
||||
|
||||
| # | 问题 | 证据 |
|
||||
|---|---|---|
|
||||
| P2-1 | 回测/实盘费用滑点三处口径不一致(万3+千1 / 硬编码 0.001 / 策略内 0),gate 判定基于与实盘不同的成本 | `runner_backtest.py:53-58,357-362`、`live_strategy.py:280-288`、`all_weather.py:112-116` |
|
||||
| P2-2 | 时区纪律分裂:analyzer 显式 Asia/Shanghai,validator/alerts_store/eval_store/monthly_review 用主机本地 naive now——NAS/VPS 双机对拍随主机漂移 | `analyzer.py:190` vs `validator.py:70`、`eval_store.py:67,73` |
|
||||
| P2-3 | 数据根"四处各表":fundamental_schema/partition_reader/fund_pit/data_platform.yaml 各养一套默认绝对路径(含 `C:\国金QMT...`),无单点真相 | `fundamental_schema.py:9`、`partition_reader.py:34-37`、`fund_pit.py:39-40`、`config/data_platform.yaml:3-10,64` |
|
||||
| P2-4 | PIT 语义双实现漂移温床:partition_reader 自述 fundamental_pit 是唯一正确性模型,fund_pit 又独立实现一套 asof/终值语义 | `partition_reader.py:5-6` vs `fund_pit.py:120-148` |
|
||||
| P2-5 | 调仓"先卖后买"无事务性:卖出完成后买入循环任一异常冒泡,仓位停半调仓态,月度策略要等下个调仓日自愈 | `value_selection.py:209-228`、`all_weather.py:262-287` |
|
||||
| P2-6 | 实盘正向 `order_value` 直通全账户定寸(B2 虚拟化漏口),stop_loss 补仓恰好走此路径,实例预算被污染 | `live_strategy.py:203-205`、`all_weather.py:204-210` |
|
||||
| P2-7 | balance 同日双写 + 恢复查询无 tiebreaker,模拟值/校正值哪行生效取决于 rowid | `engine.py:96-101`、`live_orchestrator.py:304-305`、`persistence.py:311-321` |
|
||||
| P2-8 | bridge 全 async 端点直调同步 xtquant(慢查询卡死事件循环);探活失败裸起 daemon 线程重连,可并发重建 `self._xt` | `bridge.py:130-153,78-80`、`xt_gateway.py:111-125` |
|
||||
| P2-9 | NAS 容器 PYTHONPATH 缺 `vnpy_qmt`(只有 run_web.py 注入),`SANGUO_USE_QMT_GATEWAY=1` 在容器内必 ImportError 且被大 try 吞成 warning | `Dockerfile:72`、`run_web.py:12-22`、`live_orchestrator.py:245,309` |
|
||||
| P2-10 | 实盘 supervisor 单点:CTA 引擎全在同一进程,组合子进程崩溃仅标 stopped 不重启(影子侧反而有自动重启);独立 run() 无断线 watchdog | `runner.py:452,499-505,166-167` vs `shadow/supervisor.py:165-176` |
|
||||
| P2-11 | `registry.py` 全局单例 + 导入即注册 + composite_weighting 导入时读文件——import 副作用读写 FS,spawn 多进程重复全套 IO | `registry.py:4`、`__init__.py:2-10`、`composite_weighting.py:396-401` |
|
||||
| P2-12 | 52 处生产代码 `except Exception: pass` 静默吞错(如 orchestrator 任务持久化失败连日志都没有);JWT 走 URL query 进访问日志 | `sanguo_orchestrator/runner.py:35`、`routes.py:253` |
|
||||
| P2-13 | 全部同步脚本硬编码 VPS 公网 IP+私钥路径+`StrictHostKeyChecking=no`(5 个脚本同款);VPS 部署闸门是明文"推vps"字面量比较 | `sync_parquet_daily.sh:19-20` 等、`vps-deploy.yml:30-36` |
|
||||
| P2-14 | 43 处脚本直连 sqlite 绕过包层写同一库表,schema 口径与 sanguo_data 分裂;告警无任何主动推送出口(无邮件/webhook),红态只能人看前端 | `xt_eod.py:31,164-168`、`bs_eod.py:29-31`、`data_monitor.py:485-511` |
|
||||
|
||||
### P3(卫生级,一句话清单)
|
||||
|
||||
- 脚手架死代码暴露为入口:`sanguo_data/scheduler.py:51,54,57`(NotImplementedError 桩+硬编码 2020/2026 日期);`runner_backtest.py:278-281` channel_test 回测静默空转。
|
||||
- `analyzer.py:85-441` 单函数 356 行 + 全局替换 sys.stdout + monkey-patch alphalens,非线程安全。
|
||||
- 鉴权依赖 4 个路由模块复制粘贴已分叉(`routes.py:47` vs router 级 dependencies 两种风格)——P0-2 正是这种漂移的产物。
|
||||
- 列表端点无分页 + N+1(`routes.py:436-537`、`routes_paper.py:221-254`、`routes_live.py:162-194`);对照 `routes_alerts.py:27-29` 有正确做法。
|
||||
- `instance_store.py:24-37` 读改写 JSON 无文件锁,路由线程池并发丢更新。
|
||||
- `trade_calendar.py:23` 只排周末不认法定节假日;`limit.py:117` 新股首日 ±44% 未实现。
|
||||
- `pyproject.toml:98-100` pytest 配置与根 `pytest.ini` 并存(前者被忽略,死配置);`tests/factor/test_fast_ops.py:14` 硬编码 `/Users/chufeng` 绝对路径。
|
||||
- 依赖三源手工同步(base `>=` / lock `==` / docker 子集),`aioredis==2.0.1` 已废弃;vendored vnpy 靠 sys.path 注入,`pip check` 视 vnpy 缺失。
|
||||
- `_archive`(59 文件)+`legacy_tasks`(24) 随 promote.rsync 全量推生产,无过期策略;schtask 全部 SYSTEM/HIGHEST 无最小权限。
|
||||
- universe 缓存(`universe.py:132-135`)与 scheduler progress(`scheduler.py:21,37`)非原子写、坏档无自愈;`datafeed.py:43-47` 测试 helper(sleep 60s)常驻生产模块。
|
||||
- Gitea 地址硬编码内网 IP(`version_registry.py:150`);回测 worker 硬编码 VPS IP + `StrictHostKeyChecking=no`(`portfolio_worker.py:28-29,204-207`)。
|
||||
- 影子账户重启恢复把历史拒单(无 offset 键)映射为 sell,可凭空卖出持仓(`shadow/runner.py:191-204`、`persistence.py:198-204`)。
|
||||
- docker-compose 的 postgres/nginx/redis 与实际单容器拓扑脱节且含弱默认口令;`deploy-synology.sh:241-243` 打印默认口令 admin123。
|
||||
|
||||
---
|
||||
|
||||
## 四、横切指标(全仓扫描,排除 vendored/tests/audit)
|
||||
|
||||
| 指标 | 数值 | 备注 |
|
||||
|---|---|---|
|
||||
| 裸 `except:` | **0** | ruff E722 生效,好 |
|
||||
| 生产代码 `except Exception` | 313 处,其中紧随 `pass` 静默 **52 处** | scripts 另有 132 处 |
|
||||
| `print(` 生产代码 | sanguo_* 71 处 vs logging 584 处 | scripts 非 archive 约 400 处 |
|
||||
| 硬编码绝对路径 | 53 处(其中 `/Users/chufeng` 12 处) | 多机拓扑下每处都是迁移地雷 |
|
||||
| TODO/FIXME/HACK | 6(全 TODO) | 节假日日历、新股涨跌幅两处涉及交易正确性 |
|
||||
| 生产 `time.sleep` | 14 处 | supervisor 轮询类为主 |
|
||||
| 明文凭据实锤 | 2 处(见 P0-1) | 另有 3 处弱默认密钥 |
|
||||
| 测试函数总数 | 2358 | 质量分化:trader/factor 真边界,data_platform mock 密度最高 |
|
||||
| CI 门禁覆盖 | 4/8 测试目录 | trader/backtest/data/orchestrator 缺席 |
|
||||
|
||||
**测试覆盖黑洞**(对照 tests/ 目录逐一核对):`sanguo_web`(22 模块零测试)、`sanguo_trader/qmt_gateway_client.py`(实盘执行路径零覆盖)、`sanguo_qmt_bridge/bridge.py` HTTP 层、`sanguo_trader/strategy/` 8 个 CTA 策略、4 个 `_ex` 副本、`runner_live` 装配路径、全部 NAS 同步 shell 与运维脚本(`promote.sh`、5 个 sync 脚本)——最后这批恰是数据安全风险最集中的部分。
|
||||
|
||||
---
|
||||
|
||||
## 五、改善建议(处置意见,均未执行)
|
||||
|
||||
### 第一档:立即(本周内,按风险排序)
|
||||
|
||||
1. **轮换并去明文化全部凭据**(P0-1):改 NAS admin 口令与 jwt_secret;`config/backtest.yaml:14` 删注释明文;CI 登录验证改 Gitea secret + 专用低权限探针账号;评估是否需清洗 git 历史。
|
||||
2. **给 `routes_strategy` 全端点挂鉴权 + 文件名白名单**(P0-2):`^[A-Za-z0-9_-]+\.py$` + basename 归一 + 统一 `verify_token`;同步修正把无鉴权固化为预期的 `tests/api/test_routes_strategy.py`。
|
||||
3. **隔离 `sanguo_web`**(P0-3):确认其为遗留后从可启动面移除(移出打包/加启动断言),或最起码改掉硬编码 SECRET_KEY、admin123 默认、CORS `*` 三处再谈保留。
|
||||
4. **CI 门禁补齐 `tests/trader tests/backtest tests/data tests/orchestrator`**(P0-5):四套在 Mac 均可跑,trader 全绿成本秒级。
|
||||
5. **`_retry_with_reconnect` 对 `place_order` 禁用模糊失败重试**(P1-1):仅"确定未提交"的失败可重试;模糊失败挂起待 `/orders` 对账裁决。
|
||||
|
||||
### 第二档:短期(1-2 周)
|
||||
|
||||
6. **修复回测前视**(P0-4):以 `factor_topn.py:108-123` 的"截面严格早于调仓日"为范式,修 momentum 系区间终点与 `get_limit_status_batch` 的当日判定;在 provider 层统一 `as_of` 语义。
|
||||
7. **live_step 事务化 + 运行台账**(P1-2/3/4):step 末尾落库与成交入库同事务;建 `paper_run_log` 记 start/finish/failed,重跑前检 partial 拒绝盲目重撮合;reconcile 按 bridge 标签过滤并同步分户;影子下单 failed 进入待重试队列而非永久丢单。
|
||||
8. **provider 正式契约 + fail-fast**(P1-7):方法面做成基类 abstract 或启动能力探测,缺失拒绝起跑;补"provider 无此能力"显式分流,消灭 baostock 静默全清仓形态。
|
||||
9. **告警出口**(P1-10/P2-14):data-monitor 两班纳入 SCHTASKS 自监(或反向盯 health_latest.json 新鲜度);alerts 增加一条 webhook/邮件出站通道。
|
||||
10. **同步通道加固**(P1-11):镜像改 staging+原子 rename 两阶段;listing 段加 size/行数校验失败即删重拉;host key 固定化。
|
||||
11. **统一写读链路 + 原子写补齐**(P1-6):datawriter/datareader 文件名约定合一并补 round-trip 测试;universe/progress 缓存套用仓内已有 `atomic_write_parquet` 范式。
|
||||
12. **`QmtGatewayClient` 估值修正**(P1-5):market_value 改最新价/原生字段、`can_use` 用 `can_use_volume`,补单测。
|
||||
13. **前端 mock 开关**(P1-12):`PIPELINE_MOCK` 改构建环境变量默认 false,删无条件短路分支。
|
||||
|
||||
### 第三档:中期(架构演进)
|
||||
|
||||
14. **数据访问层收编**(P2-14/P2-3):`sanguo_data` 增设统一 writer,43 处脚本直连 SQL 逐步收编;数据根四表归一到 `config.py` 单点 + `SANGUO_DATA_ROOT`。
|
||||
15. **双后端决策**:`sanguo_web` 与 `sanguo_api` 路由已冲突,长期二选一或明确分工边界;前端类型改 OpenAPI 生成替代手写 interface。
|
||||
16. **`_ex` 副本收敛**(P1-13):按其自述执行 Phase 3 删除,或参数化挂同一类;期间加"副本与母本 diff 仅限取数调用名"的 CI 守卫。
|
||||
17. **vendored 治理**:为 `vnpy_qmt_v0.3.3` 建 diff 基线,td.py 三缺陷在 fork 内修掉或适配层兜底;统一两条启动路径的 sys.path。
|
||||
18. **鉴权/错误契约统一**:4 份复制粘贴的 `verify_token` 收敛为单一 deps;错误体统一 `{"detail": ...}`;52 处 except-pass 分级改造(持久化类必须 warning+exc_info)。
|
||||
19. **时区纪律统一**:全部落盘时间戳与"今天"判定统一 `ZoneInfo("Asia/Shanghai")`(analyzer 已有先例,一次 sed 级改动)。
|
||||
|
||||
---
|
||||
|
||||
## 六、审计方法与覆盖声明
|
||||
|
||||
- 六路并行只读勘察:①sanguo_data+sanguo_factor ②sanguo_portfolio+sanguo_backtest ③trader/live/qmt_bridge/orchestrator+vendored 集成面 ④api/web/frontend ⑤scripts/config/CI/docker ⑥tests 体系+全仓横切扫描。
|
||||
- 主线程实证复核 16 处高影响结论(全部 P0 与关键 P1),16/16 与勘察报告一致,文内以【复核】标注。
|
||||
- vendored `vnpy_v4.4.0`/`vnpy_qmt_v0.3.3` 未逐行审计(第三方源码),仅审 sanguo 层集成面与 vendored 缺陷的传导路径。
|
||||
- 局限:未读任何文档意味着部分设计的**意图**可能被误判(例如 `sanguo_web` 是否有意保留、CI 门禁收窄是否有过渡期理由);若与文档记录冲突,以第二步答辩/对质环节澄清。
|
||||
|
||||
---
|
||||
|
||||
## 七、处置声明
|
||||
|
||||
本报告全部建议仅停留在意见层面,**均未执行**。审计过程零写入项目文件(含代码、配置、文档);git 工作区与审计前快照一致(审计前已存在的未提交修改保持原样未动),唯一新增文件为本报告。等待第二步指令。
|
||||
@@ -0,0 +1,183 @@
|
||||
# 文档审计报告(第二轮 · 文档合理性 + 文档vs代码一致性 + 过期判定)
|
||||
|
||||
- **日期**:2026-10-01
|
||||
- **审计范围**:全仓约 100 份有效文档——README/CHANGELOG/CLAUDE.md、docs/(deployment、design、superpowers specs+plans、pipeline、factor_research、research、archive、session_prompts)、scripts 内 README、sanguo_qmt_bridge/README、audit/ 全部 16 份存量报告。vendored 框架文档不在范围。
|
||||
- **方法**:六路只读精读并行 + 主线程对全部 P0/P1 双向实证复核(16/16 坐实,标【复核】)。代码侧事实与第一份报告(`audit/20261001_architecture_code_audit/`)交叉引用。基线:master @ b6fb9e4(今晨工作区修改已由其他 session 提交,本次以工作区现版为准)。
|
||||
- **性质**:绝对只读。第六节全部为处置意见,**均未执行**;除本报告文件外 git 状态未动。
|
||||
|
||||
---
|
||||
|
||||
## 一、总体评价:文档纪律两极分化
|
||||
|
||||
这个仓库的文档呈现罕见的**两极形态**:
|
||||
|
||||
**好的一面是真好**。`2026-07-21-data-source-fusion-design.md`(1835 行)以"档随码走+日期节勘误"模式让巨档与代码保持惊人同步——§20.11 读取器接口、§20.10 调度表、采集脚本清单逐项对得上,当日仍有勘误提交;`2026-09-22-research-to-trading-pipeline-design.md` 是"设计→落地→回填"闭环的典范(端点/阈值/状态机逐字吻合);`factor-system-design.md` 的"唯一活文档"机制抽查 12 项全部命中;三份 P3 计划(ishortfall/attribution/verdict)与 `p2-vps-tail` 全部落地可对证。历史审计承诺闭环率抽查 15 条全部落码,多条超额完成。
|
||||
|
||||
**坏的一面是系统性失修**。三份 7 月的部署文档(vps-native-brain、windows-bridge-setup、d-phase-windows-deploy)描述的 miniQMT/FastAPI-bridge 架构 9 月 8 日已整体退役,至今以现在时躺在 deployment 目录;7 份 superpowers 计划 checkbox 全部未勾、无一有完成态标注,代码已三度改向而文档外观仍像待执行;README 的"生产模式"命令指向错误的入口;更严重的是——**三轮历史审计(体检/commit-docs 一致性/二审)全部聚焦"文档↔代码一致",对凭据明文、无鉴权端点、CI 门禁缺口零检出**(详见第五节),说明现有文档体系连审计自身都不设防。
|
||||
|
||||
---
|
||||
|
||||
## 二、过期文档总清单(用户点名专项)
|
||||
|
||||
判定口径:**整体过期**=照文档操作会失败或描述对象已不存在,应归档/加墓碑/删除;**部分过期**=主体可用但含已失效的声明/步骤/数字,需定点更新;**现行有效**=抽查通过。
|
||||
|
||||
### 2.1 整体过期(14 份,建议归档或删除)
|
||||
|
||||
| # | 文档 | 过期核心证据 |
|
||||
|---|---|---|
|
||||
| 1 | `docs/deployment/vps-native-brain.md` | 全文描述 miniQMT+FastAPI bridge(:8765)+BRIDGE_TOKEN——runbook §9 已明文 09-08 整体退役 |
|
||||
| 2 | `docs/deployment/windows-bridge-setup.md` | 部署对象=已退役的 sanguo_qmt_bridge 通道(bridge.mysanguo.top/git 通道) |
|
||||
| 3 | `docs/deployment/d-phase-windows-deploy.md` | 架构图与 `sanguo-bridge` schtask 全部退役 |
|
||||
| 4 | `docs/deployment/README.md` | 只索引 2 篇漏 9 篇;:115-118 三个链接目录不存在;权威索引已是 `docs/README.md`(09-27 重写) |
|
||||
| 5 | `sanguo_qmt_bridge/README.md` | 作为运维文档描述退役架构(代码默认值仍一致,但生产栈已换大QMT RPC 桥) |
|
||||
| 6 | `docs/vps-deploy-pending.md` | 一次性任务文档,:66-76 自记"2026-08-02 已推 VPS、tag 已建"=使命终结;机制已固化进 ci-cd.yml |
|
||||
| 7 | `CHANGELOG.md` | 维护停更 3 个月([2.0.0]"即将发布"挂空自 07-02);:35"移除冗余的 Dockerfile.nas"与代码矛盾(文件还在)【复核】 |
|
||||
| 8 | `docs/superpowers/specs/2026-07-07-phase3b-vue-frontend-design.md` | 页面地图整体演化(4 入口→10 组全点亮),预言已被兑现,历史里程碑价值 |
|
||||
| 9 | `docs/superpowers/plans/2026-07-07-phase3c-paper-trading.md` | Task 11 `submit_paper_replay` 全仓不存在;路由清单与实态大面积不符;架构描述被实态推翻 |
|
||||
| 10 | `docs/superpowers/plans/2026-07-11-backtest-result-page.md` | 全部落地,纯完成档 |
|
||||
| 11 | `docs/superpowers/plans/2026-08-12-strategy-management-backend.md` | 全部落地;"MVP 不挂鉴权"决定与"MOCK_ON=false 常量"两处已被推翻 |
|
||||
| 12 | `docs/superpowers/plans/2026-08-24-factor-batch1-alpha101-158.md`(2215 行版) | 验收窗口 end=2026-06-30 已过 3 个月;产物生态已被月度批评链接续 |
|
||||
| 13 | `docs/design/architecture/provider-mcp-expose-design.md` | **设计未实施**(全仓无 sanguo_mcp)+"14 个公开方法"与 12 处行号全失效(现 20+ 方法) |
|
||||
| 14 | `docs/research/README.md` | 死模板:描述的 factors/alpha、strategies/cta 目录体系不存在,与 09-27 已删的 4 个空壳 README 同类漏网 |
|
||||
|
||||
### 2.2 部分过期(22 份,建议定点更新)
|
||||
|
||||
| # | 文档 | 过期点(择要) |
|
||||
|---|---|---|
|
||||
| 1 | `README.md` | 横幅已声明失效,但正文仍以现在时给出:**生产命令=`uvicorn sanguo_web.api:app`(P0,见三节)**、端口 8002/8080(实际单端口 8000)、admin/admin123 凭据指引、`docker/entrypoint.sh`+`examples/`+`tests/test_api.py` 等断链【复核】 |
|
||||
| 2 | `.claude/CLAUDE.md` | :152 触及面沿用"api/web 前端不触及 VPS"旧口径(P0 连锁,见三节) |
|
||||
| 3 | `docs/three-env-code-promote.md` | §12:273 触及面矩阵错误(P0);§4 reload 用旧任务名 sanguo-bs-eod(P1);§1 NAS 路径与 promote.sh 实推路径不符;§3.1"13 个模块"实 15 |
|
||||
| 4 | `docs/session-environment-guide.md` | §3 冒烟步骤引用不存在的 `scripts/smoke_e2e.py`(P1);§6"无常驻 web"过时;§8 dispatch 样例缺 `confirm` 字段必失败 |
|
||||
| 5 | `docs/deployment/nas-deploy-plan.md` | §四重建命令无 `--init`(P1,复现已记载的容器事故路径);§五外网链路已废(.top 首尔入口 502 残留);§三"手动 rsync"已被 CI 部署取代 |
|
||||
| 6 | `docs/deployment/env-version-matrix.md` | VPS 角色仍写"miniQMT + bridge";§12 快照大面积被现实超越(NAS 数据副本早已建立) |
|
||||
| 7 | `docs/data-platform/README.md` | §4 schtask 整表旧名(bs-eod/ak-eod/ak-stock…)——正是 09-01 双开事故注释点名"没跟上改名"的那份旧表 |
|
||||
| 8 | `scripts/ops/README.md` | 脚本表漏 2 个;BRIDGE_URL 默认值随切桥失效;坑清单#1 指向已修复的问题;venv311 旧称 |
|
||||
| 9 | `docs/design/paper-shadow-desk-design.md` | §4 checkpoint 扩展(checkpoint_dt/positions_json)**未实现**(P1);§5 CLI 模块名错(shadow_desk→shadow);§8.1 费率承诺与影子侧旧税率矛盾(P1) |
|
||||
| 10 | `docs/design/architecture/provider-tet-design.md` | "4 副本 4/4 语义等值"结论已漂移(母本加当日预取缓存,副本没有);§七迁移计划大半未动(baostock 仍缺 4 方法) |
|
||||
| 11 | `docs/design/backtest-ashare-adapter-plan.md` | C1 定寸机制描述与实现相悖:文档"每次下单按当时 price 重算",实现=engine.size 首根 bar close 一次定死(ashare_engine.py:115-120) |
|
||||
| 12 | `docs/design/dev-test-prod-env-design.md` | §12"实盘只做主板+创业板(filter_kcbj_stock 排除科创北交)"与代码相反——filters.py:117-120 该函数连创业板一并剔除【复核】;§8 手工 rsync 工作流已被 CI 取代;"NAS 无数据副本"超期 6 周未回填 |
|
||||
| 13 | `docs/design/multi-strategy-instance-budget-spec.md` | A2 属性表全"…"占位但标 P0(P1);B2"默认透传不会漏"与实现 fail-fast AttributeError 相反;C 节 Runbook 为已执行完的时点动作;D 节触发条件(2+ 策略并行)现已远超 |
|
||||
| 14 | `docs/design/2026-09-07-miniqmt-shutdown-migration-assessment.md` | 评估结论仍有效,但 §6.5 波次表/观察窗全部到期 13 天未回填终态 |
|
||||
| 15 | `docs/superpowers/specs/2026-07-21-data-source-fusion-design.md` | 唯一巨档活文档,仅 4 处局部过期:§16.1"白名单 14 类"+":383 hot_rank 不在白名单" vs 代码 15 类含 hot_rank(base.py:229-238)【复核】;§20.1"零改动自动可读"落空(P1);§18.8 自称权威表 ak-daily 07:35 vs §20.10.2 19:00 内部矛盾【复核】;尾注 :1835 引用已归档文件断链 |
|
||||
| 16 | `docs/superpowers/specs/2026-07-10-phase3d-live-trading-design.md` | §1"🍏sanguo 跑 NAS Linux Docker"已变双机/VPS 生产【复核】;全篇唯一实盘通道=HTTP bridge,未记载现役进程内 QmtGatewayClient;config 样例缺现役 live 段键 |
|
||||
| 17 | `docs/superpowers/specs/2026-07-07-phase3c-paper-trading-design.md` | §10 `POST /paper/{id}/start`、`WS /ws/paper/{id}` 均未实现;数据源描述过期;未记载后加的 reconcile 端点 |
|
||||
| 18 | `docs/superpowers/specs/2026-08-24-factor-batch1-alpha101-158.md`(64 行 spec) | API 契约漂移:承诺 `/factor/leaderboard`、`/factor/batch_eval`,实际 `/factor/eval/*` |
|
||||
| 19 | `docs/superpowers/plans/2026-09-22-p0-pipeline-console.md` | mock 摘除半途:hypotheses/monthly-review/ic-trend 三端点前端恒 mock 且后端无对应路由(P1);计划内嵌 spec 测试断言与现文件完全相反 |
|
||||
| 20 | `docs/superpowers/plans/2026-09-25-data-monitoring-system.md` | 契约层仍权威,但内嵌初值 8 处已被 09-26~10-01 八轮校准取代:SCHTASKS 14→17、margin 带宽 (200,4000)→(200,8000)、seats (0,400)→(200,2000)、sw_industry (20,60)→(4500,6000)、日志窗 1/8 天→26h、ingest 无绿键回传、日历降级口径、health 单 overall——照计划旧断言 `==14` 必红(P1×6) |
|
||||
| 21 | `docs/superpowers/plans/2026-09-28-strategy-ops-monitor.md` | v1 判据 4 处已被 v1.1/v1.2 重设计(no_restart 盘窗、fills_vs_paper 逐对账、日志面+shadow、engines_expected 排除 live 桌);§6 开放决策点已定案未回填 |
|
||||
| 22 | `docs/research/joinquant_strategies/`(SUMMARY+notes) | SUMMARY.md:29 仍称策略 02"改用 932000",代码已于 07-28 G2 切回 000985(small_cap.py:81-83)【复核】;产出清单缺 4 个 `_ex` 副本;notes 宣称"已修复前视"仅覆盖真实今天 bug,数据层当日 bar 前视仍在(与第一步审计 P0-4 交叉印证) |
|
||||
|
||||
另有 3 份台账/索引类失修:`audit/README.md`(波次表缺 3 个后续波次目录、probes 计数"19 个"实为 22【复核】)、`docs/README.md`(自称"反映仓库真实结构"但缺 audit/、design/、requirements/ 条目)、`docs/spec_quant_terminal_redesign.md`(文头"待评审"失真——§12.6 已于 08-15 实现且全库零引用)。
|
||||
|
||||
### 2.3 现行有效(点名保留,作为文档纪律样板)
|
||||
|
||||
`docs/deployment/vps-production-runbook.md`(当日仍维护,仅 2 处编辑残留)、`docs/qmt-headless-login-runbook.md`、`docs/factor_research/factor-system-design.md`、`docs/pipeline/promotion-five-questions.md`(阈值与代码逐字一致,仅评审记录路径一处失实)、`docs/superpowers/specs/2026-09-22-research-to-trading-pipeline-design.md`、`docs/superpowers/plans/` 下 ishortfall/attribution/verdict/p2-vps-tail 四份、`docs/deployment/vps-unified-deploy.md` 与 `docs/vps-impact-map.md`(合规墓碑样板)。
|
||||
|
||||
---
|
||||
|
||||
## 三、文档 vs 代码不一致清单
|
||||
|
||||
### P0(2 条,照文档操作会直接造成生产事故/安全暴露)
|
||||
|
||||
**P0-1 入口文档指引启动危险平行后端** 【复核】
|
||||
`README.md:105`"生产模式:`uvicorn sanguo_web.api:app --host 0.0.0.0 --port 8000 --workers 2`"——启动的正是第一步审计 P0-3 定性的零测试、硬编码 JWT 密钥、admin123 默认口令、CORS `*`、可下真实订单的 `sanguo_web`;`:116-119` 还给出 admin/admin123 默认凭据指引。README 是仓库入口,等于把"误启动危险后端"写成了官方操作。
|
||||
|
||||
**P0-2 触及面矩阵系统性错误 → 生产漏更新** 【复核】
|
||||
`docs/three-env-code-promote.md:273` §12 矩阵把 `sanguo_api/`+前端标为 🟢"NAS 专属(VPS 无常驻 web)";实际 `.gitea/workflows/vps-deploy.yml:60-70` 构建 dist 推 VPS 并重启 sanguo-api,runbook §7.1 亦载 VPS 常驻跑 API+前端。同一错误复制到 `session-environment-guide.md:113`、`vps-deploy-pending.md:9`、`.claude/CLAUDE.md:152`。**后果:按 [nas]/[vps] 标签纪律提交的 API/前端改动会被判不触及 VPS 而漏推,生产控制台与公网前端跑旧代码**。runbook §7.6:291 虽有 09-25 勘误,但四份文档的矩阵原文未改——照矩阵操作的 session 仍会做错。
|
||||
|
||||
### P1(13 条,照文档操作必失败或得出错误结论)
|
||||
|
||||
| # | 不一致 | 文档侧 → 代码侧实证 |
|
||||
|---|---|---|
|
||||
| 1 | reload 命令用已注销任务名 | `three-env §4:68-77`、`session-guide §6` `schtasks /end sanguo-bs-eod` → 现役 `sanguo-bs-daily`(bs_daily_wrapper.ps1:1、monitor_registry.py:140);`register_schtasks.ps1:3` 脚本侧同病【复核】 |
|
||||
| 2 | 冒烟步骤引用不存在的脚本 | `session-guide:64-70` `scripts/smoke_e2e.py` → 全仓不存在;指定镜像 with-sqlite 起 web 即缺 jwt【复核】 |
|
||||
| 3 | NAS 手动重建命令漏 `--init` | `nas-deploy-plan §四:114-117` 无 `--init` → three-env §9:140-146 铁律明载漏 `--init` 曾清杀 02 任务(已发生事故的复现路径)【复核】 |
|
||||
| 4 | dispatch 样例缺必填字段必失败 | `session-guide:145` body 只有 ref+sha → vps-deploy.yml:19-22 `confirm` required,:30-36 第一步即 exit 1 |
|
||||
| 5 | fusion "读取零改动自动可读"落空 | `fusion §20.1:1004-1005` → fetchers/base.py:229-238 白名单 15 类不含 margin/sw_industry/dragon_tiger_seats/nb_daily/nb_hold,:276-278 白名单外 raise;采集侧却已注册(akshare_static_download.py:184-237)——读写注册表脱节【复核】 |
|
||||
| 6 | manifest 与生产域清单脱节 | `config/data_manifest.yaml` 仅 8 域【复核】→ fusion §20.10.2 已生产 21+ 域(zt_pool×3/fund_flow×2/ths×2/hot_rank/margin×2/seats/nb×2 等);data_gap_check.py:38-44 以 manifest 为供给全集——凡引用未登记域的因子需求会被数据缺口闸门误开 issue |
|
||||
| 7 | 巨档内部矛盾且矛盾方自称权威 | `fusion §18.8:620`"本节=现势唯一完整说明"+:635 ak-daily 07:35 → 同档 §20.10.2:1232 ak-daily 19:00【复核】 |
|
||||
| 8 | 影子 checkpoint 扩展承诺未实现 | `paper-shadow §4:80-83` checkpoint_dt+cash+positions_json+avg_cost → persistence.py:24 仅 checkpoint_date;checkpoint_dt/positions_json 全仓 grep 零命中【复核】;§5 CLI `sanguo_trader.shadow_desk` → 实际 `sanguo_trader.shadow` |
|
||||
| 9 | 影子费率与"券商真实费率"承诺矛盾 | `paper-shadow §8.1:130-133` → shadow/broker.py:33 默认 `stamp_duty_rate=0.001`(旧税率)vs live_instance_ledger.py:32 `STAMP_TAX=0.0005`(09-25 勘误现行万5)【复核】——影子对账自带一倍印花税差,§8.2 净值偏差 <0.5% 阈值会被费率差吃掉 |
|
||||
| 10 | 评审记录路径双轨 | `promotion-five-questions.md:4`"落 config/registry_events.jsonl" → 控制台写 `data/registry_events.jsonl`(routes_pipeline.py:413)、CLI 默认读 `config/`(version_registry.py:175)——无 env 对齐时控制台评审对 CLI 侧不可见【复核】 |
|
||||
| 11 | A2 契约链未闭环+透传承诺与实现相反 | `budget-spec:50-58` 表全"…"占位且"清单里没有的属性默认透传真 context,不会漏" → live_portfolio_proxy.py:22-24 未覆盖属性 fail-fast AttributeError(有意为之但文档未回写)【复核】 |
|
||||
| 12 | mock 摘除责任悬空→生产假数据 | `p0 计划 L7/L2051`+`p1 计划 L1990`"P1 起逐端点摘 mock" → mock/index.ts:122-125 hypotheses/monthly-review/ic-trend 仍恒 mock、routes_pipeline.py 无此三路由、client.ts:57 无条件短路——因子工厂"月度批评"面板等在生产显示 fixture 假数 |
|
||||
| 13 | 因子域 Gitea 地址修了一半 | `p2-vps-tail 修4` 只 env 化 strategy 域 → sanguo_factor/version_registry.py:150 仍硬编码 `http://192.168.2.154:3000`(strategy_registry.py:281 已 env 化)——VPS 侧因子晋级 `--gitea-open` 必失败静默降级 |
|
||||
|
||||
### P2(精选 10 条)
|
||||
|
||||
| # | 不一致 | 双向证据 |
|
||||
|---|---|---|
|
||||
| 1 | 创业板口径文档与代码相反 | dev-test-prod §12:175"主板+创业板" → filters.py:117-120 连 300/301 一并剔除(docstring 自认与聚宽原版一致);factor_topn 用 `_filter_kcbj_keep_chinext` 才含创业板——三处口径需统一为"按策略区分"【复核】 |
|
||||
| 2 | 回测定寸机制描述相悖 | backtest-ashare C1:17-19"每次下单按当时 price 重算" → ashare_engine.py:115-120 engine.size=N 首根 bar 一次定死 |
|
||||
| 3 | 研究档案与代码漂移 | SUMMARY.md:29"改用 932000" → small_cap.py:81-83 已切回 000985【复核】;notes"已修复前视" → momentum_timing.py:145-152 数据层前视仍在 |
|
||||
| 4 | 实盘通道描述过期 | phase3d 全篇 HTTP bridge 六跳 → qmt_gateway_client.py:114-122 进程内直连已"零改替换"为主通道;config live 段实际五键 vs spec 三键 |
|
||||
| 5 | 宿主机描述过期 | phase3d:16"🍏跑 NAS Linux Docker" → 现双机部署、生产在 VPS(pipeline spec §4.2/§4.5)【复核】 |
|
||||
| 6 | phase3c API 面漂移 | §10 `POST /paper/{id}/start`、`WS /ws/paper/{id}` → routes_paper.py 仅 stop/resume,ws.py 无 paper【复核 via agent 双向举证】 |
|
||||
| 7 | MCP 设计方法面全失效 | "14 个公开方法"+12 处行号 → 现役 20+ 方法全漂移;全仓无实现 |
|
||||
| 8 | data-platform README 调度表整表旧名 | §4:54-68 bs-eod/ak-stock/ak-quarter → register_akshare_schtasks.ps1:11-17 现役 ak-daily/ak-weekly/ak-monthly/ak-vintage;与该脚本 :3-9 事故注释同库打架 |
|
||||
| 9 | 计划内嵌初值当权威 | data-monitoring 计划 SCHTASKS==14/带宽三组/日志窗/green_keys 回传/日历降级 8 处 → 代码与测试已全面超越(test_monitor_registry.py:34-38 断言 17) |
|
||||
| 10 | audit 内部相对路径断链 | data-audit-report.md:6,214,219 等 5 处 `reports/probes/...` → 3d47a4b 迁移后实际在 `audit/20260927_three_domain/probes/`;而 commit-docs 审查曾下"零断链"结论——验收性结论与事实不符 |
|
||||
|
||||
P3 级(卫生):README 端口 8002/8080 与断链六处、CHANGELOG Dockerfile.nas 反陈述、fusion 尾注断链、§16.1"14 类"计数、three-env"13 个模块"实 15、runbook §8 标题连续重复两遍、paper-shadow 头部引语逐字重复、verdict"唯一依据"自称与实际不符、审计报告计数反复出错(9 因子实 8、19 probes 实 22)、代码注释"1010"批次标签疑为 1001 笔误、双阈并存(人审共线 0.9 vs 机械 pre-gate 0.95)无互引、budget 决议 B"不设预算层"与 routes_live.py:197-252 已有硬预算闸无回指。
|
||||
|
||||
---
|
||||
|
||||
## 四、文档自身不合理问题(不涉及代码对照)
|
||||
|
||||
1. **危险操作指引**:README/deploy-synology.sh 引导 admin/admin123 弱凭据;`session_prompts/`、ishortfall 计划、data 计划内嵌 VPS 明文账号路径(`Administrator@49.232.102.198`);对照 runbook:12"本文进 git 不含任何凭证"——安全约定只约束了两份主文档自身。
|
||||
2. **计划档案制度缺失**:7 份计划 checkbox 全部 `- [ ]` 未勾、零完成态头注;`2026-08-12` 计划三值互斥(文件日期 08-14/git 提交 09-19/标题 08-12);计划内嵌"完整可誊代码"与实现漂移后变成"看似权威实则历史"的双态文档(本轮 22 条不一致中 16 条源于此)。
|
||||
3. **"现值/权威"标注机制性不可维护**:fusion §18.8 自称现势唯一说明却被 §20.10.2 超越;spec §20.15.1 带宽表"=registry 现值"4 天内三轮翻修(09-27 登记→09-30 改→10-01 再修)——静态"现值"标注每轮校准都制造新的失真窗口。
|
||||
4. **实施后回填纪律不均**:phase3c §12 有回填、phase3d 的 D-4b"⏳等周一"停在 7 月;迁移评估波次表全部到期未回填;strategy-ops §6 开放决策点已定案不回填。
|
||||
5. **归档件无注记**:`docs/archive/portfolio_live_runbook.md:3` 仍以现役语气写"状态:代码就绪,等交易日首跑"(实盘已跑两个月);archive/data 17 篇均无归档头;体检验收 Nit① 记录过此问题,零修复。
|
||||
6. **文档重复两源漂移**:scripts/ops/README §3 与 nas-deploy-plan §3 大段重复同一 rsync 命令且 exclude 不一致——正是 runbook 警告过的"repo 两份副本漂移"在文档层的翻版。
|
||||
7. **引用失效汇总**:smoke_e2e.py、docs/api|user_guide|operations 三目录、examples/、fusion 尾注、audit 内 probes 相对路径 ×5、"待写"的 memory 引用(backtest-ashare:4)。
|
||||
8. **审计自身台账失修**:audit/README 波次表缺 3 波、probes 计数错、commit 审查 F7"顺手改两处数字"承诺未执行——**审计对自身产出的承诺不闭环**。
|
||||
|
||||
---
|
||||
|
||||
## 五、历史审计承诺闭环检查 + 审计盲区(本轮最重要的元发现)
|
||||
|
||||
### 5.1 正面:闭环率极高
|
||||
|
||||
抽查 09-26~10-01 四轮审计(三域体检、data/factor 域审计、commit-docs 一致性、14commits 二审)的处置承诺 15 条,**全部落码**:data 线 🟡-1~4 四修、AkShapeError 断路器、factor F 系 5 项、体检线 README 横幅/pyproject/CLAUDE 口径/ishortfall 20:50 接线、二审 SCHTASKS 17 项/双轨对账/NAS 带宽,乃至验收报告两条残留也在当日 08:16 双 commit 闭环。这个仓库的"审计→修复→验收"流程执行纪律是真的。
|
||||
|
||||
### 5.2 反面:安全与门禁是历轮审计的系统性盲区
|
||||
|
||||
第一步纯代码审计发现的 5 个 P0 中,**4 个从未被任何一轮文档侧审计触碰**:
|
||||
|
||||
- **明文口令**:09-26 体检报告明确读过 `config/backtest.yaml`(记了 bcrypt hash),却没发现同行行尾的明文口令注释;全库 grep 证明 10-01 前所有审计报告对该口令零命中。
|
||||
- **routes_strategy 无鉴权**:10-01 前 audit/ 全目录对"鉴权/verify_token"零命中。
|
||||
- **sanguo_web**:体检线把它记为"legacy 残留"并建议"补测试保留",2ddd645 随即删掉了它仅有的 5 个手工测试——**与第一步审计"隔离/下线"的定性方向相反**,同一组件两轮审计结论矛盾,需用户终裁。
|
||||
- **CI 门禁缺口**:历史审计把"加一个测试目录"记为"收口一个盲区"(9eb5883 加 tests/api 即记 ✅),但从未有报告问"撮合/回测为什么不在门禁内"——逐个收口掩盖了覆盖率总量缺口。
|
||||
|
||||
**教训**:文档↔代码一致性审计对"两侧一致地错"和"安全面缺失"天然免疫(体检报告曾给"spec↔代码一致性 ★★★★★",而 dmsk 半年报截止四处一致地写错即为例证)。建议把固定安全清单(凭据扫描、鉴权面清单、CI 门禁目录 vs tests/ diff)写入 audit/README 约定,每波审计必查。
|
||||
|
||||
---
|
||||
|
||||
## 六、改善建议(处置意见,均未执行)
|
||||
|
||||
### 第一档:立即(本周)
|
||||
|
||||
1. **修 P0-2 触及面矩阵**:three-env §12 把 `sanguo_api/`+前端移入 🔴,同步改 CLAUDE.md:152、session-guide §6/§8、vps-deploy-pending 头注——唯一会直接影响生产版本一致性的文档错误。
|
||||
2. **修 README 入口**(P0-1):生产命令改 `sanguo_api`(run_web.py 路径),删 admin/admin123 指引与 8002/8080/断链节,或按横幅声明把正文整体标注"历史"并给现行入口。
|
||||
3. **修 P1 两个会真出事故的**:nas-deploy-plan §四补 `--init`;session-guide 冒烟步骤删 smoke_e2e.py 改指现存脚本、dispatch 样例补 `confirm`。
|
||||
4. **复核两处生产数据面**:影子柜台印花税率 0.001→0.0005 对齐(或确认账户行覆盖);pipeline 三端点"接真或删页"开挂账 issue。
|
||||
|
||||
### 第二档:短期(1-2 周)
|
||||
|
||||
5. **归档波**:第二节 2.1 的 14 份整体过期文档统一处置——5 份退役架构文档加墓碑头注(仿 vps-unified-deploy.md 样板)、6 份已完成计划/spec 移 `docs/archive/` 原位留指针、死模板 research/README 与 deployment/README 删除、CHANGELOG 冻结并声明"以 git log 为准"。
|
||||
6. **计划档立"三行状态头注"制度**:`状态:已落地(commit)/部分/作废` + `阈值与清单权威出处=代码文件` + `本档内嵌代码为初值不再更新`;初值数字退出 Self-Review 结论。
|
||||
7. **修 P1 契约类**:fusion 两行勘误(14→15 类、07:35→19:00)+ §20.1 措辞;data_manifest.yaml 补齐或从 static/ 目录自动生成;promotion-five-questions 路径更正并与 CLI 收口单一路径;budget-spec A2 表回填或标注"已移交 issue#29"。
|
||||
8. **研究档案对账**:SUMMARY 补"G2 后切回 000985"与 `_ex` 副本现状;notes 前视修复声明更正为"仅修真实今天 bug,数据层当日 bar 前视见第一步审计 P0-4"。
|
||||
|
||||
### 第三档:中期(制度)
|
||||
|
||||
9. **audit/README 升级为真台账**:补波次表、修计数、给每波加"状态+P0 处置"字段;固化"每波审计必查安全清单"约定(凭据/鉴权面/CI 门禁 diff)。
|
||||
10. **文档时效自检进 CI**:脚本扫 docs/ 内相对引用的存在性;"现值"类标注统一改"截至 YYYY-MM-DD 值+权威源指针";采集/读取白名单一致性写测试(采集侧有而读取白名单无即红)。
|
||||
11. **单一事实源声明**:任务名/时刻以 monitor_registry.py+register_*.ps1 为准,相关文档明示;CI 门禁口径只在 ci-cd.yml 维护。
|
||||
|
||||
---
|
||||
|
||||
## 七、处置声明
|
||||
|
||||
本报告全部建议仅停留在意见层面,**均未执行**。审计过程零修改任何项目文件;除本报告外 git 工作区与审计前一致。两份报告(第一步代码架构审计 + 本轮文档审计)互相独立又交叉印证:第一步的代码级 P0 在本轮得到文档侧溯源(含"README 指引误启动""触及面矩阵漏推"两个文档独有的放大器),等待第三步指令。
|
||||
+8
-3
@@ -9,8 +9,13 @@
|
||||
|
||||
## 已有波次
|
||||
|
||||
| 目录 | 波次 | 内容 |
|
||||
|------|------|------|
|
||||
| `20260927_three_domain/` | zcode 项目体检 → 三域审计修复波(09-26~27) | 体检报告 + rebuttal + 终裁 + 验收 + data/factor 域审计五件套各一套 + probes/ 19 个核查脚本 |
|
||||
| 目录 | 波次 | 内容 | 状态 |
|
||||
|------|------|------|------|
|
||||
| `20260927_three_domain/` | zcode 项目体检 → 三域审计修复波(09-26~27) | 体检报告 + rebuttal + 终裁 + 验收 + data/factor 域审计五件套各一套 + probes/ 22 个核查脚本 | ✅ 闭环(修复波已上 VPS run2104) |
|
||||
| `20260927_commit_docs_consistency/` | commit 与文档一致性审查(09-27) | 审查报告 1 份 | ✅ 闭环(发现并入 10-01 二次审查处置) |
|
||||
| `20261001_commit_review_0928_0930/` | 09-28~30 十四提交二次审查(10-01) | 二次审查报告(P1×3/P2×7/P3×15)+ 验收报告 | ✅ 闭环(17 修+3 抗辩+3 不修+2 残留当日补修) |
|
||||
| `20261001_architecture_code_audit/` | 纯代码架构审计第一轮(10-01) | 报告 1 份(P0×5/P1×13/P2×14/P3 卫生清单) | 🔶 处置中(infra 文档侧已吸收;代码侧待分域处置) |
|
||||
| `20261001_docs_audit/` | 文档审计第二轮(10-01) | 报告 1 份(14 整体过期+22 部分过期+P0×2/P1×13) | 🔶 处置中(infra 域当日吸收+归档波;跨域清单已派三域) |
|
||||
|
||||
> 迁移注记:本目录原位于 `docs/archive/reports/audit_20260927/`(9eb5883 归档),2026-09-27 按用户指令整目录迁入 `audit/`。
|
||||
> 2026-10-01 台账纪律(docs_audit §5.2 建议):①每波必补「状态」列跟踪闭环;②**每波审计必查固定安全清单**——凭据扫描(明文口令/密钥)、鉴权面清单(哪些端点无 verify_token)、CI 门禁目录 vs tests/ 实有目录 diff——历轮审计对此三类零检出是系统性盲区。
|
||||
|
||||
+7
-4
@@ -13,18 +13,21 @@
|
||||
|
||||
| 目录 | 内容 |
|
||||
|---|---|
|
||||
| `deployment/` | 部署运维(vps-production-runbook、nas-deploy-plan 等 11 篇) |
|
||||
| `deployment/` | 部署运维(vps-production-runbook、nas-deploy-plan 等 6 篇现役;退役架构文档见 `archive/deployment/`) |
|
||||
| `superpowers/specs/` | 各线唯一设计文档(数据融合 07-21、投研→交易流水线 09-22 等,档随码走 CI 强制) |
|
||||
| `superpowers/plans/` | 实施计划(SDD 产物) |
|
||||
| `superpowers/plans/` | 实施计划(SDD 产物;已完成/作废计划移 `archive/plans/`) |
|
||||
| `superpowers/reports/` | 阶段验收报告 |
|
||||
| `design/` | 设计/方案文档(paper-shadow、dev-test-prod、budget-spec 等;architecture/ 现存 provider-tet 一篇,provider-mcp 已归档) |
|
||||
| `factor_research/` | 因子体系总设计(唯一活文档)及因子线文档 |
|
||||
| `data-platform/` | 数据平台文档 |
|
||||
| `pipeline/` | 流水线文档 |
|
||||
| `research/` | 投研文档 |
|
||||
| `research/` | 投研文档(聚宽移植策略档案) |
|
||||
| `session_prompts/` | session 工作提示归档 |
|
||||
| `archive/` | 已归档(含 data/ 17 篇归档,碑文带重定向头) |
|
||||
| `archive/` | 已归档(data/ 17 篇 + deployment/ 退役架构 + plans/ 已完成计划,碑文带重定向头) |
|
||||
| `img/` | 图片资源 |
|
||||
|
||||
> 仓外姊妹索引:审计报告一律归 `audit/`(根目录,台账见 `audit/README.md`)。
|
||||
|
||||
## 现役根文档
|
||||
|
||||
| 文件 | 内容 |
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
> **⚠️ 已归档(2026-10-01,audit/20261001_docs_audit/ §2.1 归档波)**
|
||||
>
|
||||
> - 归档原因:死索引:只收录 2 篇漏 9 篇+三处链接指向不存在目录;权威索引已被 docs/README.md(09-27 重写)取代。
|
||||
> - 现行权威:docs/README.md(文档中心索引)。
|
||||
> - 处置:已移入 docs/archive/;原文全文见 git 历史(归档 commit 前一版)。
|
||||
|
||||
# 部署文档
|
||||
|
||||
本目录包含 Sanguo VeighNa 平台的部署相关文档。
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
> **⚠️ 已归档(2026-10-01,audit/20261001_docs_audit/ §2.1 归档波)**
|
||||
>
|
||||
> - 归档原因:架构图与 sanguo-bridge schtask 全部退役(09-08)。
|
||||
> - 现行权威:docs/deployment/vps-production-runbook.md。
|
||||
> - 处置:已移入 docs/archive/;原文全文见 git 历史(归档 commit 前一版)。
|
||||
|
||||
# Phase 3D Windows 端部署 + 联调清单
|
||||
|
||||
> D 期实盘集成:Windows miniQMT bridge 部署 + sanguo 联调一站式清单。
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
> **⚠️ 已归档(2026-10-01,audit/20261001_docs_audit/ §2.1 归档波)**
|
||||
>
|
||||
> - 归档原因:全文描述 miniQMT+FastAPI bridge(:8765)+BRIDGE_TOKEN 通道——该架构 2026-09-08 已整体退役(runbook §9)。
|
||||
> - 现行权威:docs/deployment/vps-production-runbook.md(§1 生产架构/§9 退役史)。
|
||||
> - 处置:已移入 docs/archive/;原文全文见 git 历史(归档 commit 前一版)。
|
||||
|
||||
# VPS 原生大脑部署(Option B:vnpy native,无 docker)
|
||||
|
||||
2026-07-15 落地。生产大脑从 NAS 迁到 VPS Windows 宿主**原生运行**(非容器),
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
> **⚠️ 已归档(2026-10-01,audit/20261001_docs_audit/ §2.1 归档波)**
|
||||
>
|
||||
> - 归档原因:部署对象=sanguo_qmt_bridge 通道(bridge.mysanguo.top / git 通道),09-08 已随 miniQMT 退役。
|
||||
> - 现行权威:docs/deployment/vps-production-runbook.md。
|
||||
> - 处置:已移入 docs/archive/;原文全文见 git 历史(归档 commit 前一版)。
|
||||
|
||||
# Windows bridge 部署 + 半自动更新(一站式)
|
||||
|
||||
> sanguo QMT bridge(Windows 端 FastAPI + xtquant)的完整部署 + 以后半自动更新。
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
> **⚠️ 已归档(2026-10-01,audit/20261001_docs_audit/ §2.1 归档波)**
|
||||
>
|
||||
> - 归档原因:设计从未实施(全仓无 sanguo_mcp 实现)+「14 个公开方法」与全部行号引用已失效(现役 20+ 方法);重启此设计须按现码重写。
|
||||
> - 现行权威:无(如需 MCP 暴露 provider 须新起设计)。
|
||||
> - 处置:已移入 docs/archive/;原文全文见 git 历史(归档 commit 前一版)。
|
||||
|
||||
# 设计笔记:用 MCP 直接暴露 LocalUnifiedProvider 给 Claude Code
|
||||
|
||||
> 设计日期 2026-07-30。配套 `provider-tet-design.md` + `docs/research/openbb-platform-research.md`。
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
> **⚠️ 已归档(2026-10-01,audit/20261001_docs_audit/ §2.1 归档波)**
|
||||
>
|
||||
> - 归档原因:Task 11 submit_paper_replay 全仓不存在、路由清单与实态大面积不符、架构描述被实态推翻;回填版见 specs/2026-07-07-phase3c-paper-trading-design.md §12。
|
||||
> - 现行权威:代码本体 + specs/2026-07-07-phase3c-paper-trading-design.md。
|
||||
> - 处置:已移入 docs/archive/;原文全文见 git 历史(归档 commit 前一版)。
|
||||
|
||||
# Phase 3c 模拟盘(Paper Trading)实现计划
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: superpowers:subagent-driven-development(每任务派 fresh subagent,任务间 review)。步骤用 `- [ ]` 跟踪。
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
> **⚠️ 已归档(2026-10-01,audit/20261001_docs_audit/ §2.1 归档波)**
|
||||
>
|
||||
> - 归档原因:全部落地,纯完成档(audit/20261001_docs_audit/ §2.1 #10)。
|
||||
> - 现行权威:代码本体(回测结果页已上线两月)。
|
||||
> - 处置:已移入 docs/archive/;原文全文见 git 历史(归档 commit 前一版)。
|
||||
|
||||
# 富回测结果页(聚宽级)实施计划
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
> **⚠️ 已归档(2026-10-01,audit/20261001_docs_audit/ §2.1 归档波)**
|
||||
>
|
||||
> - 归档原因:全部落地;「MVP 不挂鉴权」「MOCK_ON=false 常量」两决定已被推翻(鉴权缺位=2026-10-01 架构审计 P0-2 现役风险)。
|
||||
> - 现行权威:代码本体 + runbook §7。
|
||||
> - 处置:已移入 docs/archive/;原文全文见 git 历史(归档 commit 前一版)。
|
||||
|
||||
# 策略管理后端 Implementation Plan
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
> **⚠️ 已归档(2026-10-01,audit/20261001_docs_audit/ §2.1 归档波)**
|
||||
>
|
||||
> - 归档原因:验收窗口 end=2026-06-30 已过 3 个月;产物生态已由月度批评链续(现行权威=docs/factor_research/factor-system-design.md)。
|
||||
> - 现行权威:docs/factor_research/factor-system-design.md。
|
||||
> - 处置:已移入 docs/archive/;原文全文见 git 历史(归档 commit 前一版)。
|
||||
|
||||
# 因子研究第一批(Alpha101+Alpha158 挂载与全A重验)实施计划
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
> **⚠️ 已归档(2026-10-01,audit/20261001_docs_audit/ §2.1 归档波)**
|
||||
>
|
||||
> - 归档原因:死模板:描述的 factors/alpha、strategies/cta 目录体系不存在;research/ 实际内容=joinquant_strategies 移植档案(SUMMARY.md 为其索引)。
|
||||
> - 现行权威:docs/README.md + research/joinquant_strategies/SUMMARY.md。
|
||||
> - 处置:已移入 docs/archive/;原文全文见 git 历史(归档 commit 前一版)。
|
||||
|
||||
# 量化研究目录
|
||||
|
||||
本目录用于存放量化投研相关的文档和成果。
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
> **⚠️ 已归档(2026-10-01,audit/20261001_docs_audit/ §2.1 归档波)**
|
||||
>
|
||||
> - 归档原因:页面地图整体演化(4 入口→10 组全点亮),预言全部兑现,仅存历史里程碑价值。
|
||||
> - 现行权威:docs/README.md 索引 + runbook §7(web/前端现役面)。
|
||||
> - 处置:已移入 docs/archive/;原文全文见 git 历史(归档 commit 前一版)。
|
||||
|
||||
# Phase 3b:投研 + 回测 Web 控制台(Vue 前端)设计
|
||||
|
||||
> 日期:2026-07-07
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
> **⚠️ 已归档(2026-10-01,audit/20261001_docs_audit/ §2.1 归档波)**
|
||||
>
|
||||
> - 归档原因:一次性判定任务文档::66-76 自记 2026-08-02 已推 VPS、tag 已建=使命终结;机制已固化进 ci-cd.yml(check-vps-needed)+ vps-deploy.yml。
|
||||
> - 现行权威:docs/three-env-code-promote.md §12(标签判定+[待推VPS] issue 机制)。
|
||||
> - 处置:已移入 docs/archive/;原文全文见 git 历史(归档 commit 前一版)。
|
||||
|
||||
# VPS 推送判定待办(分布式判定 + 中心汇总)
|
||||
|
||||
> **机制**:各业务 session 认领自己模块的 commit,判定 `[vps]`/`[nas]`/`存疑` + 理由,回传给基建。基建汇总后**统一推一次 VPS**(清技术债 + 建立 `vps-deployed` tag 基线);判定与基建初判不一致的 case by case 讨论。
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
> **⚠️ 已归档(2026-10-01,audit/20261001_docs_audit/ §2.1 归档波)**
|
||||
>
|
||||
> - 归档原因:运维语义已退役:本文描述的 FastAPI bridge(:8765) 通道 09-08 随 miniQMT 整体退役;生产栈=大QMT 桥栈(XtItClient+redis RPC,runbook §1/§3)。代码保留(默认值与代码自洽),本文仅作包内历史说明。
|
||||
> - 现行权威:docs/deployment/vps-production-runbook.md(§1/§3 桥栈)。
|
||||
> - 处置:保留原地(包内 README 不移动);原文全文见 git 历史(归档 commit 前一版)。
|
||||
|
||||
# sanguo QMT bridge (D-1 MVP)
|
||||
|
||||
Windows 端 FastAPI 服务,封装 xtquant,供 sanguo(NAS) 跨网调 miniQMT 下单/查询。
|
||||
|
||||
Reference in New Issue
Block a user