From 9171bd8bd8ba18b8cbd1714439b40fd883127f92 Mon Sep 17 00:00:00 2001 From: zlt Date: Sun, 20 Sep 2026 09:12:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E4=BA=A4=E6=8E=A5=202026-09-?= =?UTF-8?q?20=EF=BC=9A=E6=8D=A2=E5=BC=80=E5=8F=91=E6=9C=BA=E5=89=8D?= =?UTF-8?q?=E7=9A=84=E7=8E=B0=E7=8A=B6=E3=80=81=E5=9B=9B=E4=BB=B6=E8=A6=81?= =?UTF-8?q?=E7=B4=A7=E4=BA=8B=E3=80=81155=20=E5=AE=9E=E5=86=B5=E4=B8=8E?= =?UTF-8?q?=E5=BC=80=E5=B7=A5=E6=AD=A5=E9=AA=A4=EF=BC=9B=E8=A1=A5=E8=AE=B0?= =?UTF-8?q?=20155=20=E6=BA=90=E7=A0=81=E6=8C=82=E8=BD=BD=E7=9A=84=E4=BE=8B?= =?UTF-8?q?=E5=A4=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 交接文档 docs/交接_2026-09-20.md。成文前只读核对 155 与 188,核出四件此前没记录的事: 155 上源码经服务器本地的 docker-compose.override.yml 挂载进容器(make stale 在 155 恒为一致); 工作包乙 f5cc1b8 已随 09-18 的部署提前生效,09-22 早上上游切质地轴时会自动切序,待用户拍板是否先关开关; 系统自决首周自动采纳为零,四只候选都在 09:31 前后因研判不可用交人; 单测的假仓储没替换读数表仓储,155 上每跑一次 make test 往 pms_consensus_stat 写一行假数据。 另把不部署看页面的假后端整理进 docs/dev_preview/(不在代码指纹范围内)。 CLAUDE.md 与 DEVLOG 开头关于「源码打进镜像」的说法补了 155 的例外。只动文档,代码指纹不变。 Co-Authored-By: Claude Fable 5.1 --- CLAUDE.md | 2 + DEVLOG.md | 22 ++ docs/dev_preview/mock_preview.py | 272 ++++++++++++++++++++++++ docs/dev_preview/sample_review.md | 78 +++++++ docs/交接_2026-09-20.md | 337 ++++++++++++++++++++++++++++++ 5 files changed, 711 insertions(+) create mode 100644 docs/dev_preview/mock_preview.py create mode 100644 docs/dev_preview/sample_review.md create mode 100644 docs/交接_2026-09-20.md diff --git a/CLAUDE.md b/CLAUDE.md index bd634e1..af7ed98 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -49,6 +49,8 @@ docker compose run --rm --no-deps pms-web python scripts/test_batch3_units.py **改了 Python 代码必须重建镜像加 force-recreate,绝不能用 `docker compose restart`。** 源码是打进镜像的,`restart` 只是把老容器停了再起,跑的还是旧镜像里的旧代码,而且一点报错都没有。`make deploy` 和 `make up` 走的都是正确路径。这是本项目头号坑,`Makefile` 顶部、`scripts/deploy.sh`、`run_tests.py` 里都反复写了这一条。 +**模拟仓 155 是个例外,要另记(2026-09-20 实测)。** 155 的项目目录里有一个服务器本地文件 `docker-compose.override.yml`,内容同仓库里的 `docker-compose.dev.yml`,它把整个仓库目录绑定挂载到四个容器的 `/app`。这个文件被 `.gitignore` 忽略,仓库里看不到;真实仓 188 没有它。后果有三条。一,在 155 上 `git pull` 之后,页面静态文件立刻就是新的,后端四个进程仍是旧代码,直到重启或 `make deploy`。二,`make test` 与 `make stale` 起的一次性容器读的也是工作树,所以在 155 上「指纹一致」恒成立,查不出「拉了代码没重启」。三,往 155 拉代码等于把页面先上线了,拉之前先看 `git log` 里有没有别的会话提交的、还没到上线日的改动。`make deploy` 在两台机器上都仍是对的做法。 + **下发模式由参数 `PMS_DISPATCH_MODE` 决定,实际以页面顶部横幅为准,不要拿这段文字当现状。** 设置文件的初值是 `shadow`(影子模式:指令照常生成、过规则闸、记账、置为已下发,但不写下游,需人工在 QMT 侧执行,成交由回放任务按先进先出认领回账本)。但模拟仓 155 运行时已切到 `ws`,指令经 `pms-ws` 真向模拟 QMT 发出、自主动作按档位可自动执行,不再需要人工下单。真实仓 188 的 PMS 尚未追平到最新代码,上线等 QMT 侧,追平部署时按真实仓准备包的初始参数清单先进影子期。切换只是 `PMS_DISPATCH_MODE` 与 `PMS_QMT_WS_ENABLED` 两个开关加一次联调,不是再写代码。改动涉及下单链路时,务必先确认自己面对的是哪一套实例、此刻是哪个模式。 **业务参数一律走 ParamStore 读,不要直接读 settings。** `config/settings.py` 里的业务参数(`PMS_TOTAL_SCALE`、各种档位阈值等)只是「初值」。运行时以数据库表 `pms_runtime_param` 的值为准,页面改参数即时生效。取业务参数统一经 `app/services/param_store.py`,直接读 settings 会让页面调参失效。基础设施类配置(连接串、密钥)才从 settings 与 `.env` 读。 diff --git a/DEVLOG.md b/DEVLOG.md index f419623..1f9f403 100644 --- a/DEVLOG.md +++ b/DEVLOG.md @@ -8,6 +8,9 @@ > - **tradingSystem(PMS)** 跑在 `factor@factorevaluation`,源码打进镜像, > 改码必须 `make deploy`,跑完 `make test` 见 ALL SUITES PASS,盯盘 `make watch`。 > 容器时钟是北京时间。 +> **2026-09-20 查实的例外**:155 上有服务器本地文件 `docker-compose.override.yml`,把仓库目录绑定挂载到四个容器的 `/app`, +> 所以在 155 上 `git pull` 后页面静态文件立刻是新的、后端进程仍旧,`make stale` 在 155 上恒为一致、查不出「拉了没重启」。 +> 188 没有这个文件,代码确实在镜像里。`make deploy` 在两台机器上都是对的做法。详见 `docs/交接_2026-09-20.md` 第七节。 > - **bionic_trader(决策系统)** 跑在 `192.168.16.188:38000`,挂载卷, > `git pull` 后 `docker compose restart backend-api worker-brain` 即生效; > **新增 env 必须 `docker compose up -d --force-recreate`**,restart 不重读 env。 @@ -1715,6 +1718,25 @@ app/services/company_report.py(新)、app/web/main.py(新接口)、app/w --- +## 2026-09-20 · 换开发机前的工作交接与 155 实况核对(只写文档,未动代码) + +**做了什么** +用户要换开发机,先把本项目的交接汇总成文并入库:`docs/交接_2026-09-20.md`。成文前只读核对了 155 与 188 的实况,核出四件此前没有记录的事。一,155 上源码是挂载进容器的:项目目录里有服务器本地文件 docker-compose.override.yml(内容同仓库的 docker-compose.dev.yml,被 .gitignore 忽略),把仓库目录绑定挂载到四个容器的 /app;188 没有这个文件。后果是在 155 上 git pull 之后页面静态文件立刻是新的、后端进程仍旧,make test 与 make stale 的一次性容器读的也是工作树,所以 155 上「指纹一致」恒成立、查不出「拉了没重启」。二,09-17 的工作包乙(候选按上游名次排,f5cc1b8,台账 016,另一个会话做的,当时没写节点)已随 09-18 11:52 那次 make deploy 提前生效,开关 PMS_PLAN_RANK_BY_UPSTREAM 读回 True;它靠上游计划的 rank_axis 自门控,选股系统机器仍在 3d3f317,到今天行为未变,09-22 早上上游切质地轴时会自动切到上游序,比方案定的 09-23 收盘后早一天且与上游切轴同一个早上,要用户拍板是否先关开关。三,系统自决上线一周自动采纳为零:四只弱表态候选(09-15 的 300308、09-17 的 688778、09-18 的 002050 与 300073)全部在 09:31 到 09:33 因「研判不可用,降级人工确认」交人,三只被人工采纳、一只过期。四,读数表 pms_consensus_stat 混进单测写的假行:test_wiring 的 install_fakes 没有替换 consensus_stat_repo,用例跑整轮扫描时读数落表走真仓储,开发机无库被软失败吞掉,155 上每跑一次 make test 写一行「600000.SH auto_accept 目标价到价自动清仓」,四行的写入时刻与四次 make test 逐一对上;它撑大了复核第六张表的分母,研判不可用占比被低估(09-15 显示 50% 实为 100%,09-18 显示 66.7% 实为 100%)。另外把历次用来不部署看页面的假后端整理进 docs/dev_preview/(不在代码指纹范围内),CLAUDE.md 与本文件开头关于「源码打进镜像」的说法按实测补了 155 的例外。 + +**动了哪些文件** +docs/交接_2026-09-20.md(新)、docs/dev_preview/mock_preview.py 与 sample_review.md(新)、CLAUDE.md(头号坑一段补 155 挂载的例外)、DEVLOG.md(开头部署方式补一条、本节点)。没有动 app/、scripts/、config/,代码指纹仍是 26510ade120c。 + +**部署方式** +无。文档提交,155 拉代码即可,不需要重启。 + +**真机判收** +真机见过(155 与 188,2026-09-20 09:03 到 09:15 北京时间,全部只读)。155:仓库 cb73f74、指纹一致 26510ade120c、四容器已运行 45 小时、持仓两只(300627.SZ、688778.SH)各挂一条运行中的网格、待确认提议 0;docker inspect 见 /home/factor/project/tradingSystem 绑定挂载到 /app;参数读回 PMS_SELF_DECIDE full、PMS_SELF_DECIDE_TRIAL True、PMS_TECH_INTRADAY_CONFIRM False、PMS_PLAN_RANK_BY_UPSTREAM True、PMS_PLAN_TIERS 强传导、PMS_PLAN_TOP_N 50;最近三份名册快照的 rank_mode 为空(旧代码写的);make consensus-review DAYS=6 六张表读数已摘进交接文档。188:仓库 51bd6dc(落后主干 112 个提交)、只跑 pms-web 与 pms-ws、只挂载了 logs。本机:docs/dev_preview/mock_preview.py 起服务后页面 200、评析样例与假持仓可读。 + +**还欠着什么** +全部写在 docs/交接_2026-09-20.md 第二节与第五节。最要紧四件:旧开发机上选股系统 9acd3fa 与决策系统六个副本提交未推送(09-21 收盘后选股系统机器要拉代码);PMS_PLAN_RANK_BY_UPSTREAM 要不要在 09-22 07:10 前先关;研判在 09:31 前后不可用的根因待查;单测污染读数表待修、四行假数据待清(删库行先经用户同意)。 + +--- +