Bug Description
在 acp.jsonc 里配置 qualityGate.algorithms.<算法名> 的各层参数时,启动会弹出 ACP: config warning — Unknown keys 警告,但该配置实际是合法且生效的。
配置写法:
{
"qualityGate": {
"enabled": true,
"algorithm": "rouge-recall-v1",
"algorithms": {
"rouge-recall-v1": {
"layer1MinChars": 200,
"layer1MinRetentionPct": 2.5,
"layer2MaxRougeF1": 0.05,
"layer2MaxTop20Recall": 0.20
}
}
}
}
被误报的未知键共 5 个:
qualityGate.algorithms.rouge-recall-v1
qualityGate.algorithms.rouge-recall-v1.layer1MinChars
qualityGate.algorithms.rouge-recall-v1.layer1MinRetentionPct
qualityGate.algorithms.rouge-recall-v1.layer2MaxRougeF1
qualityGate.algorithms.rouge-recall-v1.layer2MaxTop20Recall
根因与 #262 完全同类:lib/config-validation.ts 的校验器 getConfigKeyPaths 会递归展开用户配置的每一层键,再和白名单 VALID_CONFIG_KEYS 比对。但白名单里 qualityGate 相关只到 qualityGate、qualityGate.enabled、qualityGate.algorithm、qualityGate.algorithms 四层,没有(也无法预先枚举)qualityGate.algorithms.<算法名> 这种动态键。
qualityGate.algorithms 本质是"按算法名索引的动态键映射"(schema 中也定义为 additionalProperties: true)。校验器对同类的 compress.modelMaxLimits / compress.modelMinLimits / messageFilters.filters 已做"命中即停止递归"的跳过,却漏了给 qualityGate.algorithms 加同样处理(#262 修复时同样漏掉了这个键,见 master 分支最新源码)。
附带确认:配置本身正确且生效——(qg.algorithms && qg.algorithms[algoName]) ?? {} 会读取该映射传入质量门评估,layer1MinRetentionPct 等参数确实在起作用。
Expected Behavior
按算法名配置质量门参数是合法配置,不应触发 Unknown keys 警告。期望:
getConfigKeyPaths 对 qualityGate.algorithms 增加动态键跳过(参照现有 compress.modelMaxLimits / compress.modelMinLimits / messageFilters.filters 的处理),使 qualityGate.algorithms.* 下任意算法名及其参数键都视为合法。
- (可选)顺带核对
dcp.schema.json 与运行时校验器的一致性——目前 schema 中 qualityGate.algorithms.rouge-recall-v1.layer1MinRetentionPct 的默认值写的是 1.0,与代码中的默认 5 不一致。
Debug Context Logs
此为配置校验期的 bug,与上下文剪枝 / compress 运行时无关,context 日志无对应记录。复现只需在 acp.jsonc 写入上面的配置并重启 opencode,即会弹出警告 toast。触发警告的代码路径:showConfigWarnings → getInvalidConfigKeys → getConfigKeyPaths / VALID_CONFIG_KEYS(lib/config-validation.ts)。
{ "note": "配置校验期问题,无 context 运行时日志。复现步骤见上。" }
Tool Call Details
不涉及工具调用。纯配置文件加载校验问题。
DCP Version
1.14.22
Opencode Version
1.18.19
Model
Other (deepseek-v4-flash)
Additional Context
本 issue 是 #262 的同类遗漏:修 #262 时只给 messageFilters.filters 加了递归跳过,qualityGate.algorithms 仍是漏网之鱼。我拉取 master 分支最新 lib/config-validation.ts 确认,跳过名单目前为:
if (
fullKey === "compress.modelMaxLimits" ||
fullKey === "compress.modelMinLimits" ||
fullKey === "messageFilters.filters"
) {
continue
}
qualityGate.algorithms 依然不在其中,即该误报在当前 master 与 npm latest(1.14.22)均存在。
该警告本身无害(showConfigWarnings 只弹一个 toast,无 return / throw,不影响配置加载),配置仍正确生效。仅为提示层面的误报。
Bug Description
在
acp.jsonc里配置qualityGate.algorithms.<算法名>的各层参数时,启动会弹出ACP: config warning — Unknown keys警告,但该配置实际是合法且生效的。配置写法:
{ "qualityGate": { "enabled": true, "algorithm": "rouge-recall-v1", "algorithms": { "rouge-recall-v1": { "layer1MinChars": 200, "layer1MinRetentionPct": 2.5, "layer2MaxRougeF1": 0.05, "layer2MaxTop20Recall": 0.20 } } } }被误报的未知键共 5 个:
根因与 #262 完全同类:
lib/config-validation.ts的校验器getConfigKeyPaths会递归展开用户配置的每一层键,再和白名单VALID_CONFIG_KEYS比对。但白名单里 qualityGate 相关只到qualityGate、qualityGate.enabled、qualityGate.algorithm、qualityGate.algorithms四层,没有(也无法预先枚举)qualityGate.algorithms.<算法名>这种动态键。qualityGate.algorithms本质是"按算法名索引的动态键映射"(schema 中也定义为additionalProperties: true)。校验器对同类的compress.modelMaxLimits/compress.modelMinLimits/messageFilters.filters已做"命中即停止递归"的跳过,却漏了给qualityGate.algorithms加同样处理(#262 修复时同样漏掉了这个键,见 master 分支最新源码)。附带确认:配置本身正确且生效——
(qg.algorithms && qg.algorithms[algoName]) ?? {}会读取该映射传入质量门评估,layer1MinRetentionPct等参数确实在起作用。Expected Behavior
按算法名配置质量门参数是合法配置,不应触发 Unknown keys 警告。期望:
getConfigKeyPaths对qualityGate.algorithms增加动态键跳过(参照现有compress.modelMaxLimits/compress.modelMinLimits/messageFilters.filters的处理),使qualityGate.algorithms.*下任意算法名及其参数键都视为合法。dcp.schema.json与运行时校验器的一致性——目前 schema 中qualityGate.algorithms.rouge-recall-v1.layer1MinRetentionPct的默认值写的是 1.0,与代码中的默认 5 不一致。Debug Context Logs
Tool Call Details
不涉及工具调用。纯配置文件加载校验问题。
DCP Version
1.14.22
Opencode Version
1.18.19
Model
Other (deepseek-v4-flash)
Additional Context
本 issue 是 #262 的同类遗漏:修 #262 时只给
messageFilters.filters加了递归跳过,qualityGate.algorithms仍是漏网之鱼。我拉取 master 分支最新lib/config-validation.ts确认,跳过名单目前为:qualityGate.algorithms依然不在其中,即该误报在当前 master 与 npm latest(1.14.22)均存在。该警告本身无害(
showConfigWarnings只弹一个 toast,无 return / throw,不影响配置加载),配置仍正确生效。仅为提示层面的误报。