Skip to content

fix(#21-#24) 整合方案:四路精华合一(含 sol-a/b 假承诺修正) - #29

Merged
Nicholas023 merged 4 commits into
mainfrom
fix-issue-21-24-merged
Oct 20, 2026
Merged

Nicholas023 merged 4 commits into
mainfrom
fix-issue-21-24-merged

Conversation

@Nicholas023

Copy link
Copy Markdown
Owner

整合方案 PR:4 路分治(#25/#26/#27/#28)精华合一 + 假承诺修正

依据 多方案取舍对比-20261020.md(lead 实测 4 份 diff + worktree 源码核验),用户已拍板:A1 home-only / B1 lstat 严格拒绝 / C1 铅模式整合。

来源与集成

Issue 采用方案 理由
#21 sol-a 版 四路同质,sol-a 注释最完整(诊断输出 + return null 契约不变)
#22a engine-e2e sol-d 版 + key≥8 判据 skipped 独立计数最完善;key 长度判据与顶部「可解析」口径统一(<8 视为缺失)
#22b sensitive-e2e sol-c 版 报告缺失逐条 FAIL 归因,杜绝假绿
#23 sol-c 版 + setgid 补充 lstat 拒绝符号链接 + setuid/setgid(0o6000);report_dir home-only 校验;字段级剔除语义
#24 sol-b 版 secret/token 独立词段收窄(防误报)+ 保留 credentials 行与 .npmrc/.netrc/.git-credentials 补充行

关键修正(sol-a/sol-b 缺陷)

  • sol-a/sol-b 的 dsh-plugin.json 声明「engine_bin 非符号链接、非 setuid」,但 set-config-tool.js 未实现 lstat/setuid 校验(假承诺,实测两棵 worktree 源码确认)。
  • 整合版已实现:isAbsolute + lstatSync 拒绝符号链接 + mode & 0o6000 拒绝 setuid/setgid,声明与实现逐字对齐。

门禁

项 结果
npm run check exit 0
npm run unit exit 0(unit 56 + file-config 16)
npm run selfcheck exit 0(cordis/client/unit/file-config/task-api)
e2e-engine 2s 自然结束:唯一失败=引擎二进制缺失(预期环境形态);key 解析成功(35字符)→ 正常执行链
e2e-sensitive 3s 自然结束:4 项失败全为「报告未落盘」显式归因(#22b 目标形态);点名断言 .env/credentials.json 命中、README/app.js 不命中 ✓
e2e-switch 2s 自然结束:端点解析 ✓(#21 契约未破坏);失败=引擎 ENOENT(预期)

已知边界

  • key 缺失短路分支(key<8)本机有 key 无法实测,逻辑与 sol-d 在其假 home 已验证版一致(仅判据 0→8)
  • report_dir 限 home 下(A1 拍板):home 外盘位配置会被字段级拒绝并回显原因
  • engine_bin 拒绝符号链接(B1 拍板):Windows 场景符号链接极少,误拒风险可忽略

保留备查

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