Skip to content

fix(#21-#24) 多方案-sol-c:全面修复 4 个 issue - #27

Closed
Nicholas023 wants to merge 4 commits into
mainfrom
sol-c
Closed

Nicholas023 wants to merge 4 commits into
mainfrom
sol-c

Conversation

@Nicholas023

Copy link
Copy Markdown
Owner

方案 sol-c:全面修复 #21 / #22 / #23 / #24

各 issue 修复要点

#21 评审模型解析静默失败(src/model-provider.js:62-73)

  • loadProfileLlmConfig() 的 catch 分支补 console.error,输出真实错误原因(依赖损坏/缺包/版本不兼容),保持 return null 语义不抛——switch-model-e2e 的 check('解析出端点', !!ep) + ep?.keyEnv ?? '' 安全链与运行态降级链不受影响(e2e-switch 实测端点解析正常通过)。

#22 e2e/自检脚本无 key 误报失败

  • scripts/engine-e2e-smoke.mjs:118-124:key 缺失(undefined)时短路跳过引擎调用,check 输出「跳过引擎调用(key 缺失)」——不再把 undefined 塞进 OCR_LLM_TOKEN 空等 180s。
  • scripts/sensitive-e2e-smoke.mjs:105-126:报告类断言在报告缺失时显式记 FAIL 并归因(「报告缺失——评审未产出报告」),engine-output-leak 断言从 candidates 嵌套中提出,评审失败/输出为空时也独立判定,杜绝静默假绿。

#23 权限声明缺安全校验承诺(dsh-plugin.json + src/set-config-tool.js)——深度方案(声明 + 码级校验双落地)

  • dsh-plugin.json :19 fs.write scope 补承诺:写入目标解析为绝对路径、位于用户 home 下、realpath 解析符号链接后无目录遍历逃逸。
  • dsh-plugin.json :24 process.spawn scope 补承诺:engine_bin 写入前校验绝对路径、文件存在、非符号链接、非 setuid 位。
  • dsh-plugin.json :30 credentials.read reason 补承诺:凭据仅用于 API 调用,绝不写入日志或评审报告。
  • src/set-config-tool.js 码级实现:report_dir 新增写前校验(展开 ~ → 绝对路径 → home 前缀(Windows 大小写归一)→ 已存在段 realpath + 未创建段逐级祖先解析,防目录遍历逃逸);engine_bin 补 lstatSync 非符号链接、非 setuid(POSIX)校验;两者均沿用「部分拒绝」语义(只剔除非法字段,其余照写,原因进回显)。

#24 敏感名单残留 4 处(src/sensitive-list.js)

  • token 正则加词边界 (?=[._-]|$):tokenizer-decoder.yml / tokenization.js 不再误收。
  • markdown 路径清洗字符类补 ~ # &(防文件名注入报告格式)。
  • 归一重叠:删除 credentials[^/]*$(由 (secrets?|credentials?) 独立词段规则覆盖,且修掉 credentialstore 误收);.xxxsecret 行加尾锚 ([.-/]|$) 与词段规则分工,.secretive 不再误收。
  • secrets/credentials 词段锚定对齐 .env 模式(词段 + 可选扩展名 + 行尾/目录)。
  • 单元断言(unit-smoke:162-215)与 e2e-sensitive 确定性前验(README.md/.env/src/app.js/deploy/credentials.json → .env,deploy/credentials.json)全部保持通过。

门禁测试结果

门禁 结果 说明
npm run check exit 0 19 个文件 node --check 全过
npm run unit exit 0 unit-smoke + file-config-smoke 16 项全过
npm run selfcheck exit 0 cordis-entry/client-bundle/unit/file-config/task-api 全过
npm run e2e-engine exit 1(预期失败形态) 本机有 key:stub 引擎下明确失败;无 key 场景实测「跳过引擎调用(key 缺失)」秒级结束,无挂死
npm run e2e-sensitive 全过 报告点名/内容不送审/泄露断言全绿
npm run e2e-switch exit 1(预期失败形态) 端点解析通过(#21 契约验证),Ollama 端点无 key + 无真实引擎 → 明确失败归因,无挂死

关键取舍

@Nicholas023

Copy link
Copy Markdown
Owner Author

整合 PR #29 已吸收本方案精华并合并(lead 实测比对后取舍)。本 PR 关闭存档,diff 仍可通过本页查看。

@Nicholas023
Nicholas023 deleted the sol-c branch October 20, 2026 07:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant