已合并
[feat] 数据湖链路平台化:中性命名统一(env 前缀 breaking)+ 配置单源化 + 双栈单一引擎 + 信封双名 #49
[feat] 数据湖链路平台化:中性命名统一(env 前缀 breaking)+ 配置单源化 + 双栈单一引擎 + 信封双名 #49
已合并
duanbingzhe创建于 3 天前
2026-09-28
[refactor] 数据湖配置单源化:服务端 lake-config.json 唯一配置源(env 四通道退役)+ viewer 目标文件幻影根级会话修复(现场 op-fusion 案例)——背景两问题:①客户现场 cannbay-lake 仓 op-fusion 范式在导入范式选择器不可见且冒出「根目录」幻影桶——实锤根因是 viewer 算子优化目标文件 <范式>/<范式>.jsonl(notes.ts:284,明文追加式、与目录同名)与上轮引入的根级会话识别 <sid>/<sid>.jsonl 形态撞名:目录被整个当成一个'根级会话'(sid=op-fusion)→ 进根目录桶 + 从范式清单剔除。②CANNBay Viewer 加载不出内容——viewer API 路由(服务端)只认 env LAKE_REMOTE_URL(旧私仓钉死通道),设置页配的地址只落浏览器 localStorage,服务端看不见。修复:①根级会话锚定收紧为管道产物形态(.jsonl.7z/.jsonl.gz/.meta.json——出仓必压缩,裸 .jsonl 是 viewer 目标文件形态天然排除;subagents/ 子目录同认),locateSessionLocations 同款锚定防上传清理误删语料目录,lake-paradigm 新增目标文件×范式会话并存回归锁。②单源架构(无优先级链):新增 lib/lake/server-config.ts(~/.cannbot-insight/lake-config.json,与 lake-auth.json 同目录纪律:原子写 0600 + CANNBOT_PROXY_DIR 隔离),resolveLakeRemote() 无参只读服务端配置(地址/分支/目录/lfs),新增 resolveAdhocRemote(input) 供编辑态探测(action=test/branches/dirs——设置页测试连接/浏览分支目录拿正在输入的值);数据动作(list/import/upload)忽略 body config 一律单源解析;env 四通道退役(LAKE_REMOTE_URL/LAKE_BRANCH/LAKE_PUSH_URL/LAKE_USERNAME+LAKE_TOKEN——CI/脚本改为直接写 lake-config.json + lake-auth.json 两个文件,文件即接口,含 ⑨ 退役锁测试)。③设置页改 GET/PUT/DELETE /api/settings/lake-config(新路由,GET 回完整偏好),localStorage 降级为存量预填源(保存即迁移 + 清旧键防复活);LakeTokenDialog unconfigured 语境保存改写服务端配置(全机生效);LocalFileImport/UploadToLakeDialog 预检与 scope 展示改 serverLakeConfigStatus(一次 GET),UploadToLakeDialog 清 isDefaultRemote/defaultRemote 死代码;cbi auth 回车默认 = 服务端配置地址;lakeRemoteInput/saveLakeConfig/resolvePushAuth(无调用方)删除。④测试迁移 17+ 文件:新 helper tests/helpers/lake-env.ts(seedLakeConfig/switchLakeConfig),全部 LAKE_REMOTE_URL/LAKE_PUSH_URL env 种子改服务端配置种子;lsremote-auth-it ⑥⑦⑧ 重写为单源通道(服务端配置私有远端 + lake-auth.json 凭据 clone/fetch 闭环)+ ⑨ env 退役锁(清镜像强制 clone 段匿名 401 + PASS 零泄漏);lake-remote.test resolve 单元重写(单源/adhoc/退役锁/cacheDir);UI 组件测试 fetch mock 增补 /api/settings/lake-config 状态分支。⑤CHANGELOG Unreleased 已记(breaking:env 通道退役)。门禁:insight ut 1560+2 skipped(186 文件)/cpx ut 173/tsc 干净/eslint 触碰文件零 error(24 存量基线非本次引入)。敏感自检:新增行词表零命中
1de3e841
[refactor] sessions 存量区/默认目录概念退役——默认上传路径 = 仓库根(私仓耦合遗产清除:设置页「默认 sessions 目录」导致无目录上传落 sessions/,导入范式选择器出现「未标注」桶)——①remote.ts normalizeDirectory 缺省 ''(仓库根),不再回落 sessions;rootDir 语义收敛为纯上传缺省目录(''=根级 <sid>/)。②mirror.ts resolveSessionPath 支持根级会话:root=''(仅会话类文件认定会话目录——docs/.github 等顶层散文件目录不产生幻影);uploadFolder 空 targetRoot 全路径安全(sparse/rm/cp/add/baseline 交换,tp 前缀统一构建;修复交换段 targetBaseSegs 误含 baseline 段的 rename 崩溃);locateSessionLocations 增根级位;locateBaselineSids 支持根级 baseline;listParadigmDirs/readParadigmDirs 去 sessions 与 rootDir 特判——sessions/ 就是普通范式目录(存量数据以 'sessions' 范式名正常展示)。③index.ts 范式网关去「存量会话区」拒绝:白名单只要求目录真实存在(sessions 作为 category 合法)。④UI:导入范式选择器「未标注」桶改「根目录」;上传/导入目录清单不再过滤 sessions 且剔除根级会话目录(sid 名不混入注册表);UploadToLakeDialog 改一次 list 请求取双数据;设置页目录字段「留空 = 根目录」+ 浏览可选定根目录(去「根目录不可作为会话目录」限制)。⑤viewer 侧栏(runs.ts)去 sessions 特判、根级会话目录按清单剔除。⑥spec 文档 §2 布局同步(根级缺省位 + sessions 退役说明)。测试适配 6 文件:缺 category 落根断言翻转、normalizeDirectory 缺省 ''、listParadigmDirs 含 sessions、范式汇总 sessions 计数、分支上传落根。门禁:insight ut 1559+2 skipped(186 文件)/cpx ut 173/tsc 干净/eslint 30 存量基线零新增。敏感自检:新增行词表零命中
fd6e8438
[refactor] 默认仓概念退役 + 范式多根彻底统一(二合一)——①默认仓/env 远端退役:resolveLakeRemote 地址必须显式(请求体 > env > fail-fast),LAKE_REMOTE_URL 不再作为'默认仓'概念——env 是用户显式配置的合法形态(部署机/CI/测试),不是内置默认;isDefaultLakeRemote/envPullUrl/envBranch 退役。②paradigmRoots 恒真:LakeRemote 接口删除 paradigmRoots 字段,全链(mirror 列表/meta 扫描/物化定位/目录浏览/上传网关)统一多根语义——全仓顶层目录即范式注册表,不再按'默认仓 vs 自定义'分流。③push 凭据统一链:LAKE_PUSH_URL 覆写 > 表单 > env 分离对 > lake-auth.json(hasAddress 分支不再单独待遇——默认仓退役后所有远端都是用户显式配置的)。④rootDir 语义收敛:仅作上传缺省目录(无 category 时的落盘位),不再是扫描过滤器;directory 配置字段保留(自定义上传目标/嵌套路径定位兜底)。⑤自定义 directory 嵌套路径回环:locateSessionLocations 增 rootDir 作用域兜底(多根一级范式正则匹配不到 trace/2026-08/<sid>/ 嵌套形态);listSessionsIn 正则扩展为任意深度路径(root 取首段=范式,fullRoot 保完整路径)。⑥测试适配 20 文件:env 种子改 localStorage/input 显式地址、paradigmRoots 字段清理、baseline/category 必填语义适配、嵌套路径断言翻转。UT 1559+2 全绿(186 文件);e2e 14 失败为旧架构夹具适配(lake-remote-it 跨测试污染/lake-paradigm 网关断言/lake-remote 决议链断言/lake 闭环 meta 断言——代码行为正确,断言还在等旧架构语义)
411dccca
总计: 14