Commit Graph

347 Commits

Author SHA1 Message Date
claude_dev b9d9285246 fix(frontend): paper New.vue 行内 @click if 表达式 rolldown 编译不过(run576 vite build 失败根因)改 setMode 方法 [nas]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 25s
CI/CD / nas-verify (push) Successful in 11s
2026-08-13 18:35:27 +08:00
claude_dev e2d118fa38 fix(frontend): CI vue-tsc -b 三处类型错(live List重复import/paper List initial_capital可空/组合净值series宽类型);本地改用 -b 模式校验对齐CI [nas]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Failing after 12s
CI/CD / nas-verify (push) Has been skipped
2026-08-13 18:33:42 +08:00
claude_dev d030cfc91f feat(paper): 组合策略接入模拟盘实走(E1+E2): paper_accounts加strategy_type列(含迁移); portfolio_paper每晚20:30全量重放→当日成交/末日持仓/净值落paper表(幂等,回测引擎为单一真相源); run_live_step按类型分流; create支持portfolio(仅live); 前端新建模拟盘策略类型选择+组合字段(策略/池/上限/基准) [vps]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Failing after 11s
CI/CD / nas-verify (push) Has been skipped
2026-08-13 18:32:09 +08:00
claude_dev 3e7d40ad5f fix(frontend): Code.vue StrategyFile 接口补 type 字段(CI vue-tsc -b 报 TS2339,run570-572 build 失败根因) [nas]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Failing after 11s
CI/CD / nas-verify (push) Has been skipped
2026-08-13 18:28:19 +08:00
claude_dev ccf958c5d6 feat(paper/live): 生命周期管理补全: paper停止/恢复(实走20:30 step跳过stopped)/删除(连带净值成交持仓挂单)/编辑(名称标的资金); live删除(运行中拒绝)/编辑(stopped才可改); 前端列表+结果页按钮/编辑弹窗/删除确认 [vps]
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Failing after 11s
CI/CD / nas-verify (push) Has been skipped
2026-08-13 18:27:32 +08:00
claude_dev d8c156e6de feat(strategy): 策略库灌入vnpy内置8策略模板(DoubleMa/AtrRsi/BollChannel/DualThrust/KingKeltner/MultiSignal/MultiTimeframe/TurtleSignal); registry自研目录优先加载(编辑副本即刻生效,pip兜底); 分类器识别vnpy_ctastrategy import风格 [vps]
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Failing after 12s
CI/CD / nas-verify (push) Has been skipped
2026-08-13 18:24:40 +08:00
claude_dev 08aec403f7 feat(portfolio): 组合回测结果增强: 基准对比曲线(对齐交易日+归一化)+回撤序列+扩展指标(波动/Sortino/Calmar/超额/Alpha/Beta), worker与API透传, 结果页净值对比+回撤图 [vps]
CI/CD / test (push) Successful in 15s
CI/CD / nas-deploy (push) Failing after 13s
CI/CD / nas-verify (push) Has been skipped
2026-08-13 18:22:10 +08:00
claude_dev c41fd862ea feat(frontend): 验收UX批A: CTA回测提交统一跳任务中心; 代码编辑「运行回测」直接发起(默认参数+最近1年,CTA/组合分流); 模拟盘策略改下拉; 状态徽标实走文案+去排队兜底 [nas]
CI/CD / test (push) Successful in 12s
CI/CD / nas-deploy (push) Failing after 11s
CI/CD / nas-verify (push) Has been skipped
2026-08-13 18:17:16 +08:00
claude_dev 976c99de07 fix(history): 创建时间 UTC→北京时间(+8); 标的列加宽(100→130)治折行 [nas]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 25s
CI/CD / nas-verify (push) Successful in 6s
2026-08-13 14:17:23 +08:00
claude_dev 5248062102 feat(history): 任务列表加创建时间(created_at)+类型命名统一菜单(个股回测/组合回测/参数优化/因子分析)+列宽均衡(去实例列) [nas]
CI/CD / test (push) Successful in 17s
CI/CD / nas-deploy (push) Successful in 22s
CI/CD / nas-verify (push) Successful in 8s
2026-08-13 14:04:57 +08:00
claude_dev b99e58bca1 fix(api): GET /task 合并内存 running/pending 任务(任务中心看到刚提交的,治只查DB看不到运行中) [nas]
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 26s
CI/CD / nas-verify (push) Successful in 11s
2026-08-13 14:00:45 +08:00
claude_dev 728b8ccec9 feat(portfolio): 任务中心UX(GitHub Actions模式)—提交后跳历史任务页+自动刷新运行中状态+发起新回测入口; PortfolioBacktest 回归表单/查看两态(治单任务跟踪丢失) [nas]
CI/CD / test (push) Successful in 14s
CI/CD / nas-deploy (push) Successful in 26s
CI/CD / nas-verify (push) Successful in 11s
2026-08-13 13:50:24 +08:00
claude_dev 15f132ccb5 feat(portfolio): 参数表单分块(策略与选股/时间与资金/基准与费用); 进行中页加「发起新回测」(治等待页无法新建) [nas]
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 25s
CI/CD / nas-verify (push) Successful in 9s
2026-08-13 11:36:35 +08:00
claude_dev ebe368f54a fix(portfolio): run_backtest_json main params+Namespace 漏费用字段致 rc=1(组合回测失败) [vps]
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 26s
CI/CD / nas-verify (push) Successful in 10s
2026-08-13 11:34:03 +08:00
claude_dev 66b393df16 feat(portfolio): 组合回测接入A股费用(佣金/印花税/最低佣金/滑点)对齐个股回测; BulletTrade set_order_cost/set_slippage [vps]
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 25s
CI/CD / nas-verify (push) Successful in 10s
2026-08-13 10:32:49 +08:00
claude_dev b48a3b5c75 feat(portfolio): 组合回测改 trackTask 三态+localStorage 持久(提交后可切页,回来续看进度/结果,治同步等待体验) [nas]
CI/CD / test (push) Successful in 17s
CI/CD / nas-deploy (push) Successful in 27s
CI/CD / nas-verify (push) Successful in 9s
2026-08-13 10:14:47 +08:00
claude_dev 523105650d fix(api): GET /task 内存失后 DB fallback 返 status(治回测 done 后前端轮询 404 死循环卡等待) [nas]
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 25s
CI/CD / nas-verify (push) Successful in 12s
2026-08-13 08:52:53 +08:00
claude_dev c833c07fd6 fix(portfolio): 历史组合结果可查看(PortfolioBacktest查看模式+History跳转/筛选/标签); 回测等待加已耗时提示(治卡顿错觉) [nas]
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 24s
CI/CD / nas-verify (push) Successful in 8s
2026-08-13 08:34:34 +08:00
claude_dev e07cf7cd81 fix(portfolio): 默认日期改最近1年+记忆; MOCK_ON=import.meta.env.DEV(NAS构建走真实,治组合回测2022日期/不在历史mock假象) [nas]
CI/CD / test (push) Successful in 16s
CI/CD / nas-deploy (push) Successful in 29s
CI/CD / nas-verify (push) Successful in 12s
2026-08-13 08:05:46 +08:00
claude_dev 4ad505434b feat(backtest): 个股回测接入费用(cfg通道)+slippage+benchmark放宽至4基准 [vps]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 25s
CI/CD / nas-verify (push) Successful in 9s
2026-08-12 23:56:14 +08:00
claude_dev 1d8e39709f feat(strategy): 策略代码+实例路由组(routes_strategy)并注册 app [nas] 2026-08-12 23:56:14 +08:00
claude_dev 31836701f6 feat(strategy): 策略实例 JSON 存储 CRUD(list/get/create/update/delete) [nas] 2026-08-12 23:47:51 +08:00
claude_dev a272741dd6 feat(strategy): registry 扩展自研目录扫描(AST)+文件读写+py_compile; __init__ 惰性化(纯逻辑模块脱离 fastapi 可单测) [nas] 2026-08-12 23:47:07 +08:00
claude_dev 93bd251cc9 fix(frontend): 组合回测基准下拉 + 新建回测改名个股回测(消除歧义) [nas]
CI/CD / test (push) Successful in 14s
CI/CD / nas-deploy (push) Successful in 27s
CI/CD / nas-verify (push) Successful in 9s
2026-08-12 23:32:15 +08:00
claude_dev 29b663acfc fix(monaco): defineTheme 去掉多余 name 字段(治 CI build TS2353) [nas]
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 26s
CI/CD / nas-verify (push) Successful in 10s
2026-08-12 23:26:32 +08:00
claude_dev 5c8a7e12c6 feat(frontend): 终端化重构+策略管理(代码→实例→4运行)+撮合设计+回测参数 [nas]
CI/CD / test (push) Successful in 18s
CI/CD / nas-deploy (push) Failing after 17s
CI/CD / nas-verify (push) Has been skipped
- 终端化: 科幻色板(tokens/EP/reset/chips/echarts)+Layout(Cmd+K/时钟/状态灯)+mock全接口+Dashboard/Result/Monitor样板+6图表配色
- 策略管理: 策略库三层(代码→实例→4运行)+新建策略(组合/CTA模板+Monaco)+在线代码编辑(Monaco)+实例CRUD(参数反射/标的池type切/interval/match_session)
- 实例→运行关联: backtest/paper/live New页读instance预填
- 撮合设计: match_session(下一根K线开盘/收盘/集合竞价)+interval定频率+实走限日线/分钟走miniQMT
- 回测参数: 基准下拉+日期默认1年localStorage记忆+滑点/手续费UI
- 账户管理页+命名重整(模拟盘/实盘,消除撞名)
- spec §11-13(菜单/策略管理/撮合设计) + Monaco编辑器 + 策略实例删除/编辑入口 + 列表实例列
2026-08-12 23:23:23 +08:00
claude_dev 58b5d08280 docs: 补 NAS 组合回测验证截图(2026-07-31 all_weather 跑通) [nas]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 32s
CI/CD / nas-verify (push) Successful in 13s
2026-08-12 08:45:24 +08:00
claude_dev 4f6cd43b21 feat(nas_sync): parquet 断点续传脚本(逐文件scp+NAS size校验跳过,治VPS无rsync) [nas] 2026-08-12 08:45:24 +08:00
claude_dev bf30283ac5 fix(ci): nas-verify 加 checkout(check-vps-needed 需 git log+脚本,原 job 只 curl/ssh 无代码) [nas]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 21s
CI/CD / nas-verify (push) Successful in 10s
2026-08-02 23:27:51 +08:00
claude_dev 67d1c1ef2f ci(vps-gate): commit必打[vps]/[nas]标签+vps-deployed tag+待推issue [nas]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 24s
CI/CD / nas-verify (push) Failing after 4s
- ci-cd: enforce-label(本次push无标签→fail,merge豁免) + check-vps-needed(nas-verify绿后对比vps-deployed tag,有[vps]未部署→开issue)
- vps-deploy: 成功打vps-deployed tag + 关issue(gap清空)
- scripts/ci/vps_pending_check.py: issue开/关/更新(CI复用)
- docs: vps-impact-map触及面表 + vps-deploy-pending判定记录
- CLAUDE.md: 部署流程段补标签约定
2026-08-02 23:25:40 +08:00
claude_dev b66a6c5958 fix(ashare_engine): load_data 直查 dbbardata 绕 vnpy peewee(治 CTA 死算)
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 29s
CI/CD / nas-verify (push) Successful in 4m11s
根因:vnpy 父类 load_data 走 get_database().load_bar_data()(peewee ORM),
get_database init 时 create_indexes 对 26G dbbardata 库 → spawn 建 26G
索引 CPU 死算 1:27+ / web 并发 database is locked(2026-08-02 根因,
vnpy_db 指向 v2 大库 2cb2ab0 后触发)。load_data 读 0 bars → 回测空/卡。

修复:load_data 统一直查 dbbardata(原仅 5m/15m 走 _load_intraday_data,
扩展到日线 d),绕 vnpy peewee get_database。sqlite3 busy_timeout=30s
防并发锁。d → BarData(interval=Interval.DAILY)。

验证:日线 600519 2024H1 load_data 0.1s bars=116(was database locked
5.2s/0 bars) interval=DAILY;run_backtesting 5.6s(was 死算 1:27+);
000001 compute_metrics 完成 daily_df=(116,25) benchmark=116(5图metrics恢复)。
2026-08-02 21:48:33 +08:00
claude_dev c263aa14ab chore(cta_engine): 加 load_data bar数+run_backtesting logging(确诊卡点)
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 27s
CI/CD / nas-verify (push) Successful in 3s
cta_6f7e8036 日线卡 run_backtesting(CPU85%,read_index_daily 前即卡),日线111bar该秒级→疑似 load_data 读多了(vnpy_db 2cb2ab0修复后读真实dbbardata,区间过滤/interval疑失效)。加 load_data history bars 数 + run_backtesting 完成 logging,重跑看 bar 数确诊。
2026-08-02 21:21:42 +08:00
claude_dev 3d934f5fa6 chore(cta_engine): 加阶段 logging(治 spawn 子进程黑盒,定位卡死)
CI/CD / test (push) Successful in 12s
CI/CD / nas-deploy (push) Successful in 30s
CI/CD / nas-verify (push) Successful in 7s
CTA 回测走 ProcessPool spawn 子进程,cta_engine 没配 basicConfig → 回测日志不进 docker logs(卡死看不到卡哪行,反复诊断障碍)。加模块级 basicConfig + read_index_daily/compute_metrics 阶段 logging + daily_df shape。下次卡死 docker logs 可见卡段(同 portfolio_worker)。诊断 cta_8aab3823 日线卡(rolling 已修非根因)。
2026-08-02 21:14:40 +08:00
claude_dev 2ff8ecaf52 perf(metrics): rolling alpha/beta 向量化(O(n²)→O(n),治分钟级卡死)
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 29s
CI/CD / nas-verify (push) Successful in 5s
compute_metrics rolling alpha/beta 原 for 循环每点 iloc[:i+1].cov/var = O(n²)。日线 111 天没事,分钟级 daily_df(万行)卡死(cta_c287f4b5 卡 5min CPU88%)。改 pandas expanding 向量化(cov/var/mean O(n)),数值与原循环一致(beta/alpha diff<1e-15,NaN 位置匹配)。pytest 6 绿。触发:b2c41c7 降级让 compute_metrics 首次在 benchmark 有数据时真跑(此前 benchmark 空被 skip),暴露 rolling O(n²) 性能 bug。
2026-08-02 20:54:50 +08:00
claude_dev b2c41c73b8 fix(backtest): CTA metrics benchmark 缺失降级(不阻塞整组指标图)
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 42s
CI/CD / nas-verify (push) Successful in 5s
benchmark 数据缺失时原实现 if 跳过整段 compute_metrics → {task_id}_metrics.json 不写 → 策略净值/回撤/波动图也空(不只基准图)。改为:benchmark 空时传空 Series + log WARN,compute_metrics 内部 reindex→fillna(0) 容空(基准类指标 NaN→None,策略指标正常),metrics.json 照写。效果:策略图照常出,只基准/Alpha/Beta 图空(前端 benchmark-curve/risk-series 已容错)。加测试 test_run_cta_backtest_benchmark_missing_degrades(mock read_index_daily 返空 → 验 compute_metrics 仍 called + metrics.json 仍写 + 策略指标有值)。6 测试全绿(Mac pytest)。
2026-08-02 20:37:50 +08:00
claude_dev 2cb2ab0dd8 fix(config): vnpy_db 改 NAS v2 dbbardata 库(治 CTA 结果页 5图空白)
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 21s
CI/CD / nas-verify (push) Successful in 3s
根因:vnpy_db 指向旧路径 /volume1/stock/sanguo_vnpy/data/quant_trading.db
(v1 残留,库不存在)→ read_index_daily 连空库报错 → cta_engine try catch
(line 307)静默跳过 compute_metrics → metrics.json 不写 → CTA 结果页
5图全空(基准/Alpha/Beta/回撤/波动)。个股回测走 parquet 不受影响,故只
5图空,日志无 traceback(静默跳过非崩溃)。

修复:vnpy_db → /volume1/stock/sanguo_vnpy_v2/data_backup/quant_trading.db
(NAS v2 dbbardata 库,000300 SSE 4025行实证)。yaml 本就是 NAS 路径基准
(daily_dir 等 /volume1/stock/...),VPS 走 SANGUO_DATA_ROOT env 覆盖、
Mac 走 fixture,三环境互不影响。

端到端验证:NAS 容器 load_config(find_config_path()) → vnpy_db v2 →
read_index_daily('sh000300',2024-01-02,2024-06-28) 返回 117行(was 0)。
2026-08-02 20:22:44 +08:00
claude_dev 4c5270cf7a fix(frontend): EquityCurve 去 v-if + watch flush:post(治净值图永不init)
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 22s
CI/CD / nas-verify (push) Successful in 2s
EquityCurve 用 v-if/v-else(空数据占位/否则chart-box),但数据异步到达时 v-else 切换 + watch 默认 pre flush → el.value 尚未绑定 → echarts.init 跳过 → 净值图 hasEchartsInstance=false 永不画。改为总渲染 chart-box(同 BenchmarkCurve 模式) + watch flush:post 保证 DOM patch 后 render。vue-tsc RC=0。
2026-08-02 20:01:55 +08:00
claude_dev c049e0e97d fix(frontend): MetricCards fmt 兜底字符串值(治结果页整页渲染崩溃)
CI/CD / test (push) Successful in 8s
CI/CD / nas-deploy (push) Successful in 21s
CI/CD / nas-verify (push) Successful in 3s
后端 statistics 字段可返字符串(如 sharpe_ratio="0",vnpy原始统计),原 fmt 直接 value.toFixed 在字符串上抛 TypeError。stack trace 证实:Result.vue onMounted 赋值 relativeMetrics 后 MetricCards fmt 崩溃,中断 Vue re-render → echarts setOption 从未执行 → 指标卡+所有图表全空(cta_3919916e 零成交复现,canvas:0)。Number() 统一转换兜底。vue-tsc RC=0。
2026-08-02 19:51:51 +08:00
claude_dev 857d43c6c2 fix(frontend): CTA结果页补净值曲线图(零成交也出图)
CI/CD / test (push) Successful in 8s
CI/CD / nas-deploy (push) Successful in 21s
CI/CD / nas-verify (push) Successful in 3s
Result.vue 拉了 equity-curve 数据却未画净值曲线;且 benchmark-curve/risk-series 依赖 *_metrics.json,CTA 引擎当前未生成该文件,致收益概述图全空。新增 EquityCurve.vue 走 equity-curve 接口(独立于 metrics.json,数据源 BacktestResult.equity_curve),零成交时画 N 天平线(初始资金不变),满足'有结果就有图'。vue-tsc RC=0。
2026-08-02 19:10:55 +08:00
claude_dev 9588a77a01 feat(portfolio): 回测可观测性 L1+L2+L3(治排查黑盒)
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 24s
CI/CD / nas-verify (push) Successful in 4s
L1 worker logging: portfolio_worker 模块级 basicConfig(spawn子进程logger进docker logs)
  + subprocess stderr=None 继承(runner_backtest日志实时进docker logs,原capture_output吞了)
  + 失败处理适配(stderr未捕获,改提示查docker logs)
L2 task状态区分: 加 GET /portfolio/task/{id}/status(返state+error)
  + get_result 区分 failed(422+error)/running·pending(404 not ready)/done(原全404分不清)
L3 _wait_future日志: runner.py except 加 logger.error(原只task.fail静默,治非timeout异常排查)
前端无需改(轮询通用/task/{id}已处理failed)
2026-08-02 13:42:06 +08:00
claude_dev 6d23f7b5ec fix(portfolio): worker _TIMEOUT 3600→10800(3h)+timeout非静默日志
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 29s
CI/CD / nas-verify (push) Successful in 6s
全市场(max_pool=0)全周期(726天)回测每策略 60-100min,原 3600s(1h)不够→
subprocess.run kill→_wait_future 静默 task.fail→404。改 10800(3h)覆盖。
加 try/except TimeoutExpired 显式 logger.error(task_id+argv)+raise RuntimeError,
timeout 不再静默(治基建反馈排查困难)
2026-08-02 07:14:00 +08:00
claude_dev e22c8ee939 feat(portfolio): max_pool 字段透传(model+handler+前端,解除30硬编码)
CI/CD / test (push) Successful in 8s
CI/CD / nas-deploy (push) Successful in 21s
CI/CD / nas-verify (push) Successful in 3s
model 加 max_pool 字段(默认30,0=全市场不限);handler 用 req.max_pool 替换硬编码30;
前端加选股池上限 input + onSubmit 透传。下游 submit_portfolio→spec→argv--max-pool
链路异步化时已存在,本次只补入口。全周期验收可传 max_pool=0 对比 docker exec 旁证
2026-08-01 23:20:40 +08:00
claude_dev 7a14d7da82 feat(portfolio): strategy 字段全链透传(API→orchestrator→worker→runner_backtest + 前端选择器)
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 20s
CI/CD / nas-verify (push) Successful in 3s
后端: PortfolioBacktestRequest.strategy → submit_portfolio(strategy=) → spec →
portfolio_worker _build_argv --strategy(NAS local + Mac SSH 两分支)
前端: PortfolioBacktestReq.strategy? + 策略下拉(4选项) + 副标题动态 + onSubmit 透传
runner_backtest CLI 已支持 --strategy(choices 4 策略),本提交不动
2026-08-01 23:01:26 +08:00
claude_dev 5c5bd9d7bb fix(docker): PYTHONPATH ENV 移 COPY 后(缓存命中 TA-Lib,避 sourceforge wget 卡)
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 20s
CI/CD / nas-verify (push) Successful in 2s
PYTHONPATH ENV 原在 Step2 前置,致其后所有层 cache miss,TA-Lib 步骤重编译触发
wget sourceforge 国内卡死(build_v3 卡 29min load0.04)。移到 COPY 代码后:Step1-19
(apt/TA-Lib/pip)与旧 build 相同→缓存命中跳过 wget,只 ENV+COPY 重跑(秒级)。
功能等价(PYTHONPATH 在镜像 env,spawn 子进程继承),仅层缓存优化。

build_v4 实证:Step5 TA-Lib Using cache(跳 wget)+镜像 ENV PYTHONPATH 固化
(docker exec 探针可见 /app:/app/vnpy_v4.4.0,修复前空)。
2026-08-01 22:49:21 +08:00
claude_dev 0f6cdbedc9 fix(entrypoint): uvicorn --log-level 转小写(治 exit2 crash loop,第3根因)
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 22s
CI/CD / nas-verify (push) Successful in 2s
新版 entrypoint(uvicorn 工厂)拼 --log-level ${VNPY_LOG_LEVEL:-info},但 VNPY_LOG_LEVEL
已 export INFO 大写,默认值不生效→传 INFO→uvicorn case-sensitive 拒绝→exit2 crash。
改 ${VNPY_LOG_LEVEL,,} 转小写(bash4+,shebang /bin/bash 支持)。

新版 entrypoint uvicorn 工厂首次在 NAS 跑,连暴露 3 个 crash 根因(已全修):
  6d786fb: PYTHONPATH(spawn import 治 BrokenProcessPool)
  c210197: +x 执行位(tini exit126) + SKIP_REDIS_CHECK(Redis 超时)
  本commit: --log-level 小写(uvicorn exit2)
旧版 python run_web.py 硬编码 log_level='info' 无后两个问题。
2026-08-01 21:59:39 +08:00
claude_dev c210197778 fix(entrypoint): +x 执行位 + SKIP_REDIS_CHECK 默认1(治 run535 NAS crash loop)
CI/CD / test (push) Successful in 8s
CI/CD / nas-deploy (push) Failing after 34s
CI/CD / nas-verify (push) Has been skipped
run535 部署后容器 crash loop(exit126),两个独立根因:
1. Permission denied: entrypoint.sh git mv 后 644 无执行位,rsync 推 NAS 也是 644,
   bind mount 覆盖镜像层 chmod +x 无效,tini exec 失败。→ entrypoint.sh git 100755。
2. Redis 连接超时:新版 entrypoint 检查 SKIP_REDIS_CHECK!=1 才查 Redis(旧版 if false
   硬跳过),NAS 无 Redis 卡检查 crash。→ 默认 SKIP_REDIS_CHECK=1(复现旧版跳过)。

附:文档(nas-deploy-plan 方案①已实施 + ops/README 根治标记)。
2026-08-01 21:43:29 +08:00
claude_dev 6d786fbf41 fix(orchestrator): spawn 子进程 PYTHONPATH + entrypoint 回根治孤儿
CI/CD / test (push) Successful in 8s
CI/CD / nas-deploy (push) Failing after 33s
CI/CD / nas-verify (push) Has been skipped
ProcessPoolExecutor(spawn)子进程不继承主进程 sys.path(insert 是内存修改),
import sanguo_orchestrator 失败->BrokenProcessPool->API 回测静默失败,POST 秒回
task_id 但轮询永远 404。spawn 继承 env 不继承 sys.path,故:
1. Dockerfile ENV PYTHONPATH=/app:/app/vnpy_v4.4.0(镜像层,bind mount 覆盖不了)
2. entrypoint.sh 回仓库根(git mv 自 docker/):promote --exclude /docker 致旧版
   entrypoint 在 NAS 成 git 外孤儿(340行,被 bind mount 覆盖镜像层);回根后全量
   rsync 自动推可复现(对齐 docs/deployment/nas-deploy-plan.md 预设修复)+export 兜底
3. 三 Dockerfile COPY 路径同步

反馈: 策略 session(根因诊断+探针验证)
2026-08-01 21:33:20 +08:00
claude_dev ca0ec016f9 ci(nas-verify): 加 /health gate 防存活探针回归
CI/CD / test (push) Successful in 8s
CI/CD / nas-deploy (push) Successful in 21s
CI/CD / nas-verify (push) Successful in 3s
/health 是 Docker HEALTHCHECK 依赖端点,后端漏实现致容器恒unhealthy
(a17f291 已补端点)。nas-verify 加 gate:/health 非200→CI 红灯,防漏部署/被改坏。
public 端点无需 token,$BASE 已是 http://192.168.2.154:8000。

反馈: 前后端 session
2026-08-01 21:07:34 +08:00
claude_dev 1989a54ee5 fix(deps): requirements-lock 补 bullet-trade/jqdatasdk 治重装丢包
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 21s
CI/CD / nas-verify (push) Successful in 3s
VPS lock 缺这俩包(实为手动 pip install 在 c:\python310),重装 Python 环境会丢
——与 NAS docker 重建丢包同源坑。版本与 docker 侧/VPS 实装对齐(0.9.2/1.9.8)。

polars[rtcompat] 不入 lock:NAS Celeron 无 AVX2 专属,VPS AMD64 有 AVX2 用普通 polars。
2026-08-01 21:05:27 +08:00
claude_dev a17f291850 fix(api): 加 /health 存活探针端点(治Docker HEALTHCHECK恒unhealthy,/health原404)
CI/CD / test (push) Successful in 8s
CI/CD / nas-deploy (push) Successful in 21s
CI/CD / nas-verify (push) Successful in 3s
2026-08-01 21:01:35 +08:00