155 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 d43ddd851d feat(api): 分解器输出 schema 四字段——description 必填清洗,缺失走反馈循环 [vps] 2026-10-09 19:54:41 +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 acc273bbc6 fix(api): LLM client 全流式化——读超时从总时长赌注变块间隔看门狗 [vps]
CI/CD / test (push) Successful in 42s
CI/CD / nas-deploy (push) Successful in 28s
CI/CD / nas-verify (push) Successful in 9s
复用 QuantaAlpha 实现(llm/client.py:847,863-873,chat_stream默认True):
非流式下"调大超时"是赌生成时长,生产分解实测 3 连 60s 读超时=502
(238.6s 那次成功属侥幸挤窗)。client._send 两协议全走 SSE 流式累积:
openai=delta.content 逐块+末块 usage;anthropic=text_delta 累积(跳
thinking_delta)+message_start/delta 两段 usage 归一;SSE 中途 error
事件=传输级失败进既有重试环。60s 超时从此语义正确(块间隔看门狗),
不再调参。probe 短探测保持非流式。QA 的 finish_reason=length 自动
续写(client.py:621-639)留档待截断实发再上。
venv310 实测 86 绿(client 流式 5 新测含多块累积/SSE 中途错误重试/
无 usage 块返 None)+漏斗 23 绿;档随码走=总设计 §13 P5.1 补流式节。
2026-10-09 09:23:46 +08:00
claude_dev 85d14a1e56 fix(api): LLM client 补 anthropic 协议+glm_cn 改指 coding plan 接入点——修生产「AI 生成草稿」429 1113 [vps]
CI/CD / test (push) Successful in 41s
CI/CD / nas-deploy (push) Successful in 31s
CI/CD / nas-verify (push) Successful in 8s
根因(VPS 实测): glm_cn 默认 base_url=paas/v4 是按量计费端点,coding plan
的 key 打它=HTTP 429 code 1113 余额不足;同一 key 在 coding plan 接入点
/api/anthropic/v1/messages 实测 200(glm-5.2 与 glm-5.3-flash 均通)。
修复: ProviderSpec 增 protocol 字段(openai|anthropic,env SANGUO_LLM_PROTOCOL
可覆盖), glm_cn 改指 anthropic 端点; client/probe 共用 chat_endpoint() 按协议
选 URL+鉴权头; anthropic 差异面=system 提顶层/无 response_format/content 块
只取 text(glm-5.x thinking 块跳过)/usage input→prompt 归一(漏斗计量不漂移)。
草稿/分解/测试连接/漏斗 lane 四消费方同 client 一处修复全生效。
venv310 实测 82 绿(含 anthropic 协议 8 新测); 档随码走=总设计 §13 P5.1 补
端点勘误节。
2026-10-08 23:07:20 +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 472559380e fix(llm): 收编波五件——L4/L5 累积降级链+配平起点避字符串内左括号+响应体单次解析连接复用+400 自愈不占重试预算+usage 上游未给 None 化 (审计 P3-1..5 收编) [vps] [no-doc] 2026-10-05 22:26:17 +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 bda62d64db fix(llm): Retry-After 真实现+L5 清洗字符串感知——_post 带回 headers 429 解析秒数(非数字回落固定退避,测试改不重合值钉真等待)+尾逗号清洗改字符串感知状态机(字符串内 ", }" 原值保全,宁 502 不静默损坏) (审计 P2-1/P2-2) [vps] [no-doc] 2026-10-05 12:48:31 +08:00
claude_dev e6bf20f007 docs(llm): config_store 只读文件系统防御注记——resolve_effective_config docstring 记 funnel 实例(_connect 对不存在路径 makedirs+建表,只读容器炸;调用方 db 存在才走三层否则 env 兜底),API 进程可写无此约束 (infra 回流坑,零行为变化) [vps] [no-doc]
CI/CD / test (push) Successful in 56s
CI/CD / nas-deploy (push) Has been cancelled
CI/CD / nas-verify (push) Has been cancelled
2026-10-05 12:39:54 +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 829baa1133 fix(api): probe except 放宽(审计小修波)——畸形 base_url 曾 500 击穿「任何失败都不 raise」;本机 httpx InvalidURL 为 Exception 直系非 HTTPError 子类,须 (HTTPError, InvalidURL) 显式并捕;补畸形 URL 不抛测试;settings 测试删未用 import os+delenv 补 SANGUO_LLM_TIMEOUT 防宿主泄漏 [vps] [no-doc] 2026-10-05 09:39:34 +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 d22feae2a8 fix(llm): get_masked_config 畸形 env timeout 降级默认——视图字典 float() 二次解析曾裸抛 ValueError 击穿 resolved=False 语义(GET 变 500);降级 60.0 与 resolve_config 默认一致+测试钉死 [vps] [no-doc] 2026-10-05 09:23:01 +08:00
claude_dev 63fdf27d78 feat(llm): 配置三层解析+config_store 双表——resolve_config 增 overrides 层(DB>env>默认,overrides=None 零行为变化),pipeline.db 新 llm_config/audit 表;api_key 打码出库/掩码串不回写/审计只存打码形 (spec §13 P5.1) [vps] [no-doc] 2026-10-05 09:18:02 +08:00
claude_dev 2731e26737 fix(llm): P2-3 双防御——robust_json_parse 入口 isinstance(text,str) 统一 JSONParseError(非 str 曾 TypeError 裸逃逸穿透 502 契约变原生 500)+client 空回复 content:null 降级走 strict 重试一次(两轮仍空才 LLMError);null content 双调用+非 str 五形态测试 [vps] [no-doc]
CI/CD / test (push) Successful in 52s
CI/CD / nas-deploy (push) Has been cancelled
CI/CD / nas-verify (push) Has been cancelled
2026-10-05 09:13:14 +08:00
claude_dev d55c9cd9aa fix(pipeline): load_domains fail-soft 补形状防御——合法 YAML 但顶层非 dict 或 domains 非 dict 曾 AttributeError 500 穿透(只挡语法错;审计 P2-4);顶层 list/domains list 双降级测试 [vps] [no-doc] 2026-10-05 09:10:34 +08:00
claude_dev eb9bce6dbe fix(pipeline): 分解反馈循环批内防换皮——dup_violations 对照集随本批 passed 的 expression 增量并入(曾只收名字,同构换皮异名候选双双过门一次成型,首批污染已落 registry;审计 P2-7);同批孪生表达式 dup_exact 拒绝测试 [vps] [no-doc] 2026-10-05 09:09:56 +08:00
claude_dev 7b489d1606 feat(api): LLMClient.chat_json 加 want_usage 可选参返 (obj,usage)——漏斗 token 计量数据源, 默认调用零变化 [vps] [no-doc] 2026-10-02 09:51:29 +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 13f3124a4b feat(pipeline): 分解器反馈循环(C3)——白名单同源 prompt+只重生成失败者+max_rounds=3 上限(上游 while True 缺陷必修) #84 [vps] [no-doc]
接缝最小修复(brief 实现样本缺陷):重生成者原样复述已通过因子(同名同表达式)视为同一因子跨轮保有跳过,不误判 name_taken;同名异表达式仍走 check_candidate 判 name_taken。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-02 08:26:40 +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 1c5f1ab53e feat(pipeline): 卡片五字段校验+向导 prompt——白名单与 data_gap_check 同源 manifest,normalize 双点复用(draft/保存同验),C5 可证伪措辞双锚 [vps] [no-doc] 2026-10-01 23:38:13 +08:00
claude_dev 9aa104ba9f feat(llm): httpx 薄 client——传输重试(429 Retry-After/5xx 退避/401 立断)+参数自愈(400 摘参数)+strict 重试,MockTransport 全覆盖 [vps] [no-doc] 2026-10-01 23:30:45 +08:00
claude_dev 46d76e75b7 feat(llm): robust_json_parse 五级兜底——QA 范式+tickflow 尾部修复,纯函数 [vps] [no-doc] 2026-10-01 23:26:09 +08:00
claude_dev 5fd2d8445a feat(llm): provider 表+env 解析——P4-1 C6 选型(TA ProviderSpec 范式,glm_cn 默认 glm-5.3-flash,env 可配,缺配置中文报错) [vps] [no-doc] 2026-10-01 23:23:14 +08:00
claude_dev 2e30bb67ad fix(api): routes_strategy全端点挂鉴权+文件名白名单——架构审计P0-2用户拍板限修: router级verify_token(原MVP裸奔=写.py+动态import执行面绑0.0.0.0公网直达); validate_py_name白名单^[A-Za-z0-9_-]+.py$堵os.path.join穿越/绝对路径逃逸(read/write/code-versions三口); 顺手收敛routes_portfolio/live两份分叉鉴权副本→routes.py正主(副本缺Bearer前缀时split越界500); 测试=无token 401+坏token 401+白名单parametrize+连坐两文件补帽 [vps] [no-doc]
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-01 09:51:39 +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