方案副本同步

This commit is contained in:
baobao 2026-10-15 10:27:12 +08:00
parent 65d2940957
commit eee509e91b
2 changed files with 241 additions and 0 deletions

View File

@ -0,0 +1,92 @@
# 每日选股计划完善交接
2026-10-15,北京时间。状态先行:三仓四批本地代码已实现,离线回归与两端假数据页面验收通过;
尚未提交、推送或部署。生产版本、运行参数、实例身份、时延和五日观察均为本轮未核查。
正式契约与实现原理见同目录《每日选股计划完善方案与开发规格_2026-10-15.md》。
## 用户已决定的范围
允许 astock-kg、akg-factor-bridge、tradingSystem 联动。保留准入门槛及真实运行参数;
盘中评析变化发布完整修订;采纳前核验,只有排名变化不撤销。基座只提供研究,桥负责版本与计划,
PMS 负责组合和执行。择时能力不扩展,bionic_trader 只同步文档。不得默认修改生产开关或执行容器操作。
## 工作区与原有修改
| 仓库 | 本轮开始的本地基线 | 本轮范围 |
| --- | --- | --- |
| astock-kg | codex/review-asof-export-20261012,a6d8c7c | 报告对象归档、固定引用接口、计划代理和今日页、离线测试、规格与交接入口 |
| akg-factor-bridge | main,ca46a95 | 确定排序、输入录制与重放、不可变版本、修订任务、只读查询缓存、复盘及契约测试 |
| tradingSystem | main,afec4f7 | 消费记录、顺序与核验、命令和指令来源、研究页面、回归及台账 |
| bionic_trader | main,ec533d9 | 仅方案和交接同名副本 |
PMS 初始已有 docs/复盘决定台账.md 未提交修改,以及方案讨论稿、probe_both_offline.py、probe_crash_live.py 三个未跟踪文件。
本轮仅在该台账末尾追加 018,不覆盖原内容。bionic 已见 .DS_Store、.claude/.DS_Store 修改和第三方接入指引未跟踪文件,均未触碰。
没有创建提交,因此以上短哈希不能当作本轮部署版本。后续提交须逐文件选取,勿把其他会话文件带入。
## 四批实际交付
1. 排序:桥证据次级键与股票代码稳定收尾;无主题不限额桶;PMS 消费顺序进入自主扫描,信号插队留原因;命令保持原分配规则。
2. 版本:桥新增 plan_inputs.py、plan_versions.py、plan_refresh.py、plan_health.py,来源与配置冻结、文件锁、原子入口、固定晨版、父链、失败待核验、版本缓存。旧实时覆盖入口已删除,历史不现算。
3. PMS:新增 plan_revision.py、plan_recheck.py;received/consumed/rechecked 三类 JSON 记录;计划到提议及执行的来源关联;人工确认版本令牌及状态/原内容条件更新;停止按行数清理。PMS_PLAN_VERSION_RECHECK 默认 False,尚未启用。
4. 研究:基座 archive.py 按内容归档并提供 ref 查询;桥完整透传已有研究字段,保存变更;基座今日页和 PMS 候选/提议/持仓页显示材料时间、报告时间、论点与未知项;固定报告不可用时明确缺失。
新增任务五处登记已写入规格书:发布存储、XXL 独立步骤、run.py 手工入口、plan_health 日检、桥台账 064/PMS 台账 018 与本交接。
实际 XXL 平台任务没有创建;requirements 新增 chinesecalendar>=1.11,部署镜像须包含它。
## 预判与离线实测
所有命令均在本地执行;PMS 及桥测试在空临时工作目录、清理业务环境变量并禁止所有网络连接的护栏内运行。
本地 Python 使用已存在的测试运行时,不安装生产依赖、不连接任何库或模型。
| 预判 | 实测证据 |
| --- | --- |
| 基座引用确定、内容或材料变化产生新引用;代理保持指定版本及研究字段 | 全套 190 项 unittest,OK,退出码 0;含 6 项新增归档/代理用例 |
| 好转差同步改变判决、质地带和排序,晨版不变;查询不读取新评析 | 桥 test_daily_plan_contracts 32 个用例/断言组,OK,退出码 0,含真实 collect 的合成来源修订测试 |
| 重复发布幂等、并发只有一版、断电后保留完整旧版、孤立文件不可查、晨版指针可恢复 | 同桥版本回归;健康检查能发现超过十二分钟无检查及入口损坏 |
| 历史不得回源、当前参数不改旧消费、无主题和同证据强度确定 | 桥历史/缓存/排序断言组通过;缺档明确排除 |
| 单一名额优先给消费顺序靠前者;信号优先有原因 | PMS 全套隔离入口 ALL SUITES PASS;包含新第 38 批 15 项 OK |
| 仅排名变化保留,材料变化重评数量,旧确认拒绝,状态条件更新防重复采纳 | 第 38 批覆盖资格失效、版本不可用、缩量 300→100、旧令牌、SQLite 两线程竞争仅一次成功 |
| 120 交易日与引用保留不能被行数清理破坏 | 清理函数已变为不删除;15 项中有不允许触发 DELETE 的回归;真实留存天数未判收 |
| 页面可读、未知不伪造、旧确认返回后要求重新确认 | 三个 PMS 页面守卫退出码 0;基座 JSX 构建成功;本地浏览器显示中文研究字段及再次确认提示,两端无 JS error |
PMS 最终全套回归已包含第 38 批 15 项;另覆盖名次裁剪复核、历史清理、在途承诺变化和旧研判缓存失效。
页面改动也通过全部三个页面守卫。桥日历的 2026 年日期另以现有 chinesecalendar 1.11.0 离线验证一项,OK。
浏览器服务只监听 127.0.0.1,所有接口为合成数据,任何 POST 都返回过期确认提示;它不能连接或产生真实交易。
```bash
# 本地 · astock-kg 根;实测使用 Codex 附带 Python 运行时
PYTHONDONTWRITEBYTECODE=1 PYTHONPATH=backend /Users/baobao/.cache/codex-runtimes/codex-primary-runtime/dependencies/python/bin/python3 -m unittest discover -s backend/tests -t backend
```
```bash
# 本地 · akg-factor-bridge 根;测试入口复用 PMS 的配置隔离、断网护栏
/Users/baobao/.cache/codex-runtimes/codex-primary-runtime/dependencies/python/bin/python3 ../tradingSystem/scripts/unit_test_guard.py test_daily_plan_contracts.py
```
```bash
# 本地 · tradingSystem 根;既有离线测试虚拟环境
/private/tmp/pms-codex-20261012-venv/bin/python scripts/run_tests.py
/private/tmp/pms-codex-20261012-venv/bin/python scripts/unit_test_guard.py scripts/test_batch38_units.py
/private/tmp/pms-codex-20261012-venv/bin/python scripts/unit_test_guard.py scripts/test_page_copy_guard.py
/private/tmp/pms-codex-20261012-venv/bin/python scripts/unit_test_guard.py scripts/test_page_enum_guard.py
/private/tmp/pms-codex-20261012-venv/bin/python scripts/unit_test_guard.py scripts/test_page_wiring_guard.py
```
本次原始输出位于本机 /private/tmp/base-final.log、bridge-contracts-final.log、pms-final.log、pms38-final.log;
临时目录可被系统清理,不把它当长期验收库。需要复核时用上述离线入口重跑。
页面截图在本机 /private/tmp/daily-plan-ui/,内容均为假数据,不能充作生产读数。
## 尚未完成的生产验收
本轮没有连接任何生产主机,没有读生产参数,没有生产写入或容器操作。需继续的最小动作是:
1. 只读核对真实运行参数、部署 Git 版本、容器和模拟/真实实例身份;明确当前排序轴、档位白名单及仓位参数。
2. 整理仅包含本轮文件的提交,按仓库中文提交约定处理文档副本;容器操作前取得用户同意,避开北京时间 06:10 与 07:10。
3. 先部署兼容读取及留痕,再部署桥发布并核验晨版;最后在模拟实例启用五分钟修订与 PMS_PLAN_VERSION_RECHECK。
4. 按规格每天核对版本一致性、源到发布到消费的时刻、顺序、核验和重复指令。完成五个连续交易日后才宣布模拟判收。
真实时延、平台调度互斥、进程重启恢复、数据量下磁盘容量及全部生产接口形状仍待真机验证。
本地恢复测试不能替代真实机器断电/重启证据;不得以此请求或执行机器重启。
回退保留全部版本及账本,停修订并提供最后有效版本;不恢复历史现算或局部覆盖。
此前财报历史导出的来源修订不完整限制仍有效,本轮没有解除旧实验的研究资格限制或投资验证暂停记录。

View File

@ -0,0 +1,149 @@
# 每日选股计划完善方案与开发规格
2026-10-15,北京时间。用户已批准三仓联动实施。本文是本轮开发、验收和接续入口。
## 目标与边界
统一研究依据、候选排序、建仓优先级和复盘记录。保留候选准入、线上参数和交易职责。
盘中新评析自动发布完整修订版。自主提议采纳前重核,排名变化本身不撤销提议。
基座提供研究,桥形成计划,PMS 管组合与执行。修订不调用模型。
## 实现契约
- 计划保留原字段;schema_version=2,decision 包含 id、parent_id、cutoff_at、input_hash、params_hash、reason。plan_version 仍为代码版本。
- 每行新增 research_rank(全量顺序)、research、review_ref;展示裁剪不能改写 research_rank。
- 采集输入与确定性装配分离。输入、有效配置、全量输出一起归档。相同内容幂等;文件锁串行发布,原子切换最新指针;晨版固定为首版。
- GET /plan 支持 decision_id,只读发布物。历史缺档明确报错,不以当前来源重构。旧快照可读但注明追溯不完整。
- 07:20—15:10 北京时间交易日每五分钟 plan-refresh,只更新评析与区制。晨版缺失不代造。08:45 区制更新同样发布版本。
- 修订失败保留旧完整版本;已识别的变更股票列入 pending_codes,PMS 暂停其新增自主提议。GET 不做重装配。
- 基座报告按内容指纹保存,最新索引保持原结构。report_version_url 固定内容;旧报告不伪造归档引用。
- PMS 保存 received(收到)、consumed(实际筛选消费)、rechecked(采纳核验)三类记录。后两类记录有效参数、实际顺序、逐票过滤原因与上下文指纹。动作账本保留决策及消费引用。
- 自主扫描继承 selection_rank;现有信号优先仍生效且记原因。命令驱动保留原分配规则并记录来源。
- 自主提议转指令前核对版本;资格、风险、仓位依据变化重新走现有评估,旧批准不复用。仅顺序变化可继续。未知当前版本守成。人工页面版本不匹配返回冲突与新提议。
- 研究增加预期差、周期、材料期、材料数、未知问题、数字核验、论点变化和验证事项。自然语言不自动转交易触发器。
- 复盘读取晨版与真实消费记录。缺档与重构不混入真实效果统计。旧收益口径和期限保持。
## 验收预判
1. A 优先于 B 且仅一名额时产出 A;信号插队有明确原因。
2. 好转差时全出口同步,旧版字节不变;相同输入不重复发布。
3. 同强度证据与无主题裁剪确定;全量名次不随展示参数改变。
4. 历史不含未来评析,当前参数不改变历史消费名单。
5. 提议排名变化、资格失效、仓位缩减、版本缺失和并发采纳逐项测试。
6. 发布中断、重复触发、并发区制更新、失败恢复和重启恢复不破坏旧版。
7. 缺新增字段兼容;修订零模型调用;普通查询不重装配。
8. 两端页面守卫与浏览器验证通过。
## 交付与运行边界
四批为确定排序、不可变版本、消费与重核、研究与页面。先兼容读取,再发布,最后开启修订。
本地验证不能代替部署验收。目标时延十二分钟,需上线测量。模拟实例需观察五个交易日。
容器与生产操作另按授权边界执行。避开 06:10 及 07:10 窗口。
版本至少保存一百二十个交易日。被未结束提议或持仓引用的记录继续保留。
本轮初始状态:尚未部署,尚未完成五日观察。验收实测在文末追加。
## 开发人员实现说明
### 第一批:确定性与顺序
桥的 `plan._evidence` 在同强度证据后按目标名、来源数、市场统计与日期稳定排序;卡片最终以代码收尾。
`pick_rows` 与 PMS `select_candidates` 均只对明确主题应用主题限额,无主题不构造共同的行业桶。
有效排序开关仍从原配置读取;PMS 筛选结束写 `selection_rank`,动作引擎按此序逐只扣名额和资金。
既有盘中信号优先在它之前,写 `execution_rank/priority_reason`。命令规划保留原命令、白名单和分配次序,
把来源及最终顺序写入命令 progress,再按 plan_id 传到指令 progress 与执行账本。
### 第二批:固定输入、发布和恢复
`plan_inputs.Bundle` 在来源函数边界录制实际结果和错误,并使用 ContextVar 隔离装配。
输入支持 DataFrame、Series、日期、Decimal、集合及缺失值;归档 JSON 可重放。
重放禁止缺项回源,即使上层捕获异常,退出重放作用域时仍会报错。有效业务配置同步冻结。
晨版评析按带时区 cutoff_at 过滤;它与行情 date 独立,因此可以使用今日盘前已知材料。
`plan_versions` 用进程间文件锁覆盖采集至发布。文件路径为:
- `versions/<行情日>/<decision_id>.json`:完整计划、实际输入和有效配置,只追加。
- `plan_<行情日>.json`:原有兼容入口,完整写入临时文件、fsync 后原子替换。
- `versions/<行情日>/morning.json`:首个成功发布版本;中断缺失时沿已发布父链恢复。
- `versions/<行情日>/health.json`:检查时刻、待核验股票和错误原因。
版本身份包含输入、参数、代码版本、行情日和父版本。同有效输入不重复发布;A→B→A 保留三个实际版本。
最新入口带已发布祖先标识,查询固定版本不需要逐次读取整条历史。未切换成功的孤立文件不能对外查询。
Markdown 兼容文件从已发布 JSON 派生并标明决策版本;写入失败不回滚已发布 JSON,下一次发布可恢复。
普通查询只做固定版本读取和展示裁剪。`PLAN_FROM_SNAPSHOT` 的旧“回落现算”语义废止;
`PLAN_REVIEW_SOURCE=live` 也不再允许用当前研究伪造历史。保留两个配置名称用于旧配置兼容。
`plan-refresh` 是 XXL 白名单里的独立步骤,不加入晨间默认三步。调度平台每五分钟触发,
函数再核验北京时间、交易日和当日晨版。时段为 07:20 至 15:10(含端点);日历依赖 chinesecalendar>=1.11,
本地已验证其 2026 年工作日与国庆休市读数。08:45 `regime-append` 走同一锁和发布入口。
只替换新评析及区制,其余来源使用晨版冻结值;修订不写日频逻辑状态表、不重投评析目标、不调用模型。
读取评析前标记观察范围待核验,来源失败保留该标记;成功后仅对实际变化的票保留,发布完成后清除。
桥缓存键包含决策版本和修订状态。PMS 最新计划缓存不超过五分钟;基座最新计划代理缓存一分钟,
指定版本代理可长缓存。目标预算为检查等待五分钟、消费等待最多五分钟,余下两分钟供装配及传播,
十二分钟是待生产验证的目标,不是本地性能结论。
### 第三批:消费记录与采纳核验
复用 `pms_plan_snapshot.meta_json/roster_json`,消费指纹含决策版本、有效筛选参数、持仓与黑名单上下文、
实际顺序和逐票过滤原因;正常展示预览不记作实际消费。消费留痕失败仍可展示,但不能新增自主提议。
取消按行数删除的所有调用,旧清理函数也改为不删除;当前保留全部记录,满足至少 120 交易日及在用引用保留。
后续若增加容量治理,必须证明交易日水位与引用保护,不能恢复旧 200 行截断。
`PMS_PLAN_VERSION_RECHECK` 为新增发布控制,默认 False。启用后自动采纳和人工采纳 OPEN 均强制刷新计划核验。
仅排名变化保留提议;复核不再应用 top_n 和主题展示限额,但原档位、风险、黑名单等资格检查仍保留。
研究、风险或仓位参数变化时,以当前组合重新走 `_scan_open`、合议、强制重新研判、建议数量及规则闸,
排除原提议自己的在途占用;人工提议更新内容并产生 proposal_revision,原批准不能沿用。
持仓数量、可用资金、行业归属和其他在途承诺变化也会使旧数量依据失效。重新评估时按已有 force_refresh
接口要求决策系统重新回答,遵守其原有强制次数预算;不能复用股票/动作缓存中的旧批准。
数据库用 WAIT_USER 状态与原 hard_numbers_json 的条件更新拒绝并发重复采纳和旧内容确认。
版本不可用、资格失效或重评未通过时保留待确认提议并给出原因,不产生新的自主买入指令。
已落指令仍沿原执行终检和风控,不因研究名次变化自动撤单或卖出。
复盘主表固定首个成功晨版;日频“交付名单”使用当日最后一条真实消费的已记录顺序与参数。
新增 `版本消费对账_<日期>_<口径>.csv` 单列所有晨版、修订、消费及核验记录,关联父版本、原因、
消费参数、过滤项和追溯资格。盘中多版本不当作多个独立交易日加权。缺档和旧名册排除真实效果统计,
记录覆盖率;既有五、十、二十日观察及执行账本口径保留。
### 第四批:研究信息与报告引用
基座沿用 company_review_runs.summary,新增 review_ref、report_version_path;不改表、不改质地合成。
报告 Markdown 与侧车 JSON 的内容指纹决定对象路径,先保存两种对象,再更新最新索引。
`GET /company/{code}/review?ref=<指纹>` 只读固定对象;无 ref 的最新报告入口保留。
桥透传已有预期差、周期、材料期、数量、未知问题、核验信息与报告生成时刻,计划行保存冻结研究摘要和差异。
来源未给出的日期与阈值保持未知;摘要不冒充历史完整报告。
基座今日页先取计划,再按该 decision_id 取判决。PMS 候选、提议和持仓页面展示版本、原因、
论点、反方论点、材料与报告时间、待核验事项;独立持仓研究另带 observation_at/scope,不能冒充计划版本。
完整指纹保留在详情。报告查询只接受合法指纹,并从已知基座地址取得指定版本。
## 五处登记与运行入口
本轮没有新表。新增任务的存储、调度、手工入口、日检和台账分别为 `plan_versions.py`、
`xxl.py` 的 plan-refresh、`run.py plan-refresh`(及 POST /plan/refresh)、`plan_health.py`(及 GET /health),
桥决定台账 064、PMS 决定台账 018 与同名交接文档。
```bash
# 桥机 · 已确认的桥容器内 /app;部署批准之后才执行,date 不传自动取最新已发布日
python run.py plan-refresh
python plan_health.py
```
平台入口仍是 `/api/v1/xxl/daily-build?steps=plan-refresh`,使用既有 X-Job-Key 鉴权;
实际平台任务尚未创建。日检只读文件,0 正常、1 旧版/待修订/修订检查超十二分钟、2 缺档或结构损坏。
时段外不把停止检查误报成故障;窗口内没有今日晨版也会提示。
## 本地验收与分批上线
本轮仅本地代码、离线测试和假数据页面验收,所有生产参数、部署版本、实例身份和生效情况均未核查。
四批本地实现已落工作区,具体命令及实测见 `交接_每日选股计划完善_2026-10-15.md`。
上线顺序:先基座版本报告与 PMS 兼容读取、留痕;再桥新版发布并核验首个晨版;最后配置五分钟修订任务,
核验传播正常后只在已确认的模拟实例开启 PMS_PLAN_VERSION_RECHECK。不能替用户切换原排序开关、
档位白名单、策略阈值或自动扩大仓位。桥 requirements 更新需要纳入镜像;基座后台代码必须四 worker 一起换,
前端必须重建;这些容器操作仍需用户同意。实际机器、容器名及实例前缀部署前按各仓现行运维文档只读确认。
模拟实例连续五个交易日每天记录:晨版与修订版本、输入及配置指纹、评析到达/发布/消费三个时刻、
消费顺序、信号优先原因、待核验股票、重新确认案例、失败恢复及重复指令计数。
目标为同版内容一致、旧版不变、正常传播不超过十二分钟、无并发重复指令。生产故障恢复与真实时延均待判收。
回退优先暂停平台 plan-refresh 并关闭新核验控制,保留版本、报告对象与账本;继续提供最后一份完整计划。
禁止把回退解释为删除历史或恢复查询时局部覆盖评析。