467 Commits

Author SHA1 Message Date
claude_dev 1d754426cd docs: CLAUDE.md reload行适配任务重组——sanguo-bs-eod→sanguo-bs-daily(2026-08-20晚bs合并,18:05串行eod→fund),即刻让采集生效的命令同步换名 [nas]
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 32s
CI/CD / nas-verify (push) Successful in 10s
vps-deployed
2026-08-20 20:14:52 +08:00
claude_dev be315a0fd8 fix(live): P0 order_target_value执行层跨实例互卖根治——2026-08-20 14:06实锤#22探针otv(513030,0)(own仅100股)按引擎全账户target把#18的43,500股(~8.3万)一起卖了,当晚15:10恒等式如实报警(unattributed -83,346/-19.09%>0.5%);所有真实策略卖出全是同款写法(aw:191/409·mom:472·sc:392·vs:383),不修则9:30轮换同代码票必互卖——修法=facade层实例相对化(_instance_order_wrappers):有账本时otv换算 目标-持有 增量下显式股数单(买入差额/卖出硬顶own closeable,清仓允许零股尾巴,减仓整手化,可卖0一单不下·绝不卖别家),负order_value同款硬顶,正order_value买入不动;价格取get_current_data实时价,拿不到回退账本加权成本,双失效才透传引擎旧语义;无账本(回测/单测)原样透传行为零改动;+10测试(只卖自己恰好-100/P0原样复现own空再清仓零下单/T+1当日买closeable=0拒/半仓锁定只卖可卖600/加仓差额2400/减仓整手5000/负ov硬顶1000/正ov透传/无账本identity/价格回退avg_cost);portfolio 410绿 [vps]
CI/CD / test (push) Successful in 8s
CI/CD / nas-deploy (push) Successful in 27s
CI/CD / nas-verify (push) Successful in 8s
2026-08-20 20:05:33 +08:00
claude_dev f28f9cf308 fix(data): bs_eod挂死根治——login/logout纳入_with_timeout保护伞+中文系统运行判定三词修正。①根因(08-20 19:26实锤,日志形态逐字吻合):bs.login()打印success后仍有后续往返,baostock recv不遵守socket default timeout,主线程卡死在login内部recv(50min+零输出,连60s超时err都没有);fetch早已套_with_timeout但login/logout是裸调——relogin/login_once全部纳入(login60s/logout30s),超时按登录失败处理走既有重试链;②bs_fundamentals._is_running_text:中文系统实际输出「正在运行」不含连续子串「运行中」,原两词判定在中文VPS恒False=守卫恒fail-open(当晚若不禁用bs-fund将真撞车);三词都认+回归钉测试;③check_task_running.py通用探针(修复版)替换VPS上带同bug的check_bs_eod.py;+4测试(登录超时返False/relogin全程超时不raise/login与logout必经保护伞契约/正在运行判定) [vps]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 28s
CI/CD / nas-verify (push) Successful in 10s
2026-08-20 20:04:51 +08:00
claude_dev d4a1305714 chore(data): 23个VPS schtask XML备份入库(scripts/data_platform/legacy_tasks/)——2026-08-20数据任务重组删改前置铁律:删前XML备份;含①改名5对旧任务(sanguo-xt-eod/idx-eod/index/ak-stock/ak-quarter→源_频率命名,Actions/Triggers已验逐字一致)②将删的sanguo-bs-eod/bs-fund(bs合并手术用,bs-eod XML即sanguo-bs-daily克隆母版)③14残留(全部last-run≤2026-07-22已核验,breakdown:任务清单原写sanguo-daily-increment实为sanguo-bs-daily-increment真名已纠正)④ak-eod/ak-events现役快照(明天ak-eod改名用) [vps] 2026-08-20 19:58:24 +08:00
claude_dev 952cc5adf8 feat(data): sanguo-bs-daily单入口串行编排(bs_eod→bs_fundamentals)——2026-08-20数据任务重组阶段1:根治当日撞点(bs_eod加指数段后ETA 23:00+与旧23:05 bs-fund重叠=同IP双baostock连接封禁红线),合并进同一schtask两腿先后子进程,leg1进程退出(logout+消亡)连接才释放leg2才login;bs_daily_main只做顺序+退出码透传({0,3}=OK,3=按预算graceful不算失败)+[BS-DAILY]腿起止时间线日志(验收'eod logout后fund才login'直接证据);leg2无条件跑(leg1致命不连坐,连接已释放fund独立作业);wrapper传BS_DAILY_LIMIT=15000收紧eod病态重试硬顶(常态~11.1k不受影响,与fund30000合计≤45.1k<48k/IP/天);--smoke零配额链路自检;bs_fundamentals._bs_eod_running补注释:旧任务名已删探测必失败fail-open=设计行为勿修复(探新名会探到父任务永久让路);+15测试(顺序铁律/leg2无条件/退出码聚合9组合/smoke零子进程) [vps]
CI/CD / test (push) Successful in 18s
CI/CD / nas-deploy (push) Successful in 39s
CI/CD / nas-verify (push) Successful in 14s
2026-08-20 19:49:00 +08:00
claude_dev d54f648efc fix(web): 监控页列宽四修(用户验收08-20)——①本策略持仓(实例账本):新增『数量(可用)』列(=总持仓−冻结,T+1可用股数直读),标的100→90,总持仓/冻结/均价同步收紧②今日成交/全部成交两表:时间160→150定宽,策略160→110(超长省略号悬浮),标的100→90——挤出~120px,治后列折行③账户实况-实例分解:实例180→140+省略号悬浮④账户持仓(QMT全账户):标的110→90;npm run build绿 [vps]
CI/CD / test (push) Successful in 12s
CI/CD / nas-deploy (push) Successful in 33s
CI/CD / nas-verify (push) Successful in 13s
2026-08-20 13:33:13 +08:00
claude_dev b436adef1b fix(live): 成交时间1970守卫——08-20探针首日实锤9笔traded_at=1970-01-01 00:00:01(QMT原始时间经引擎pd.to_datetime失败形态落epoch),前端『今日成交』按日期过滤全空+账本trade_date失真(当日仓被当历史仓,T+1视图frozen=0);修=_effective_trade_time守卫:年份<2000一律回退当前时刻(归因轮询≤60s,日期误差仅跨日60s窗口);+2测试(1970回退当日记账且frozen生效/有效时间原样保留);附带已治疗VPS存量9行(从引擎日志按标的+数量回填13:03/13:05真实时刻,#18今日成交即时可见);portfolio 29+398绿 [vps] 2026-08-20 13:32:54 +08:00
claude_dev 2191160dda docs(factor): 因子库全景调查报告——因子调研session起步(C起步)——①本地盘点:sanguo_factor管线齐(注册表+alphalens评估+web API)但仅7个基础因子;vnpy自带Alpha101完整表达式(100个,零移植)+Alpha158(qlib同款)+46算子全覆盖;接入缺口=vwap派生列/AlphaLabSession 50股缓存上限/批量吞吐②聚宽250+因子全清单(官方文档直读):风险模型(Barra式10风格+21描述+16 PRO)+基本面136(质量70/基础41/成长10/每股15,等P2回灌)+量价104(随时可做);结论=值不买(试用拿不到近3月+2026-08起海外IP封),公式目录本地复刻;jqfactor_analyzer(MIT)可白嫖③行业:GTJA191公式全公开187/191可自算;QuantsPlaybook(5851★)研报复现入口;aurumq-rl(MIT)polars同构工程范本(296+11 A股私有因子族);Tushare 202因子公式全公开④四批路径:101+158现在→GTJA191+聚宽量价→聚宽财务(3周后)→Barra风格;行业中性=IC数据说话后再决策 [nas] 2026-08-20 13:22:13 +08:00
claude_dev 61421de1d9 chore(data): bs_fund_wrapper.ps1——sanguo-bs-fund schtask 23:05 wrapper(镜像 bs_eod_wrapper:清代理直连铁律+迁移日志目录+退出码透传),跑 baostock 季频财务+业绩报告(bs_fundamentals.py,数据session P1+P2+P3);wrapper 随本commit进repo,schtask 当场在VPS建(23:05,SYSTEM/HIGHEST,同bs-eod参数),run707已部署脚本本体 [vps]
CI/CD / test (push) Failing after 12m55s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
2026-08-20 12:58:20 +08:00
claude_dev 147a49d781 feat(strategy): channel_test随启随验探针模式(用户拍板2026-08-20:开盘窗口不再是验证瓶颈,随时启动随时验全场景)——on_demand=None自动:LiveEngine进程(supervisor注入SANGUO_LIVE_STRATEGY)→启动/重启后~90s经facade.run_daily注册probe_all打一轮全场景;必须走facade注册而非直接调用:回调才收到B2包装的代理context(实例预算视图),绕过它探针测不到定寸虚拟化;影子柜台24h可验(收盘价撮合),实盘闭市下单被QMT拒亦属验证项(决策层输出已在日志);重启实例=再验一轮;[PROBE-0]实例视图快照(cash=预算切片非全账户=B2生效标志)/[PROBE-1]rotate主调仓定寸=实例视图等权/[PROBE-2]只卖自己(卖出对象全部来自own账本,对照前端账户实况实例分解)/[PROBE-3]T+1当日买立即卖应拒(冷启动空仓跳过,第二轮起有票)/[PROBE-4]swap_one资金复用;回测/单测无env维持四时点旧行为,显式True/False覆盖;+3测试(env下仅注册1个未来~90s的probe_all/显式off保四时点/probe_all全序列下单断言);旧四时点测试补delenv防环境串扰 [vps]
CI/CD / test (push) Successful in 14s
CI/CD / nas-deploy (push) Successful in 29s
CI/CD / nas-verify (push) Successful in 15s
2026-08-20 11:41:56 +08:00
claude_dev e7c5defe64 fix(live): runtime副本孤立加载ImportError根治——2026-08-20晨12引擎崩溃循环事故(6实盘+6影子自建队07:10起每60s崩,当日0成交,9:05/9:30/9:35全未触发)——根因=live_strategy.py台账/B2两行相对导入(from . import live_instance_ledger/from .live_portfolio_proxy):文件被_instance_adapter逐字节复制到runtime/<实例>/后bullet_trade以顶层模块加载(无包上下文)→ImportError;测试全绿盲区=测试以包成员导入相对导入合法,生产孤立加载才崩,nas-verify不启引擎——修=改绝对导入from sanguo_portfolio import(引擎进程项目根在sys.path,同文件其它绝对导入生产已验证可跑);抽_ledger_tools()单函数两种加载上下文单测直打;+3测试(孤立副本顶层import_module复现事故点/包内上下文/静态禁from .回潮);_instance_adapter启动时内容比对自动重拷→VPS落地后下轮引擎重启自愈免手工清runtime;顺手修2个日期硬编码测试(proxy fixture与snapshot的trade_date=2026-08-19→动态今天,当日买入跨日T+1断言必翻红,CI不跑此套件故昨日未暴露);portfolio 398绿 [vps] 2026-08-20 11:41:47 +08:00
claude_dev 9fa2f933ee refactor(data): 5m回灌改每日分片——用户拍板2026-08-20'每天固定下一些',废弃--full一趟灌满——①每日一跑=回灌片(若有)+每日增量(回灌期也跑,近端7天始终新鲜)②片=半年窗口newest-first(近端先到先可用,回测最常用的近期数据第一天就有),state(bs_5m_state.json next_end)逐片向2020-01-03推进;整片扫完才推进,断点/达限次日重拉同片(OR REPLACE幂等)③全程~14片≈两周补完,每片~5.5k query/~3200万行/3-4h;片+增量每日~11k query,NAS IP独立48k配额内④DAILY_LIMIT守卫改跨窗口累计计数(swept);删FULL_TIMEOUT(半年片5.8k行/股,60s超时足够);+3测试(首片=最近半年/逐片向2020走+完结盖章/损坏state重头),main测试改双sweep断言(片+增量4调用/完结后单sweep2调用);data_platform 158绿 [nas]
CI/CD / test (push) Successful in 18s
CI/CD / nas-deploy (push) Successful in 36s
CI/CD / nas-verify (push) Successful in 17s
2026-08-20 10:42:34 +08:00
claude_dev 20ff70e85d refactor(data): 5m改同库设计——用户二次拍板2026-08-20:放弃独立库,5m直接写NAS副本主库dbbardata表(interval='5m'与镜像行d/15m唯一键正交=结构性互不干扰)——①bs_5m_eod缺省库改/volume1/stock/sanguo_vnpy_v2/data_backup/quant_trading.db(=同步目标=NAS回测provider读的库portfolio_worker.py:180),NAS就地5m回测/回放reader零改动,未来VPS扩容导interval='5m'反向merge一次迁移②同库安全性实证:同步链export不带id列+NAS侧INSERT OR IGNORE按UNIQUE去重→键永不相交双向碰不到;纯merge无文件覆盖NAS本地行不会被删;id由NAS AUTOINCREMENT自分配无跨库冲突③ensure_schema防重复索引:PRAGMA index_list/index_info识别已有同列唯一索引(NAS侧uq_dbbardata)跳过,免数GB无谓开销+双倍写放大④merge_increment补busy_timeout=60000(副本库从此有第二个写者,无它撞写锁当场locked失败,60s与5m侧对齐)⑤写锁竞争说明:双写者WAL+busy_timeout串行化,与每日增量merge(秒级)重叠单股失败次日LOOKBACK=7自愈;+2测试(缺省库契约钉死/副本已有索引不重复建);40+153绿(data_platform 155) [nas]
CI/CD / test (push) Successful in 15s
CI/CD / nas-deploy (push) Successful in 34s
CI/CD / nas-verify (push) Successful in 15s
2026-08-20 10:10:04 +08:00
claude_dev a6f924e950 feat(data): NAS独立5分钟线备份——bs_5m_eod新脚本(NAS专属,VPS永不跑)——用户拍板2026-08-20:NAS既有数据全是VPS同步镜像(nas_sync零接触),5m是NAS唯一自主从baostock下载数据,落独立库BS_5M_DB(缺省/volume1/stock/sanguo_5m/dbbardata_5m.db容器内外同路径),绝不写同步目标data_backup/quant_trading.db;①首次自建schema+唯一索引(REPLACE去重)②缺省每日增量LOOKBACK=7(DSM任务计划~19:05);--full一次性回灌2020-01-03+(baostock分钟固定起点非滚动;全区间每股恰1次调用=~5.5k query一趟≈3.6亿行,数小时级,per-stock短事务断点续跑幂等;FULL_TIMEOUT=300s防大payload误杀)③配额:NAS出口IP独立核算48k/天与VPS互不相干,DAILY_LIMIT守卫保留④单实例锁bs_5m.lock(pid活性检测,死锁自动覆盖/PermissionError按在跑)防DSM定时与--full长跑撞车=同IP双baostock连接红线⑤复用bs_eod四件套+datetime拼接/数值口径与15m完全同款;+13测试(schema/REPLACE不双行/per-stock原子/full vs daily窗口/锁三态/main四条);data_platform 153绿 [nas]
CI/CD / test (push) Successful in 14s
CI/CD / nas-deploy (push) Successful in 36s
CI/CD / nas-verify (push) Successful in 16s
2026-08-20 09:58:00 +08:00
claude_dev d0a538ced3 feat(data): P1+P2+P3季频财务+业绩报告——bs_fundamentals新脚本(sanguo-bs-fund schtask 23:05,VPS)——①P2回灌:profit利润+dupont杜邦2015Q1+按季分片,state文件推进日预算自适应续跑(约2季/天≈3周自动跑完;预算不够整季不拉半季,半段落库也幂等)②P1增量:回灌完成后拉当季+上一季(兜住8-31晚披季报)③P3业绩报告:forecast预告2003+/express快报,每股一次调用与区间无关→月首周日全区间恒定2N query幂等拉齐(--reports-now冒烟)④落parquet data/fundamentals_baostock/保留pubDate列(读侧pubDate<=date过滤防前视,同fundamentals-lookahead-bias-fix模式);去重(code,pubDate,statDate)restated后写者胜,键不足2列退全列绝不按单列丢历史⑤预算铁律(48000/天):bs_eod~11k+本脚本DAILY_CAP=30000串行=≤41k,月首周日叠reports 44.3k<48k余3.7k;开跑前schtasks探sanguo-bs-eod(极端尾22:41)在跑则exit0次日幂等补——同IP永不双连接⑥复用bs_eod四件套(login_with_retry/relogin/_with_timeout/全A清单)+周期relogin+失败relogin兜底;字段名读rs.fields不硬编码;+14测试(季度边界/parquet幂等+防呆/state损坏重头/动态字段+计数/回灌2季cap推进/state超前零拉/增量当季+上季/报告月首周日窗口/守卫文本/main跳过+exit2);data_platform 140绿 [vps] 2026-08-20 09:53:33 +08:00
claude_dev dbb5ed5aa8 feat(data): P0指数日K双源——bs_eod主循环后追加baostock指数段(2006+全量REPLACE)——治指数点位单源停更史(000300曾停7-16/000938停2023/932000三源无):①INDEX_CODES 15只=探针实证有数(300/500/1000/上证50/中证100/上证综指/深成/创业板+399303国证2000替932000+中证行业6只928/931-935;932000/000938/000985/929/930/936/937 baostock无→不进列表免每日warning刷屏)②同PK(symbol,exchange,datetime,interval)唯一索引INSERT OR REPLACE,与sina idx-eod存量行互备后写者胜,datetime归一纯日期同格式③段在主循环后:query达限跳过守DAILY_LIMIT预算;段内单指数fetch/upsert异常只log不外抛,退出码语义不变(schtask结果码可见)④fetch复用fetch_k_with_timeout(计QUERY_COUNT约15query/天可忽略)+relogin兜底;+10测试(sh/sz映射/REPLACE不双行/空行跳过/容错续跑/代码表卫生/达限跳过/正常跑调用);relogin计数3测试补run_index_eod隔离mock(指数段自身relogin是预期新行为);data_platform 126绿 [vps] 2026-08-20 09:49:13 +08:00
claude_dev 95bdf8a27d fix(data): bs_eod启动登录重试——治08-18型瞬断整天缺口——main()登录失败不再当场exit2,改login_with_retry串行重试(1+2轮,间隔120s/300s,无并发不触封禁红线;用户拍板2026-08-20:优先自身健壮性,实测无频繁重连/超48k配额);瞬时闪断(10054/10002007)秒~分钟级恢复,2/5分钟两轮覆盖;仍失败才exit2,次日18:05例行LOOKBACK=7自愈(自愈机制本就完好,重试只是把'当晚瞬断'消掉);+4测试(首试成功不等待/第2次恢复/3次全败False/集成exit2契约保持);data_platform 116绿 [vps]
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 41s
CI/CD / nas-verify (push) Successful in 16s
2026-08-20 08:49:53 +08:00
claude_dev abead01bba chore(config): B1监视器冷启动账号源watch_accounts固化——实例删光+快照表空时监视器无目标可盯(VPS run700部署后实锤:监视器线程活但0行),config补watch_accounts=[66639661]+watch_mini_path;NAS侧无QMT客户端连接失败节流告警1条/30min属正常;本次部署已用sticky行播种应急,此config防未来整库重建再裸奔 [vps]
CI/CD / test (push) Successful in 17s
CI/CD / nas-deploy (push) Successful in 48s
CI/CD / nas-verify (push) Successful in 13s
2026-08-19 22:53:07 +08:00
claude_dev b86af798aa test(strategy): A3预检——B2定寸虚拟化×A1通道三明治集成测试5条(issue#29) [vps]
CI/CD / test (push) Successful in 23s
CI/CD / nas-deploy (push) Successful in 32s
CI/CD / nas-verify (push) Successful in 18s
复刻 live_strategy._setup 实盘接线(A1 broker通道注入+B2 wrap_scheduler代理
context 同开=VPS重建后将运行的真实状态),真实 LiveInstanceLedger+真策略驱动:
①available_cash 过代理=账本现金(99.3万预算口径,非全账户396万)
②channel_test 等权买入 per=(账本现金+Σ自己市值)/N≈50万/只(hold_n=2),
  精确断言 spec §A3 验收口径(非168万=995万/6量级)
③三明治下轮换只卖台账标的(别家600036不动)
④止损链路三层通:账本avg_cost+真账户现价透传(6.0<7.0*0.92触发,只卖自己)
⑤无账本 make_proxy_context 原样返回(模拟盘零改动铁律)
19/19绿;portfolio 367绿(3失败=Mac缺bullet_trade环境性,NAS CI过)
2026-08-19 22:42:30 +08:00
claude_dev 4a9208db9d feat(portfolio): B2定寸虚拟化InstancePortfolio代理——策略决策层脱离全账户污染(spec§B2+A2清单issue#29)——①live_portfolio_proxy:InstanceContextProxy(portfolio→账本视图,其余属性透传真context,property+__getattr__实现)+InstancePortfolio(每次访问现算)②覆盖A2清单全集:available_cash/cash=账本现金(168万/只定寸污染根治点,.cash fallback同源);positions=账本jq对象(total_amount/amount/closeable_amount(T+1)/avg_cost(台账口径=成交价)/cost_basis/security)+price/last_sale_price从真portfolio同名标的透传(市场数据非所有权,缺→None止损跳过);value/market_value/total_value=现价×量(缺价→0偏保守不误卖);total_value/positions_value=账本equity(现价优先成本兜底);locked_cash=0③清单外属性AttributeError fail-fast(真值=全账户数字,静默透传=污染复发,宁可崩=A1同款house style)④wrap_scheduler包装facade的run_daily/run_monthly(发生在策略initialize注册任务之前,策略代码零改动);functools.wraps保任务名;无账本原样返回=回测/影子零改动⑤live_strategy._setup接线(_ledger None→wrap直通);引擎内部撮合/风控仍看真实账户;+13测试(定寸现金/T+1/现价透传/缺价保守/equity兜底/fail-fast/调度代理注入/无账本零改动/_setup接线两态);portfolio 373绿 [vps]
CI/CD / test (push) Successful in 12s
CI/CD / nas-deploy (push) Successful in 34s
CI/CD / nas-verify (push) Successful in 11s
2026-08-19 22:37:16 +08:00
claude_dev ed15c24db8 feat(trader): B5对账恒等式优先——15:10日终报表加『全账户=Σ实例账本+未归因』层(spec§B5)——①build_identity_report:每QMT账号一行,快照市值vs Σ实例账本市值(live_balance最新,dae56e2起=实例视图),未归因MV+占比,容差0.5%(价格时点差);逐票未归因=快照持仓−Σ实例持仓(6位码对齐)单列(重建后应≈0,大数=遗留/手动仓)②状态四态:pass/no_instances(重建期无实例=恒等式成立)/snapshot_missing(如实FAIL)/unattributed_over_tol(旧全账户行叠加期呈现大额负未归因)③save/load落库identity_reconcile(account+date主键)④15:10调度(_maybe_daily_reconcile)与CLI恒等式先行,再逐对live↔shadow(配对v2不变);+7测试(容差内过/未归因票单列/负未归因/无快照/无实例/多实例Σ不串账号/落库回读);trader 248绿 [vps]
CI/CD / test (push) Successful in 18s
CI/CD / nas-deploy (push) Successful in 58s
CI/CD / nas-verify (push) Successful in 11s
2026-08-19 22:32:00 +08:00
claude_dev 537fd2d571 feat(live): B4前端三层展示+预算表单+账户实况端点(spec§B4)——①新建实盘表单:起始资金升级『实例预算』,默认值=剩余可分配(budget-info,用户改过不跟随),占用率进度条(已分配+本次 vs 现金),超限红条+禁提交,快照不可用警告条(与后端fail-closed双保险)②监控页三层重构:本策略买卖(live_trades归因,今日/全部)/本策略账本+持仓(实例视图,现金/市值/净值语义重命名)/账户实况(新卡:现金/市值/总资产+Σ实例市值+未归因市值=账户市值−Σ实例+实例分解表+QMT全账户持仓表)③列表页:每QMT账号一条占用率横幅,存量超限亮黄条⚠④后端补GET /live/account-snapshot(注册在{aid}前):全局快照+同账号实例最新账本分解+unattributed_mv,快照缺失fresh=False数值None;⑤live.ts补BudgetInfo/AccountSnapshotView类型+updateLive带initial_capital;+3端点测试(分解算术/无快照降级/跨账号过滤);api 164绿;npm run build绿 [vps]
CI/CD / test (push) Successful in 15s
CI/CD / nas-deploy (push) Successful in 1m24s
CI/CD / nas-verify (push) Successful in 15s
2026-08-19 22:26:41 +08:00
claude_dev 5a91be2efd fix(strategy): A1 卖出只卖自己——共享QMT账户互卖根治,持仓读取优先实例账本视图(spec §A1)
CI/CD / test (push) Failing after 7s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
2026-08-19 盘后实锤:8路实盘共享miniQMT账户66639661,context.portfolio是
全账户视图→'卖掉所有不在目标里的持仓'卖掉别家持仓(518880/600036双实例
各卖当日真实发生)。spec: docs/design/multi-strategy-instance-budget-spec.md

- _get_positions(context, broker=None)(all_weather共享helper+all_weather_ex
  同构副本):broker.get_instance_positions存在(runner_live注入台账,dae56e2)
  →只返回本实例持仓(_InstancePosition:数量/成本取台账,price/value从共享
  视图同名标的补=市场数据非所有权);否则回测/影子原context.portfolio不变,
  模拟盘零改动;通道返非dict→TypeError fail-fast(回退=互卖,宁可崩)
- 视图空dict→轮换退化'只买不卖'(spec:正确行为不是bug)
- 逐个卖出腿过一遍(spec清单):channel_test rotate/partial_adjust/swap_one/
  t1_probe、momentum/_ex熊市清仓+调仓+买入去重、small_cap/_ex _rebalance、
  value_selection/_ex月度卖出、all_weather/_ex prepare/stop_loss/monthly
- 附带修:channel_test加仓腿市值未知时跳过,绝不order_target_value(code,0)
  把加仓变清仓
- 测试:test_instance_view_isolation.py 14条(helper5+channel_test5+momentum
  熊市2+small_cap1+all_weather止损1),含'实例视图空→零卖出'×3策略;
  strategy 126全绿;A2属性清单已发issue#29给前后端(B2虚拟化输入)
- 注:工作树另有前后端session未提交WIP(routes_live.py B3预算),不混入本commit

[vps]
2026-08-19 22:22:42 +08:00
claude_dev f9b6d77ebd feat(live): B3预算硬限制+GET /live/budget-info——实例预算制闸门(spec§B3)——①_budget_state:剩余=QMT账户现金−Σ同账户其他实盘实例预算(不分运行/停止,停止实例持仓仍占资金);快照缺失/过期(>10min)→fresh=False+remaining=None,fail-closed不猜数②create_live落库前_enforce_budget:超限400报文带现金/已分配/剩余三数;快照不可用400(重建期QMT关闭时创建被正确拒绝)③update_live补initial_capital可编辑+校验(仅预算或账号变更触发,改名不触发;exclude自身旧值防重复计入Σ)④GET /live/budget-info(必须注册在/live/{aid}前,FastAPI路径匹配不按类型分流否则422)→{account_cash,allocated,remaining,fresh,snapshot_at}供前端默认值+占用率条⑤存量不追溯(仅新建/修改走校验);+14预算测试,旧测试fixture补快照播种(test_portfolio_live/test_instance_binding,B3后create新契约);api+data_platform 273绿 [vps] 2026-08-19 22:21:10 +08:00
claude_dev e68c497f40 feat(live): B1全局账户监视器+qmt_account_snapshot快照表——预算制地基(多策略共享账户spec§B1)——①supervisor内daemon线程AccountMonitor:专属probe连接(session id=880811 int,远离bullet_trade的time*1000量级)60s查QMT资金+持仓,upsert单行全局快照(account主键,不挂实例,positions JSON)②账户来源三并集=sticky快照行(实例删光仍记得账号+mini_path,重建期校验不断供)<live_accounts行<config watch_accounts/env③断连自愈:asset None→关旧连接下轮重建,失败日志节流(首败WARN+每30败心跳)④零实盘实例也运行;xtquant缺失(NAS/Mac)warning后空转不炸supervisor⑤get_fresh_account_snapshot(10min过期→None)供B3预算校验fail-closed;+12测试(假xtquant注入,union/断连重建/sticky路径/过期判定);策略session在途A1修改(strategies/*+test_instance_view_isolation)不属本commit [vps] 2026-08-19 22:15:40 +08:00
claude_dev 1d4bdb206e docs(design): 多策略共享账户×实例预算制定稿spec——A策略session契约(卖出只卖自己+context属性清单+联调) B前后端实施(账户监视器/全局快照/定寸虚拟化/预算硬限制+默认剩余值/前端三层/对账恒等式/清理) C全删重建runbook(用户定:删全部+明开盘清仓+部署后再重建,顺序硬约束) D远期触发式;业界调研背书见memory multi-strategy-shared-account-plan [nas]
CI/CD / test (push) Successful in 17s
CI/CD / nas-deploy (push) Successful in 44s
CI/CD / nas-verify (push) Successful in 18s
2026-08-19 21:53:36 +08:00
claude_dev dae56e29aa fix(live): instance虚拟账本+成交归因+实盘日志黑洞——共享QMT账户三害根治第一步 [vps]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 34s
CI/CD / nas-verify (push) Successful in 11s
2026-08-19盘后QMT实锤:①互卖当日真实发生(518880两个实例各卖183700、
600036两实例各卖42900)②买入sizing被全账户污染(channel_test实盘买
183700股@9.12≈168万=全账户995万/6,影子才16.8万=100万/6)③QMT委托带
remark=bt:live_strateg:<hash>实例指纹(归因可交叉验证)。

①live_instance_ledger(新模块):每live实例一份虚拟子账本(现金=初始−Σ买
−Σ费+Σ卖,持仓+移动加权成本+T+1当日买入锁定,线程安全锁),由**本实例
真实成交**驱动——engine.get_trades()按order_id∈engine.get_orders()归因
(引擎_broker_order_index已映射回本实例id空间),别家实例/手动单不进账;
卖超账面/无账面卖出如实留痕不崩;restore_from_trades重启恢复。
②runner_live:_sync_trades旧轮询(写不进live_trades的坏件)替换为归因
落库(方向取自订单is_buy);快照落库从context.portfolio全账户改**实例视图**
(positions=账本持仓T+1冻结;balance=虚拟现金+市值,现价取全账户快照/退
加权成本)——治8实例同写一份全账户持仓+收益率=全账户/初始资金无意义;
balance节流:有成交立即写否则≥5分钟(治1440行/天/实例量偏大遗留)。
③通道注入:BrokerFacade.get_instance_positions字段+live_strategy._setup
读get_active()注入positions_view(策略session消费,getattr兜底回退
context.portfolio;回测/单测无账本=保持None)。
④实盘引擎日志黑洞根治:supervisor子进程stdout/stderr落logs/live_{aid}.log
(>5MB截断+spawn标记,对齐影子#88同款修法;8-17起实盘委托/成交零留存)。
+15测试(算术/归因过滤/幂等/快照实例视图/通道注入/日志重定向);
portfolio+live+shadow 400绿。
2026-08-19 18:39:13 +08:00
claude_dev 78d35baae5 fix(provider): SanguoMiniQmtProvider四缺口根治——实盘/影子momentum/small_cap共4账户8-18/8-19空转两日——①get_closes_panel(+_ex)委托本地dbbardata(与回测LocalUnifiedProvider同源同口径;base与xtdata SDK均无此方法,bullet_trade回退链终断AttributeError,momentum牛熊/small_cap动量瘫)②get_fundamentals_df补fields契约(keep=code+请求列,对齐unified;原small_cap fields=[market_cap,eps]直接TypeError)+_ex别名③get_constituent_ex(+get_index_stocks覆盖)委托constituent_unified并集(历史日期口径,治前视;表缺指数WARNING回退base最新成份,宁可降级不空转=本次事故教训)④config的db_path/data_dir透传统一provider,VPS缺省走生产库;+10测试(复刻VPS AttributeError实锤+回退路径);962绿;VPS实库冒烟panel新鲜到08-18/000985=5128只(前后端session巡检实锤清单全闭环) [vps]
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 32s
CI/CD / nas-verify (push) Successful in 14s
2026-08-19 10:59:48 +08:00
claude_dev e522cab9a4 fix(strategy): 数据取数失败≠策略信号——momentum假熊市清仓根治+small_cap同型误判纠正 [vps]
CI/CD / test (push) Successful in 16s
CI/CD / nas-deploy (push) Successful in 32s
CI/CD / nas-verify (push) Successful in 15s
前后端session 2026-08-19巡检实锤(VPS shadow_47/48,8-18/8-19连续两日09:30):
momentum _cal_buy_sign 取数失败被静默当成熊市信号,handle_data if not buy_sign 全部
清仓;有持仓时任何一次数据抖动=全仓卖出。

①momentum/_ex: _cal_buy_sign→Optional[bool](取数异常/空panel→None,handle_data
  据此跳过当日调仓保持仓);_cal_rps/_select_stocks/_stock_pool 吞异常改上抛,牛市
  计算段统一捕获→跳过当日(不清仓);False只留给真实数据算出的熊市,空index_list
  维持False(确定性配置态)
②small_cap/_ex(新发现,前后端记忆判'语义安全'系误判——8-18无交易只因空仓):
  _pick_stocks任一取数失败→[]→_rebalance空名单分支全清仓,与momentum同型事故;
  改三态:None=数据失败跳过本次调仓(持仓不动),[]=合法空名单仍清仓(原策略语义),
  list=正常目标;_stock_pool/_cal_momentum_score同步Optional化
③+7回归测试(取数失败零下单保持仓×4/直查None×2/合法空仍清仓守卫);portfolio 324绿,
  全量889绿(4失败=Mac缺bullet_trade/vnpy环境性import,与本次无关)
2026-08-19 10:45:06 +08:00
claude_dev c9a3b0eb4f fix(shadow): 影子账本接通引擎账户同步+净值as_of+重启恢复三连修 [vps]
CI/CD / test (push) Successful in 14s
CI/CD / nas-deploy (push) Successful in 39s
CI/CD / nas-verify (push) Successful in 14s
三日体检(2026-08-19)实锤三 bug,影子账户第1天后永久卡死:
①账本断连:supports_account_sync=False→引擎context.portfolio永远停在
初始100万/0持仓→8-19轮换零卖出+买单六连拒资金不足(账上真剩15.6万);
修=sync_account按_apply_account_snapshot契约推{cash,total,positions
[closeable_amount=T+1 held-今日买]}(引擎60s拉一次,策略从此看得见真实账本)
②净值断供(#88回归):get_account_info无as_of键→_should_write_balance恒
False→paper_daily_balance影子一行不写=前端模拟盘无收益率直接原因;
修=有持仓或有成交→as_of=今天,空账户→''不写垃圾行
③重启失忆:账本全内存,重启重置1M/0持仓与已落库成交断层;
修=restore_from_trades逐笔重放(cash=initial-Σ买-Σ费+Σ卖/持仓加权成本/
当日买入补T+1锁)+runner经_hist_trades_for_restore(list_trades)接线

+4回归(sync契约与T1两日/asof三态/重放手算基准996683/offset→side映射);
833绿 [vps]
2026-08-19 10:27:58 +08:00
claude_dev 18a9c8d1a1 fix(portfolio): 实盘/影子引擎重启后定时任务全丢根治——process_initialize+facade注入run_daily [vps]
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 31s
CI/CD / nas-verify (push) Successful in 14s
P0 根因(2026-08-17 VPS 16 引擎空转零成交事故):bullet_trade LiveEngine 重启时
恢复 g(live_state.json/g.pkl)则跳过 initialize 走断点续跑,持久化旧任务按
module+func 反射恢复,而我们的任务是策略实例 bound method,恢复必失败
('无法恢复调度任务')→进程活着、分钟心跳正常、调度任务列表为空,开盘零成交零日志
(shadow_43/47/49 日志三段实锤:首启'已注册定时任务'→重启'无法恢复'→末代零任务)。
修法:live_strategy 加 process_initialize(引擎每次进程启动必调,resume 含),
装配抽 _setup 幂等(每进程一次);+3 回归测试(resume 只调 process_initialize
仍注册/双钩子不重复/facade 注入)。

P1 顺带根治:BrokerFacade 补注入 bullet_trade 顶层 run_daily/run_monthly——
此前 live facade 缺注入,策略自身 initialize 里的 b.run_daily 全部静默 no-op
(channel_test 无 _register_schedule 分支,4 账户连首启都不可能开仓);注入后
定时注册回归策略自身 initialize 单一事实源,_setup 不再调 _register_schedule
代注册(回测路径不变,runner_backtest._register_schedule 保留并补
ChannelTestStrategy 自注册分支消误导告警)。

829 测试绿
2026-08-17 11:52:26 +08:00
claude_dev d2364a36c5 refactor(provider): TET Phase3老接口内部委托Fetcher——①四老方法(get_price/get_closes_panel/get_index_stocks/get_fundamentals_df)旧体删除,改调同款Fetcher(与_ex两张皮,strict契约自此对老接口生效:非法frequency/fq/count/日期/空列表→ValueError,查询失败raise;Phase2副本对照4/4语义等值已验issue#19)②qfq因子二次读库归一:_build_qfq_factor/_apply_qfq_batch拆为_read_qfq_rows+_qfq_factor_from_rows与_read_qfq_events+_apply_qfq_events(IO/纯计算),因子读全挪进extract_data,transform零IO③all_weather四处get_fundamentals_df(choice)补空守卫(空候选集=调用方业务态)④3个宽松断言回归测试改strict(1m频率/空stocks/空symbols);938绿 [vps]
CI/CD / test (push) Successful in 14s
CI/CD / nas-deploy (push) Successful in 33s
CI/CD / nas-verify (push) Successful in 17s
2026-08-17 09:12:47 +08:00
claude_dev 5211d5a6ed fix(reconcile+ci): 双轨配对按instance_id精确配对+部署API等待帽10→20分钟——①配对v2:v1按策略名dict收敛,同策略多live(live#10/#11都是channel_test)后者覆盖前者→live#10漏配live#11双配,15:10日终对账配错对(VPS 8对舰队实测:live#11↔shadow#44/45两行,live#10无);修为instance_id+周期精确优先→同实例退而求其次→无instance回退策略名唯一/周期一致,宁缺毋错;+2回归测试(复刻VPS实况/同实例不同周期)②vps-deploy API监听等待60→120次(run681实录:19常驻进程负载下API启动>10分钟,workflow 10分钟帽误杀放弃,API最终正常起服——但跳过了常驻重启/tag/关issue三步);938绿 [vps]
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 24s
CI/CD / nas-verify (push) Successful in 8s
2026-08-16 22:45:42 +08:00
claude_dev 6ecdaab959 feat(front+api): #79+#94+#95验收三连——#79:策略库卡片收益格移除(用户'回测·最新10.44%没啥用',回测数字口径易误导,收益看各列表/全景;latestRet/retInfoOf孤儿函数随删,pct/retClass巡检仍在);#94:实盘列表标的列接poolLabel(all→全市场)+实例列建instanceNames映射显实例名(原绑row.instance但后端list_lives从未填恒'—',对齐模拟盘#71口径,兜底实例#id);#95:标的池默认值统一改all全市场——前端三表单(paper/live/PortfolioBacktest poolForm)+后端四处默认(routes_live setdefault/routes_portfolio Field/routes_paper/orchestrator runner)同步对齐防口径分裂,标签'全市场(慢,非MVP)'简化'全市场';936绿+build绿 [vps]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 25s
CI/CD / nas-verify (push) Successful in 10s
2026-08-16 22:29:29 +08:00
claude_dev 17c51c44c7 feat(frontend): 策略库默认焦点=上次浏览的策略——用户2026-08-16:进策略库默认落个股第一个不对,应组合优先且最好记住上次;onMounted选焦点改三级:localStorage上次浏览(strategy.lastFile,文件还在列表才有效)→组合组第一个→第一个兜底;selectFile写入记录(隐私模式写失败忽略);build绿(vue-tsc) [nas]
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 28s
CI/CD / nas-verify (push) Successful in 10s
2026-08-16 21:56:52 +08:00
claude_dev 9f834d7662 fix(frontend): #91+#92+#93验收三连修——#91:实例编辑保存变新建(onSave无论编辑/新建都POST=建新重复实例;改带editId走PUT /strategy/instances/{id},payload补type按所选文件判定防PUT全量替换把组合实例改写cta;成功提示清(mock)残留文案)+卡片标的行整体移除(#86a实例不承载标的,存量all显示误导);#92:标的池显示统一——constants/strategy.ts新增POOL_LABELS+poolLabel(all→全市场/hs300_subset→HS300子集/ZZ500→中证500等),任务列表标的列+模拟盘列表symbolsShort全走映射(股票代码原样);#93:新建模拟盘加名字只读预览(对齐实盘:选实例后显{实例名}_v{YYYYMMDD}{minor},未选显占位提示);build绿(vue-tsc) [nas]
CI/CD / test (push) Successful in 19s
CI/CD / nas-deploy (push) Successful in 33s
CI/CD / nas-verify (push) Successful in 10s
2026-08-16 19:56:40 +08:00
claude_dev 0d95de2fc2 fix(ci): 僵尸端口守卫ZPID提取行加||true兜底——run674实录:/end干净杀掉后端口已空,grep无匹配+set -e -o pipefail把整步炸在提取行,死在schtasks /run前→API停在半路(已手动/run救回);守卫逻辑不变,仅容忍空结果 [nas]
CI/CD / test (push) Successful in 12s
CI/CD / nas-deploy (push) Successful in 26s
CI/CD / nas-verify (push) Successful in 11s
2026-08-16 19:21:42 +08:00
claude_dev d8d646fcd5 fix(#89+#90防线): 组合回测选实例不再预填标的池+vps-deploy僵尸API端口守卫——#89:prefillFromInstance删symbol_or_pool→form.pool预填(#86a定稿实例不选标的,老实例存的all不该悄悄改用户池选择;策略/max_pool/benchmark参数预填保留);#90防复发:API重启步在/end后netstat查8000持有PID强杀+端口未释放硬fail(2026-08-16实录uvicorn reload孤儿子进程17836跨两轮部署占端口,新实例静默抢不到,旧代码继续serve→500旧bug重现,人工taskkill+重拉后同请求200+task_id实证);build绿+yaml解析过 [nas]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 31s
CI/CD / nas-verify (push) Successful in 15s
2026-08-16 19:08:26 +08:00
claude_dev 3f6b681d0f fix(shadow): 多账户worker不抢全局solo锁——根因实锤:__main__对--account N也走~/.sanguo_shadow_desk.lock全局锁,全机只放行一个影子worker(谁先抢到谁活),supervisor多账户并存时其余全部'锁占用'rc=0优雅退出→每60s重拉秒退循环;VPS实录40/41反复退出+42抢到锁独活(shadow_41.log一击定位);单账户时代从未暴露,2026-08-16用户建三影子账户即炸。修:--account分支跳过全局锁直进run_shadow(同账户防重复由bullet_trade runtime/shadow_{aid}实例锁+supervisor children表兜底);solo模式(无--account)维持全局锁防双开;+3路由测试(account跳锁/solo持锁/auto不碰柜台);936绿 [vps]
CI/CD / test (push) Successful in 8s
CI/CD / nas-deploy (push) Successful in 25s
CI/CD / nas-verify (push) Successful in 13s
2026-08-16 18:51:07 +08:00
claude_dev 9bb4bda8a4 refactor(frontend): #86a实例不再选标的——用户定稿「实例不选标的,创建模拟/实盘时再定」:实例表单删「标的/池」整卡(POOL_OPTIONS/isPortfolio随删),symbol_or_pool不再必填展示;策略库卡片标的空显'—(发起时定)';发起表单本就有可编辑标的输入(实例值仅作预填兜底,新实例空→默认600000/池默认),发起时输入即权威(后端paper create本就用表单值,无覆盖雷);老实例已存值不受影响继续预填;build绿(vue-tsc) [nas]
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 25s
CI/CD / nas-verify (push) Successful in 11s
2026-08-16 18:40:53 +08:00
claude_dev 886438fc92 fix(vps验收五问题之四): ①#84个股回测/回放提交秒败——L2校验end>latest且end<=today(周末/节假日/当日未灌)不再400,引擎区间过滤自然截到latest;新增start>latest仍400(必空跑);VPS实况=结束默认今天周日>最新周五,首提即败 ②#85组合任务标的列永远000300.XSHG——worker symbol=benchmark改pool(spec透传,benchmark已在params);内存任务两处symbol回退symbol→pool→benchmark ③#42影子拉起即崩——live_strategy工厂表补4个TET副本映射(all_weather_ex等,01184c2改名后回测认得但影子/实盘runner不认,VPS shadow#42实录) ④#88影子快照刷垃圾行——_snapshot_loop每30s无条件写date=''行(40号半天97行),改_should_write_balance同日一行+空行情不写(+3测试) ⑤可观测性——supervisor子进程stdout/stderr落logs/shadow_{aid}.log(>5MB重置)+主管自身日志落logs/shadow_supervisor.log(原schtask控制台=黑洞,41/42崩因至今零线索);933绿 [vps]
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 26s
CI/CD / nas-verify (push) Successful in 11s
2026-08-16 18:28:18 +08:00
claude_dev bb934228db feat(ci): vps-deploy末步自动重启常驻进程(supervisor/影子柜台)——根因:部署只推码+重启API,常驻python进程16h跑旧代码(2026-08-15实录);vps_restart_resident.sh:盘中保护(北京工作日09:15-15:30跳过防杀撮合现场)+动态查PID(账户号会变,name=python.exe+sanguo_live supervisor/sanguo_trader.shadow两模式,免wmic自匹配)+taskkill /F /T杀树带走runner_live/shadow子进程+schtasks重拉+120s验证≥2进程;用户2026-08-16要求部署自动化 [nas]
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 31s
CI/CD / nas-verify (push) Successful in 11s
2026-08-16 18:07:02 +08:00
claude_dev bfd42f70ae feat(frontend): #80模拟盘命名对齐实盘+#81批量删除+#82实盘预览名清空——#80:autoName改{实例名}_v{YYYYMMDD}{minor}同实例同日递增不分模式(原{实例名}·{模式}v{N}连排+英文模式段,用户定稿与实盘同格式);#81:模拟盘/实盘列表加多选列(仅非运行行可选=运行中先停止)+批量删除按钮(选中才显示带数量徽标,确认框列账户名前5,循环既有DELETE接口,N成功/M失败汇总+失败明细toast);#82:新建实盘初始name live-600000改空串,未选实例时预览显示占位「—(选实例后自动生成)」(原默认值顶掉占位提示),选实例后autoName生成,服务端兜底(#78)双保险;build绿(vue-tsc) [nas]
CI/CD / test (push) Successful in 12s
CI/CD / nas-deploy (push) Successful in 34s
CI/CD / nas-verify (push) Successful in 14s
2026-08-16 13:55:49 +08:00
claude_dev 28374c341b feat(strategy): #77灯=列表入口×N徽标+#78实盘服务端兜底名——#77:策略库四状态灯点击一律进该类型列表(按实例过滤;空列表→新建页带实例),灯带×N徽标=该类型运行总数(enriched新增counts:backtest任务表/replay回放账户/paper_live实走+影子/live实盘,查询失败退化无徽标),删「回测/模拟/实盘历史」三按钮(灯即入口);#78:live/create名称空或默认值(live-600000等)→服务端兜底{实例名}_v{YYYYMMDD}{minor}同实例同日递增,前端autoName失败被吞也拿到正确名;+2回归测试(counts四桶/兜底名递增);docs补北京迁移注记;929绿+build绿 [vps]
CI/CD / test (push) Successful in 15s
CI/CD / nas-deploy (push) Successful in 33s
CI/CD / nas-verify (push) Successful in 16s
2026-08-16 13:33:49 +08:00
claude_dev 214608506a refactor(frontend): 新建实盘「实例名」表单项改只读预览(#76)——#72后名称自动生成(实例名_v日期minor)手填无意义;输入框改自动名展示(选实例即刷新,未选显示占位提示);空名提交提示改为「请先选择实例」;模拟盘表单本无名称输入项无需改 [nas]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 24s
CI/CD / nas-verify (push) Successful in 13s
2026-08-16 11:16:09 +08:00
claude_dev 424463a6ac fix(paper): 影子账户停止/恢复400——stop/resume原只放行mode=live,#10/#11影子账户点停止即400「仅实走账户支持停止」;放行live+shadow(置status=stopped后日终step与影子柜台都只选running自动跳过,语义成立);回放仍拒(一次性任务);API 128绿 [vps]
CI/CD / test (push) Successful in 14s
CI/CD / nas-deploy (push) Successful in 30s
CI/CD / nas-verify (push) Successful in 13s
2026-08-16 11:00:50 +08:00
claude_dev 0453de9321 fix(portfolio): 收益单位口径统一小数+用户验收四问题——①1044%真因:bullet_trade返回百分数字面值(10.44=10.44%),组合结果页直显(对)但档案回写/策略库按小数×100(错1044%);_extract_metrics统一÷100归一小数(注释单位契约),组合结果页fmtPct改×100(与CTA/empyrical全平台一致;历史任务NAS一次性迁移)②回测灯/回测历史'找不到结果':done无task_id(老回测)兜底跳任务中心不过滤(instance过滤对老任务为空)③实走/实盘灯'还是参数页':三级fallback——同类型在跑直达监控,实例任何在跑(如只有影子)跳列表过滤,无在跑才发起④模式列折行:宽118+日终并入单chip(实走·日终,title悬浮说明)⑤模拟盘名加版本号={实例名}·{模式}v{N}(同实例同模式递增,对齐实盘);927绿+build绿 [vps]
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-16 10:06:12 +08:00
claude_dev bab7c4d893 feat(strategy): TODO#68-#75八项全做+导航自测——#68灯职责拆分:实走/影子在跑=直达/paper/live/{aid}监控页,实盘在跑=/live/monitor/{aid},未跑=发起;回放灯done=直达/paper/result/{aid}(run_meta.replay.account_id);#69回测任务按实例过滤:backtest_stats加instance_id列(ALTER迁移)+_write_back落列+GET /task?instance=N+任务中心过滤条+策略库「回测历史」按钮;回测灯done=直达最新结果页(run_meta.backtest.task_id按前缀分流),跑过无结果=任务中心过滤;#70模拟盘创建后直接跳列表(不跳结果/监控页);列宽重排(策略/实例150模式96频率60操作250,折行实测消除);#71列内容对齐实盘:策略/实例列显示实例名(instances映射,#id退化)+持仓数列(list_papers顺带count volume>0)+删创建时间列(净值日期已含);#72实盘名自动生成={实例名}_v{YYYYMMDD}{minor}(同实例同日递增,listLives计数);模拟盘名={实例名}·{模式};#73术语统一档案→实例(全局8文件UI文案+后端409提示,精确短语防误伤,spec比喻保留文档);#74MonacoDiff v4:优先monaco原生diff(差异高亮),挂载450ms自检original栏占比<30%自动降级双只读编辑器(滚动联动)——全屏模态下大概率吃到原生diff;#75收益标签与数值同源(retInfoOf:运行ret优先含kind,fallback run_returns,标签跟随数值来源,根治影子1044%实为回测收益挂影子标签);927绿+build绿+dev浏览器自测:策略库6入口(回测历史/模拟历史/实盘历史/回测灯/实走灯直达监控/组合无回放)与模拟盘列表新列全过 [vps]
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 32s
CI/CD / nas-verify (push) Successful in 12s
2026-08-16 09:34:39 +08:00
claude_dev 8ee513a17d fix(frontend): 代码对比改全屏模态——用户反馈860px侧抽屉太小看不清;版本历史和列表快照抽屉(el-drawer)统一改el-dialog fullscreen:版本列表改横向chip条(选中高亮)省纵向空间,diff区flex撑满calc(100vh-60px);Esc/关闭即走;dev实测dialog铺满视口2560x1177,diff左右各1262x1036(原抽屉内仅~400x460,面积扩大约7倍);MonacoDiff延迟挂载保留(模态动画后全宽创建) [nas]
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 27s
CI/CD / nas-verify (push) Successful in 10s
2026-08-16 08:33:23 +08:00
claude_dev 23e1beb177 fix(frontend): 用户验收8项遗漏全补(并发中反馈漏处理对账)——①模拟/实盘改回必选档案(初始设计口径,提交拦截+必选文案)②backtest/new?class=all_weather.py&instance=1失败根治:档案类型按文件判非instance.type(老档案type不准)+组合页兼容class参数+CTA页组合档案自动重定向组合页(实测跳转+预填全通)③运行灯语义:有在跑→跳列表按档案过滤,无→创建页(用户'点带绿点按钮应看运行不该到参数页');组合档案隐藏回放按钮 ④代码编辑运行回测不好使:根因chain=dev缺GET file mock→读失败catch清code被当编辑→dirty卡死;三层修=补mock+catch走echoGrace+dirty改确认框(保存并跳/直接跳) ⑤模拟盘列表重设计对齐实盘(类型chip入名称行+新增策略/档案列+净值补日期) ⑥策略库去重复编辑代码按钮 ⑦模拟盘/实盘列表行加「快照」按钮→CodeSnapshotDrawer共享抽屉(发起时代码vs当前,MonacoDiff滚动联动);dev浏览器自验7项全过+927绿+build绿 [vps]
CI/CD / test (push) Successful in 16s
CI/CD / nas-deploy (push) Successful in 43s
CI/CD / nas-verify (push) Successful in 19s
2026-08-16 08:25:57 +08:00