文件行号
internal/config/env.go L189-199(loadKeysEnvInto 后 for name, value := range env { os.Setenv(name, value) }——keys.env 全部条目注入进程环境)+ runtimeEnvLookup L169-175(仅查本地 values map——配置展开不需污染)+ 子进程继承链 internal/tool/run_command.go:886(append(os.Environ(), commandEnvOverrides...))+ L330-335(双引号 Unquote 失败无 fallback 去引号落穿至 L345 返回整串)对照 L336-338(单引号无条件 strip 正确);instance.go L643(globalSnap = deepCopyConfig)→ L646 MigrateA2AYaml → L654-656 MergeInstance(登记 instanceFields)→ L665-667 MergeA2AConfig 在快照后执行且不传 tracked map(a2a_override.go L59-102 无登记)+ L675-721(MigrateA2AYaml 迁移后不删 legacy 文件——每次 load 重新叠加);instance_delta.go L103-113(diffScalar current != "" / diffInt current != 0)+ L243-256(Port/MaxTasks/TaskTimeout 同型)对照 L162-163(diffIM enabled bool 无抑制 false 正常往返——佐证误加)+ L189-205(adapters 只收 !exists 新增);external_files.go L133-143(三处 Save 失败仅 debug.Log 吞掉);context_window.go L741(Contains(m,"glm-") && Contains(m,"v") 子串误配)
问题
案 A(High·安全):keys.env 全量 Setenv 泄入所有子进程
- 所有 vendor API key/A2A api_key 进程环境 → bash 工具把全部密钥传给任意用户命令(
env 一条命令即可导出全部明文);MCP server 默认继承——secret sprawl;注释自认是 "so subsequent lookups work" 但 lookup 走本地 map
修:删除 Setenv 循环;第三方 SDK 依赖(ANTHROPIC_API_KEY 等)按需显式传递。
案 B(Med-High·跨工作区污染):legacy a2a.yaml 双向污染
- 工作区 a2a.yaml 设 port: 7777 → 不登记 instanceFields → Save() 不剥 a2a 段 → 7777 deep-merge 进全局 ggcode.yaml 所有工作区继承;SaveInstance 的 diffA2A 又把 legacy 值写进 instance 文件(双处重复定义);legacy 文件不删永不收敛
修:MergeA2AConfig 传入 tracked map 登记;迁移成功后删 legacy。
案 C(Med):instance scope 清零/清空改动永久无效
- max_iterations 曾设 80 → 清零:diffInt 抑制丢弃 + SaveInstance deep-merge 旧值残留 + Save() 因登记剥离全局 → 重载后 80 填回,清零无任何报错;delta 是 map 本不需要零值抑制(im.enabled 对照佐证)
修:去掉 scalar/int/timeout 的零值抑制。
案 D(Med):双引号 Unquote 失败连引号保留成凭据
- shell rc 中
MY_KEY="a\qb"(Windows 路径/正则)→ 返回带引号整串 → 认证静默失败——单引号分支有正确 strip 双引号没有
修:Unquote 失败 fallback 剥首尾引号取内部原文。
案 E(Med+Low-Med×2+Low)
- external_files 保存失败吞 err——Save() 假成功重启丢配置;已有 adapter 的 instance 级修改不入 delta(只收新增,还可能漏进全局 im.yaml);glm+任意 'v'(preview)误报 vision——表外新模型被发图 API 拒绝
修:保存失败上抛;adapters 深比较;vision 启发式收紧。
干净项
context_window:窗口查找链/k-m 边界/溢出(不可达)全对。env:${VAR:-default} bash 语义正确(#1515 案 D 相关面核验在位)/无递归死循环。instance:#731/#524/#609/#368/#734/#282 各修复在位。instance_delta:diffVendors map 序比较/diffSlice null 守卫正确。
排除
#1515/#1517 config 族(env.go parseEnvAssignment 引号往返翻案记录/instance.go LoadA2AOverride 调用点引述——本体全文深读为新一轮);#1160/#981 在位。
严重程度
High(安全)+ Med-High + Med×3 + Low-Med×2 + Low
独立复核确认:7/7 全部原文核对+调用链穷尽(run_command.go:886 继承实证/globalSnap 时序/deep-merge 残留链/单双引号对照/bool 无抑制佐证/子串误配限表外名)。
文件行号
internal/config/env.goL189-199(loadKeysEnvInto 后for name, value := range env { os.Setenv(name, value) }——keys.env 全部条目注入进程环境)+ runtimeEnvLookup L169-175(仅查本地 values map——配置展开不需污染)+ 子进程继承链 internal/tool/run_command.go:886(append(os.Environ(), commandEnvOverrides...))+ L330-335(双引号 Unquote 失败无 fallback 去引号落穿至 L345 返回整串)对照 L336-338(单引号无条件 strip 正确);instance.go L643(globalSnap = deepCopyConfig)→ L646 MigrateA2AYaml → L654-656 MergeInstance(登记 instanceFields)→ L665-667 MergeA2AConfig 在快照后执行且不传 tracked map(a2a_override.go L59-102 无登记)+ L675-721(MigrateA2AYaml 迁移后不删 legacy 文件——每次 load 重新叠加);instance_delta.go L103-113(diffScalarcurrent != ""/ diffIntcurrent != 0)+ L243-256(Port/MaxTasks/TaskTimeout 同型)对照 L162-163(diffIM enabled bool 无抑制 false 正常往返——佐证误加)+ L189-205(adapters 只收!exists新增);external_files.go L133-143(三处 Save 失败仅 debug.Log 吞掉);context_window.go L741(Contains(m,"glm-") && Contains(m,"v")子串误配)问题
案 A(High·安全):keys.env 全量 Setenv 泄入所有子进程
env一条命令即可导出全部明文);MCP server 默认继承——secret sprawl;注释自认是 "so subsequent lookups work" 但 lookup 走本地 map修:删除 Setenv 循环;第三方 SDK 依赖(ANTHROPIC_API_KEY 等)按需显式传递。
案 B(Med-High·跨工作区污染):legacy a2a.yaml 双向污染
修:MergeA2AConfig 传入 tracked map 登记;迁移成功后删 legacy。
案 C(Med):instance scope 清零/清空改动永久无效
修:去掉 scalar/int/timeout 的零值抑制。
案 D(Med):双引号 Unquote 失败连引号保留成凭据
MY_KEY="a\qb"(Windows 路径/正则)→ 返回带引号整串 → 认证静默失败——单引号分支有正确 strip 双引号没有修:Unquote 失败 fallback 剥首尾引号取内部原文。
案 E(Med+Low-Med×2+Low)
修:保存失败上抛;adapters 深比较;vision 启发式收紧。
干净项
context_window:窗口查找链/k-m 边界/溢出(不可达)全对。env:${VAR:-default} bash 语义正确(#1515 案 D 相关面核验在位)/无递归死循环。instance:#731/#524/#609/#368/#734/#282 各修复在位。instance_delta:diffVendors map 序比较/diffSlice null 守卫正确。
排除
#1515/#1517 config 族(env.go parseEnvAssignment 引号往返翻案记录/instance.go LoadA2AOverride 调用点引述——本体全文深读为新一轮);#1160/#981 在位。
严重程度
High(安全)+ Med-High + Med×3 + Low-Med×2 + Low
独立复核确认:7/7 全部原文核对+调用链穷尽(run_command.go:886 继承实证/globalSnap 时序/deep-merge 残留链/单双引号对照/bool 无抑制佐证/子串误配限表外名)。