Commit Graph

41 Commits

Author SHA1 Message Date
claude_dev d374e03bb2 feat(api): 弹药速览读最新——icStats/icFullT数据源改根层∪daily/子目录取as_of新者(根层10-04旧schema无factor_stats不再挡住daily真值),判定层三端点仍只读根层一行不动;前端末次月度批标签改末次评估批(2026-10-11双层分工补丁B1,设计见4b4fc16) [vps] [no-doc] 2026-10-11 09:44:51 +08:00
claude_dev 580e832a4f fix(api): 决议O终审修复波——判卡/判因子与decompose worker并发窗口闭合(两端点load→save持_DECOMPOSE_LOCK+在飞判死409,C2)+判卡半态诚实化(append_event/卡片库失败留痕card_verdict_half_state附记+终态竞态422,I1)+reason 500上限(NOTE2) [vps] 2026-10-10 23:07:13 +08:00
claude_dev 957c89d5c0 feat(api): 决议O③④hypotheses端点factors[]透传cause(死因子行tooltip数据源)+decompose终态卡前置422(墓园不可分解,重推=开新卡;原409通用态细化) [vps] 2026-10-10 22:35:13 +08:00
claude_dev 2faafe89d8 feat(api): 决议O②人工判卡片死端点——POST hypotheses/{id}/verdict 活因子陪葬(cause=死因+随卡判死;内存全转后落盘=原子;promoted 卡422挂账;0因子卡纯想法毙掉) [vps] 2026-10-10 22:29:59 +08:00
claude_dev c9b448a494 feat(factor): 决议O①卡片死亡回写聚合化——全死才埋(反查卡下全部因子,部分死=卡留活跃池只影响展示;death_reason=全灭:触发因子x入墓园:死因;修D5任一死埋整卡在一卡多因子语境错位) [vps] 2026-10-10 22:24:59 +08:00
claude_dev 5e0f2ae373 feat(pipeline): D1 地铁图融总览落地——GET /pipeline/stations 七站聚合+SubwayBar 站点条+Home 改版(用户指认 v4 稿完整形态)
新端点 stations:七站计数(假设池=活跃卡+琥珀 pending/因子工厂非graveyard/
晋级评审 assessable+t≥2 同门/合成层固定2/策略出生诚实0/孵化梯+实盘 stage
计数)+HEALTH 五格(衰减告警/集体水位/数据缺口/数据链路/as_of)+edges 六条
迁移边(D4 数据先备,渲染二期);前端 SubwayBar(dot 灯/badge/琥珀+N/who
hover/点站跳转)+Home 流水线全景卡+等你决策卡(tag 徽标+灯色)+零待办安静态;
测试=TestStations 两件(隔离须连 ensure_runtime_registry 自举 mock,种子
merge 会向 tmp 空档灌真条目)+Home spec 三件 [vps]
2026-10-10 20:31:45 +08:00
claude_dev e109c06b0f feat(composite): 三路对拍前端可见性——合成层页第二卡(三路对比表+规则判读+特征贡献+冗余chips+空态)+GET challenge 端点(最新件/坏件skip);修 challenger CLI 断链(__main__ guard 缺失=python -m 静默空跑,11-01 stage6 必空,部署验证现场抓获);spec §4.4 落账含 QA 无合成 UI 核实 [vps]
CI/CD / test (push) Failing after 5s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
2026-10-10 18:57:25 +08:00
claude_dev 28e648b4fe fix(api): codex review 修批——factors 列表 icFullT 从月报 factor_stats.tAll 接真(单次读取)+decompose similarity 仅建条落盘(已存在幂等重注册不重写) [vps] 2026-10-10 11:14:15 +08:00
claude_dev f45e14234e feat(api): decompose 注册时防换皮比对存 similarity 提示(非硬拒,judgement 人做)+detail/列表带出 [vps] 2026-10-10 10:32:04 +08:00
claude_dev 73ba705bca feat(api): 因子详情端点透传 icStats 全期弹药(无报告如实 None)+monthly_dir env 覆盖 [vps] 2026-10-10 10:20:45 +08:00
claude_dev 2490034b3d feat(pipeline): 因子墓园可见性——factors/graveyard 端点+假设池墓园 tab 判死因子区(用户验收暴露:判死后无任何视图;老编号因子无卡回写也兜底) [vps]
CI/CD / test (push) Successful in 46s
CI/CD / nas-deploy (push) Successful in 57s
CI/CD / nas-verify (push) Successful in 8s
2026-10-09 22:39:37 +08:00
claude_dev 9475836c38 fix(api+frontend): codex review 六件——死因空白strip/终态422防500/落盘回读断言/validator精确断言/promoted确认路径/文案不越权承诺 [vps]
CI/CD / test (push) Successful in 41s
CI/CD / nas-deploy (push) Failing after 14s
CI/CD / nas-verify (push) Has been skipped
2026-10-09 20:21:23 +08:00
claude_dev 2b9186b6d6 feat(api): 因子出生链落 description——注册块/factors/detail 三处带出,registered 回传 [vps] 2026-10-09 19:55:56 +08:00
claude_dev 7f512f1461 feat(frontend+api): 因子清单加批次分割线——台账反查出生批次分组显示 [vps]
CI/CD / test (push) Successful in 45s
CI/CD / nas-deploy (push) Successful in 31s
CI/CD / nas-verify (push) Successful in 9s
用户复验追加小需求:21 条因子平铺看不出批次归属。

- 后端:hypotheses_list 每条 factor 附 batch(台账 registered
  name→job 映射,新→旧先见者胜;查不到=null 归「早期」);
  清单排序改按批次新→旧,无批次垫底
- 前端:批次切换处插虚线行「── 第 MM-DD HH:MM 批 · job-… ──」,
  无批次段前插「── 早期(无批次记录) ──」

测试:factors[0].batch.jobId 断言;后端 28 绿+前端 76 绿+构建过
2026-10-09 13:01:22 +08:00
claude_dev c04bd8dd0c feat(api+frontend): D7 验收反馈——因子详情页(出生档案)+来源列布局+进度首轮报轮次 [vps]
CI/CD / test (push) Successful in 47s
CI/CD / nas-deploy (push) Successful in 28s
CI/CD / nas-verify (push) Successful in 7s
用户 VPS 实测四条反馈(877723a 首班):

① 因子详情页:卡片因子点名/工厂行点击原都只切工厂页或无反应
  - GET /pipeline/factors/{name}/detail:registry 条目(origin/
    hypothesis/首版 expression/source/justification/effective_from)
    +出生批次=decompose_jobs 台账中 registered 含该名的最新 job
  - 前端 FactorDetail.vue(/pipeline/factors/:name):出生档案卡
    (来源假设回链/出生方式/批次回链/表达式/承载逻辑)+近窗 t+IC 趋势

② 总览无变化=数据驱动确认,非缺陷(唯一卡已 building;落新卡即现
   琥珀项;地铁图属 D1-D6 后续批次)——spec 记录,无代码

③ 工厂来源列:width 130→min-width 200,徽标与回链竖排(挤行修复)

④ 轮次进度起跑即报「第 1/3 轮 · 生成候选中(≤8 条)…」——
   初代 LLM 生成期不带轮次字样,像没进循环(用户质询点出)

测试:detail 端点+出生档案断言(decomposer birth/manual null/404)
+FactorDetail.spec 两件;前端 76 绿+构建过+后端 1707 绿
2026-10-09 12:44:57 +08:00
claude_dev 877723ab4a feat(api+frontend): D7 落成边亮灯——假设→因子边可见性三处 [vps]
CI/CD / test (push) Successful in 40s
CI/CD / nas-deploy (push) Successful in 30s
CI/CD / nas-verify (push) Successful in 9s
体验稿(8823)逐条过审拍板后动工,不造新机器只做可见性:

件① 三件套(spec §7):
- 1a 卡片已产因子清单:列表项内联 factors(registry hypothesis
  血统反查:名/表达式/origin/落成日);单因子名 factorId 前端退役
- 1b 分解批次历史:GET /pipeline/hypotheses/{id}/decompose-jobs
  台账新→旧(QA tasks/list 端点形状照抄),卡片折叠区按需拉取
- 1c 轮次进度:run_decompose 每轮 on_progress 回调→内存 job
  progress(currentRound/totalRounds/passed/regen;真轮数非 QA 摆设),
  台账仍只记起跑+终态;worker 协议改收 job_id

件② 工厂来源列:factors 端点带 origin/hypothesis 血统,
⚡decomposer/✍manual 徽标+回链假设池

件③ 琥珀待办:todos 聚合加 queued/data_check 卡(已确认未分解),
分解转 building 即消行——人工卡点②显性化

件④ 结果持久落卡:前端一次性弹层退役,终态摘要+清单+批次全在卡

测试:后端 TestD7Visibility 六件(历史端点/内联清单/进度中飞可见/
终态不带过程态/琥珀消行/工厂血统)+前端三件套三测;8 目录 2780 绿
2026-10-09 11:51:00 +08:00
claude_dev 168520014d feat(api+frontend): 分解 job 化——POST 立返+后台任务+卡片轮询,治响应孤儿化 [vps]
CI/CD / test (push) Successful in 38s
CI/CD / nas-deploy (push) Successful in 29s
CI/CD / nas-verify (push) Successful in 8s
10-09 终局诊断:分解服务端已成功(registry 落册)而浏览器先超时断开,
uvicorn 对断连请求不写访问日志——当日全部「静默卡死/按钮复活无提示」
同源。分钟级 LLM 任务架在同步 HTTP 上是架构错配,前端 300s+模块级
在飞登记两缓解随本刀退役(7ae6edd/3de3cb0 完成 mission)。

移植 QuantaAlpha frontend-v2/backend/app.py 任务字典范式:
- POST /pipeline/hypotheses/{id}/decompose → 202 立返 job;前置校验
  同步 fail-fast(404/状态 409/LLM 未配 503);同卡在飞 409 互斥
  (治重复点击堆积 21 条)
- sanguo_api/decompose_jobs.py:内存 job 字典(在飞真相,QA tasks 同款)
  + asyncio.create_task 后台跑原 worker(_DECOMPOSE_LOCK/P2-5 竞态
  守卫语义不变);LLM 失败固定文案不泄露上游体(P3-8)
- pipeline_store.decompose_jobs 表:跨重启 run 台账(QA 没有,我们补
  ——run 台账先于页面);台账 running 无主=重启打断,读侧判 failed 回写
- GET /pipeline/hypotheses 卡片项附 decomposeJob(内存→台账→僵尸判死)
- 前端:4s 轮询 getHypotheses 单一到终态;挂载即续接服务端在飞任务
  (切页/刷新不丢);卡片新增「分解」摘要行(上次通过/失败持久可见)
- 测试:TestDecompose 全类改 job 契约(fixture with TestClient 保活
  后台任务)+新增 TestDecomposeJobs(202 立返/在飞 409/台账跨重启/
  僵尸 running 判死);api+portfolio+factor 1700 绿
- spec:总设计 §13 P5.3 追加 job 化决议;UX 重设计 §7 件④地基已落
2026-10-09 10:08:36 +08:00
claude_dev 118c9dfa57 feat(pipeline): todos 补「因子晋级评审候选」源——触点②另一半上板(assessable 且近窗 t≥REVIEW_T_GATE=2,与评审页下拉同门);待办板「N 件等你决策」与评审页待办同口径,修三矛盾②(评审页等五问/待办却 0 件) [vps] [no-doc] 2026-10-08 10:15:50 +08:00
claude_dev b7cc8fba90 fix(pipeline): todos 数据缺口告警识别 manifest_missing 标记件——旧循环 join(True) TypeError 被 except 吞=最需告警场景零输出,标记键单列转 warn 告警项,正常缺口形状循环不变 (审计 #91③) [vps] [no-doc] 2026-10-07 13:29:05 +08:00
claude_dev 45de5e5dff fix(pipeline): 控制台判死接死亡回写——factor_verdict graveyard 分支调 writeback_card_death(复用 T4 降级留痕:失败 stderr+death_writeback_missed 附记不阻断;pipeline_db 与 CLI 同源 env)——D5 回写不再只活在 CLI (审计 #91②) [vps] [no-doc] 2026-10-07 13:22:05 +08:00
claude_dev 97c0cd95f5 feat(factor): 条目级 origin 写入方落地——upsert_factor 增 origin 参(合法 decomposer/manual,建条即落/幂等不覆盖/非法值拒)+decompose 透传 origin=decomposer,P3-11 条目级分支转正,人工改判退出=yaml 手改 origin:manual (审计 #91①;因子档 §4.2 两行+§7.7) [vps] 2026-10-07 11:37:45 +08:00
claude_dev 9d3888496b fix(pipeline): 收编波三件——卡 id 加随机段防同秒碰撞+save source 白名单+长度上限+502 detail 固定文案不再透传上游响应体 (审计 P3-6/7/8 收编) [vps] [no-doc]
CI/CD / test (push) Successful in 48s
CI/CD / nas-deploy (push) Has been cancelled
CI/CD / nas-verify (push) Has been cancelled
2026-10-05 22:28:55 +08:00
claude_dev a13ce79b93 fix(pipeline): 假设状态机条件 UPDATE+decompose 按卡互斥——update_hypothesis_state 带 allowed_from 守卫(单条条件 UPDATE+rowcount 二次分因,graveyard 终态竞态不可迁出)+decompose 全程 _DECOMPOSE_LOCK(仿 _GRADUATE_LOCK,跨存储两步写丢更新窗口闭合) (审计 P2-5/P2-6) [vps] [no-doc] 2026-10-05 15:45:51 +08:00
claude_dev d3da56384d feat(api): 设置页两只读探针端点——env-status 五项 configured 布尔(口令类 env-only 前置可见,治毕业 503 暗坑)+monthly-status 解析 factor_monthly_cron.log 最后一段各段 rc(候选两位路径,只展示不触发) (spec §13 P5.2/P5.6) [vps] [no-doc] 2026-10-05 09:43:23 +08:00
claude_dev 23fd165a99 feat(api): LLM 配置三端点+测试连接探针+draft/decompose 切三层解析——GET 打码视图带逐字段来源/PUT 掩码串跳过空串清键/POST test 单发探测(超时钳 10s 无重试);corpus_funnel 仍两层 env(data 域另提醒) (spec §13 P5.1) [vps] [no-doc] 2026-10-05 09:31:40 +08:00
claude_dev f740999848 fix(factor): P4-2 终审修复波 I-1/I-2+M-1/M-2/M-3——building 二次分解纯增量注册+护栏 arity 表/容器拦截/零数据列+回写终态可辨+prompt 在库名单+max_tokens 提额 #84 [vps] [no-doc]
- I-1 routes_pipeline: decompose 端点 building 态卡片二次分解不再走
  update_hypothesis_state(D3 矩阵无自迁移边 raise ValueError→500 半成功);
  building 态=纯增量注册语义,注册照常落 yaml
- I-2 factor_guard: _OPERATOR_ARITY 35 算子必需位置参数表(逐个对 vnpy
  ts/cs/math/ta_function+cs_neutralize 实现核实)→缺参/多参 bad_arity 拦截;
  Tuple/List/Set 入 _BLOCKED_NODES;表达式零非函数位 Name→no_data_column
- M-1 version_registry: writeback_card_death 卡片已终态(ValueError)单独
  stderr 注记可辨,与真失败分流
- M-2 hypothesis_decompose: build_decompose_messages 加 existing_names
  关键字参,system 模板注入已占用名字清单(截 120 防爆 prompt),初代+
  feedback 轮均带
- M-3: 两处 chat_json max_tokens 2000→4000(8 因子候选+justification 截断)
- 测试: guard 缺参/多参/元组/纯常量/合法不误拦 3 案+building 二次分解
  200 双因子在库+在库名单渲染(初代+feedback 轮)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-02 09:19:12 +08:00
claude_dev 4296b4f019 feat(pipeline): decompose 端点——卡片→候选因子一次成型,通过者挂血统进 registry(incubating+origin=decomposer),卡片转 building;四层错误分层随 draft 先例 #84 [vps] [no-doc]
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-02 08:33:48 +08:00
claude_dev 1e3579b64e fix(llm): 终审 I-1/I-2+M-1/2/3/5——传输异常纳入重试链出口 LLMError(502 契约)/sleep 改 asyncio.sleep(事件循环不冻结)/save sentence 上限/坏 YAML fail-soft/删死脚手架 [vps] [no-doc] 2026-10-02 00:06:03 +08:00
claude_dev a81e1b6af7 feat(pipeline): 假设卡向导三端点——draft(LLM 草稿不落库,503/502 分层)/save(确认落卡保存再验)/list;router 级鉴权随既有 [vps] [no-doc] 2026-10-01 23:42:38 +08:00
claude_dev aa607d7e82 feat(api): monthly-review/ic-trend 接真——10-01 用户拍板「接真不删页」P1 件 [vps]
CI/CD / test (push) Successful in 46s
CI/CD / nas-deploy (push) Successful in 3s
CI/CD / nas-verify (push) Successful in 7s
审计 10-01 P1-12 三 mock 端点之二接真(读现成月度批评产物,hypotheses 留 P4):
- GET /pipeline/monthly-review: 本机 monthly dir 最新报告 JSON 原文→
  period/runDate/factorsEvaluated/consensusMedianT(collective.median)/
  consensusThreshold(collective.floor);首班 10-04 前 null(前端 PanelCard
  隐藏不造数);crossCheck 仅同 as_of 双 host 报告同 dir 才出双行(单机=空
  列表,不伪造"一致"),maxAbsDiff=同因子 t 差最大值,>0.05(起步默认)判分歧
- GET /pipeline/factors/{name}/ic-trend: 最新报告 monthly_points 月度 t
  序列(t=None 月如实跳过);baseline=晋级 promotion_t×0.5(相对降幅过半
  红线,衰减条件①),未晋级=2.0 绝对地板(条件②);无报告/无点 404
- mock/index.ts: 两端点条目退役(逐端点删条目纪律,composite 先例);
  PIPELINE_MOCK 仅剩 hypotheses(P4);全接真后删机制=在案退出条件
- spec §7 数据行接真进度同步(档随码走)
- 测试 tests/api/test_routes_pipeline_monthly.py 8 例(单机/双机一致/分歧/
  baseline 两态/404 两态)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-01 09:51:27 +08:00
claude_dev 55bcde798b feat(api): 控制台可读化波——合成层族切换器+归因页整页重构(用户令:多策略就绪+人类可读) [vps]
CI/CD / test (push) Successful in 37s
CI/CD / nas-deploy (push) Successful in 7s
CI/CD / nas-verify (push) Successful in 8s
①合成层多族就绪: /pipeline/composite 加 ?family= 选族+families 清单
  (前端下拉切换器)——以策略为锚,新策略钉住新合成层上位时登记新树,
  无策略消费的单代族不进树; 未知族 fail-soft items=[]+清单照常。
  前端: 族下拉+族说明+「新族自动出现」提示+空态+版本角色徽标
  (在位者/挑战者)+TE 未算人话文案; sub 明示「页面上没有也不该有一键
  换因子(决议 A)」。
②归因页整页人类可读重构(用户令: 按策略归因颗粒度讲清楚):
  - ?variant=incumbent|challenger 切在位者/挑战者归因件(challenger=
    生效位 challenger/ 子目录)+attributionMeta(asOf/windowEnd/months)
  - 前端: variant 切换条+口径条(数值含义+数据截至+覆盖月数+更新节律);
    右块分组=「收益结构·风格四桶」(market/size/industry/specific 带
    tooltip 人话解释)与「选股因子贡献·12 源」(组级说明=暴露×因子收益
    =贡献,长期负贡献=降权/退役候选); 合计行(恒等式加总≈同窗组合总
    收益); 空态=「归因批未产出(首次 10-04)非故障」; 左块加偏差含义
    说明+IS 金额行脚注; 条宽 min(…,100)% 防溢出。
- 测试: tests/api 202→208(families/未知族/challenger 子目录/meta/
  variant 422); 前端 pipeline+mock 34 过(分组+合计+空态+variant 重拉+
  族切换/空态); vue-tsc 过; spec §4.7 端点节同步(档随码走)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-27 18:43:21 +08:00
claude_dev fdbbb488dc fix(api): 控制台归因页崩修复+合成层版本树接真——两波同修(用户拍板 factor 域) [vps]
CI/CD / test (push) Failing after 39s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
①归因页契位修复(infra 派单): 020e610 产物 factorContribution=月度长表
  {factor,month,contribution_ret}(1008 条含 market/size/industry/specific
  三桶行)直通撞前端 P0 短表契约 {factorId,contributionPct}——首行
  contributionPct undefined → AttributionResearch.vue toFixed 整页崩
  (双机实锤)。修=_aggregate_monthly_contribution 聚合适配:
  - 口径=近 12 月 Σ contribution_ret×100(滚动年窗;全期 market +65%
    溢出前端横条 3.2×;量级 0.1~6% 恰配)
  - 三桶(market/size/industry/specific)与 12 源同板上板(研判核心结构)
  - 不足 12 月(挑战者件 8 月)退化全窗 Σ;脏行跳过;降序返回
  - 真件端到端验证: 1008 行→16 行与实探量级一致(market+5.85/kup+2.22)
  - 前端补 typeof 兜底 filter(缺字段行滤掉防再整页崩)
②合成层版本树接真(追加派单): /pipeline/composite 真端点+mock 条目退役
  - 两节点: quant12_v2a(L1 档案 resolved 权重=在位者 szneul_reb63 钉住,
    releasedAt=档案 created)/quant12_v1(等权基线=#69 挑战者)
  - 影子对照挂挑战者节点: 读 szneul_eq_reb63 周报 weeks_counted/
    te_annual; 09-28 首跑前无周报→如实 0/4 周+TE null+进行中(不造数);
    满 4 周 TE≤影子阈值达标/超阈
  - 因子侧坏档 fail-soft items=[](宁空勿 500,同归因页纪律)
  - 前端: 标题接 family 真名(告别 fund8 硬编码)/cand+gate 条件改
    shadowCompare(告别 v3 硬编码)/TE null 显示「未算」/类型
    trackingError number|null
  - spec §4.7 端点节+控制台功能表两行同步(档随码走)
- 测试: tests/api +13(attribution 7+composite 6,含 jwt secret 每测试
  现签防全量套件串扰); tests/api 202 全绿+tests/factor 438 全绿
  +前端 vitest 17 过+vue-tsc 过

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-27 17:54:20 +08:00
claude_dev 64ea2dc781 feat(api): 归因端点接真——IS 五行读 latest_is+factorContribution 读 attribution JSON(P3 接线棒,spec §4.7) [vps]
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-26 08:21:54 +08:00
claude_dev fbf5d3f6ed fix(p3-verdict-card): 终审修复——submitRuling catch+ElMessage(P2 M3 范式)+非 dict 守卫+unused imports [vps]
- AttributionResearch.vue submitRuling 补 catch:409/422/网络错误弹 ElMessage.error(含响应 detail,兜底「裁决提交失败」),照 IncubationLadder/PromotionReview 同款写法;finally 保留
- 新增失败路径测试:post 拒绝 {response:{data:{detail:'当月已有裁决'}}} → 弹出该文案、post 恰一次、卡不重拉
- verdict_replay.load_latest_monthly 与 research_card 端点:json.load 后非 dict 跳过(回退更旧文件 / replay_doc=None)
- 清理 test_verdict_replay.py unused import os、test_verdict_records.py unused import json

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-25 11:15:07 +08:00
claude_dev 02c65b17b0 feat(api): 归因日报骨架端点——周报三指标真值+IS 四行占位(Perold 落地差距,spec §4.7) [vps]
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-25 10:50:15 +08:00
claude_dev 9569ead6f5 feat(api): 研判卡端点——research-card 出卡/verdict 裁决留痕(todos 月报发现段抽 helper 复用) [vps]
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-25 10:39:00 +08:00
claude_dev a1f7b34432 fix(portfolio): P2 终审 defer 六修——vs=0.0 误判/graduate 并发锁/口令 compare_digest/gitea base_url env 化/静默 except 加 log/测试 db 隔离+覆盖缺口补测 [vps] [no-doc]
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 23:39:59 +08:00
claude_dev 006352ef4f fix(api): factors 端点 eval 库对齐月度链——app 注入同库路径(弃 data_backup 旧落点) [vps] [no-doc]
CI/CD / test (push) Successful in 28s
CI/CD / nas-deploy (push) Successful in 2m36s
CI/CD / nas-verify (push) Successful in 7s
controller review 修复:_eval_latest_points 原走 eval_store.default_eval_db_path
(=config vnpy_db 同目录 data_backup 旧落点,CLI 时代遗留),而月度链
run_factor_monthly_standalone.sh 写 data/factor_eval.db(现役 24 批)——看板
读到空库。对齐 routes_factor 注入式:set_pipeline_eval_db_path 由 app.create_app
与 set_factor_eval_db_path 同点注入 resolve_eval_db(db_path),缺省仍兜底
default_eval_db_path;新增 test_factors_reads_injected_eval_db(注入库 t=2.7
round-trip,finally 还原兜底)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-24 23:01:18 +08:00
claude_dev 5202d0ca6a fix(api): /pipeline/factors 接真——注册表+eval t 值(缺库如实 null),graveyard 不上板 [vps] [no-doc]
候选下拉/看板半接线修复:此前 PromotionReview 候选来自 mock(d16_peg 等不在真实
注册表),verdict 按钮打真实后端 404「因子未注册」。GET /pipeline/factors 改读
factor 注册表运行副本(env SANGUO_FACTOR_REGISTRY,ensure 自举同 verdict 端点)
+eval_db 最近批 t(monthly_review.pick_eval_run/extract_points 复用;缺库/异常
如实 null,看板不 500);graveyard 不上板(墓园归假设池页);icFullT 暂如实
null(eval_store 每批单窗 t,无全史批数据源,P3 候选)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-24 22:56:16 +08:00
claude_dev 7b6181caba fix(portfolio): P2 终审修正——注册表运行副本落 data/ 首触自举+CLI --stage 断链+周报 NULL/平盘修 [vps] [no-doc]
M1 运行副本自举:promote.sh 每次 push 都 rsync config/,运行期转移(毕业/退回/
延长)写 config/ 会被下次部署静默回滚——新增 ensure_runtime_file/
ensure_runtime_registry(config/ 种子→data/ 运行副本,首触拷贝,已存在幂等不覆盖),
CLI/weekly_report/routes_pipeline 默认全改 data/(strategy_registry/
strategy_events/factor_registry/registry_events 四件,env 名不变);
factor verdict 端点经同款 ensure 自举;graduate 证据模板路径同步。
M2 register --stage 直落初档(此前只在 transition 生效=断链)。
M4 load_actual_daily_returns 剔 NULL total_equity 行(不折算 0 毒化收益链)。
M5 daily_returns 平盘日照记 0.0(剔除会低估 TE)。
T5-①删 set_pipeline_paths 死注入(app.py 同步);T5-②ladder/todos 阈值只取
一次传 gate;T5-③梯子 te/fill/vs 任一 None→周报待算(去 or 0.0 硬凑);
T5-⑤reviewIssue 非整数 422;T5-⑦graduate 尾巴(事件/模板/gitea)失败不 500,
200 带 warning 提示人工补。
测试:种子自举幂等/CLI --stage/NULL 剔行/平盘 0.0/verdict 首触自举端到端;
tests/portfolio 661 绿+tests/factor 396 绿。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 21:57:56 +08:00
claude_dev 7c255f5e6d feat(api): /pipeline 五端点接真——梯子/阈值配置/毕业口令/驾驶舱聚合/因子评审 [vps] [no-doc]
spec §4.5 决议 L 六件之 4+驾驶舱接真:ladder 拼前端形状;gate-config 两级阈值
+审计;graduate=口令+影子 gate 硬闸+分配落档+J1 issue;todos 聚合本机工件;
factor verdict 三按钮;APScheduler 20:45 周报 job(双机各跑各的,B')。
附:pipeline_store.set_threshold 首改审计 old_value 落代码默认(原 None,
Task5 验收测试=配置页审计可读被覆盖前生效值);router 级依赖取
sanguo_api.routes.verify_token(Authorization 头版,与 routes_factor 同款)。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 21:10:05 +08:00