|
| 1 | +--- |
| 2 | +{ |
| 3 | + "schema": "shadow-dev/v1", |
| 4 | + "name": "20260918-fix-installer-ci-cmd-assert", |
| 5 | + "type": "fix", |
| 6 | + "scope": null, |
| 7 | + "status": "branched", |
| 8 | + "baseBranch": "main", |
| 9 | + "branch": "fix/20260918-fix-installer-ci-cmd-assert", |
| 10 | + "files": [], |
| 11 | + "github": { |
| 12 | + "repository": "stack-wuh/shadow-dev-cli", |
| 13 | + "issue": 22, |
| 14 | + "issueUrl": "https://github.com/stack-wuh/shadow-dev-cli/issues/22", |
| 15 | + "pullRequest": null, |
| 16 | + "pullRequestUrl": null |
| 17 | + }, |
| 18 | + "review": { |
| 19 | + "conclusion": "pending", |
| 20 | + "verifiedCommit": null, |
| 21 | + "verifiedAt": null |
| 22 | + }, |
| 23 | + "workflow": { |
| 24 | + "operation": null, |
| 25 | + "checkpoint": "issue:22", |
| 26 | + "planHash": "de68a5b25e152b369e06ce10b5bedfa40cf9888b26eaacb1bacbef49b7e7af05", |
| 27 | + "updatedAt": null, |
| 28 | + "lastError": null, |
| 29 | + "issuePlan": { |
| 30 | + "title": "[fix] 安装器契约测试 Linux/macOS 恒红:.cmd 断言补平台门", |
| 31 | + "titleRaw": null, |
| 32 | + "supplement": "", |
| 33 | + "body": "## 动机\n`test/install.test.mjs` 用例 53 无条件断言 `$BIN/shadow-dev.cmd` 存在,但 `.cmd` 按设计只在 MINGW/MSYS/CYGWIN 下生成(`gen_shims` 的 uname 分支)。结果 ubuntu/macos 矩阵自 38b1364(安装器引入)起 **main 分支 CI 持续红色**——红 CI 掩盖真实回归、让后续所有 PR 在坏门禁下合并(#18/#21 均如此)。本变更修复断言本身,恢复 CI 门禁价值。\n\n## 引用规范\n- shadow-docs/knowledge/install-distribution.md\n - 当前结论: 托管 shim 为 `.sh` 全平台 + `.cmd` 仅 Windows;验证方式登记 8 用例\n - 适用 scope: scripts/install-cli.sh, test/install.test.mjs\n- norms/tdd-verification.md\n - 当前结论: 完成前必须有可查验证;本变更的\"红\"在 CI 非 Windows 矩阵(本地 win 恒真无法复现),PR 上 CI 矩阵转绿即验证\n\n## 决策\n- **选型:** 平台门:`platform() === 'win32'` 时才断言 `.cmd` 存在(单行修复,非 win 环境断言 `.cmd` 不存在反而更贴合设计——顺带钉住\"不越平台生成\")。\n- **对比方案:** 让 `gen_shims` 在 unix 也生成 `.cmd` 被否——unix 下 `.cmd` 无运行语义,为迁就错误断言改正确行为是反模式。\n- **理由:** 断言错、行为对;测试向契约对齐,不是相反。\n\n## 任务\n- [ ] task-1 — `test/install.test.mjs` — 用例 53 的 `.cmd` 断言加平台门(win32 存在 / 其他平台不存在)\n- [ ] task-2 — `scripts/install-cli.sh` 无改动(确认边界);`shadow-docs/knowledge/install-distribution.md` — 验证方式登记平台分支语义,source 追加本 brief\n\n完整 brief:shadow-docs/changes/20260918-fix-installer-ci-cmd-assert/brief.md\n\n<!-- shadow-dev:issue-metadata {\"name\":\"20260918-fix-installer-ci-cmd-assert\",\"type\":\"fix\",\"scope\":null,\"status\":\"proposed\",\"branch\":null,\"baseBranch\":\"main\",\"briefPath\":\"shadow-docs/changes/20260918-fix-installer-ci-cmd-assert/brief.md\",\"cliVersion\":\"1.2.0\",\"prUrl\":null,\"issueNumber\":null} -->\n", |
| 34 | + "labels": [ |
| 35 | + "fix" |
| 36 | + ] |
| 37 | + } |
| 38 | + } |
| 39 | +} |
| 40 | +--- |
| 41 | + |
| 42 | +# 安装器契约测试 Linux/macOS 恒红:.cmd 断言补平台门 |
| 43 | + |
| 44 | +## 动机 |
| 45 | + |
| 46 | +`test/install.test.mjs` 用例 53 无条件断言 `$BIN/shadow-dev.cmd` 存在,但 `.cmd` 按设计只在 MINGW/MSYS/CYGWIN 下生成(`gen_shims` 的 uname 分支)。结果 ubuntu/macos 矩阵自 38b1364(安装器引入)起 **main 分支 CI 持续红色**——红 CI 掩盖真实回归、让后续所有 PR 在坏门禁下合并(#18/#21 均如此)。本变更修复断言本身,恢复 CI 门禁价值。 |
| 47 | + |
| 48 | +## 引用规范 |
| 49 | + |
| 50 | +- shadow-docs/knowledge/install-distribution.md |
| 51 | + - 当前结论: 托管 shim 为 `.sh` 全平台 + `.cmd` 仅 Windows;验证方式登记 8 用例 |
| 52 | + - 适用 scope: scripts/install-cli.sh, test/install.test.mjs |
| 53 | +- norms/tdd-verification.md |
| 54 | + - 当前结论: 完成前必须有可查验证;本变更的"红"在 CI 非 Windows 矩阵(本地 win 恒真无法复现),PR 上 CI 矩阵转绿即验证 |
| 55 | + |
| 56 | +## 决策 |
| 57 | + |
| 58 | +- **选型:** 平台门:`platform() === 'win32'` 时才断言 `.cmd` 存在(单行修复,非 win 环境断言 `.cmd` 不存在反而更贴合设计——顺带钉住"不越平台生成")。 |
| 59 | +- **对比方案:** 让 `gen_shims` 在 unix 也生成 `.cmd` 被否——unix 下 `.cmd` 无运行语义,为迁就错误断言改正确行为是反模式。 |
| 60 | +- **理由:** 断言错、行为对;测试向契约对齐,不是相反。 |
| 61 | + |
| 62 | +## 任务 |
| 63 | + |
| 64 | +- [x] task-1 — `test/install.test.mjs` — 用例 53 的 `.cmd` 断言加平台门(win32 存在 / 其他平台不存在) |
| 65 | +- [x] task-2 — `scripts/install-cli.sh` 无改动(确认边界);`shadow-docs/knowledge/install-distribution.md` — 验证方式登记平台分支语义,source 追加本 brief |
| 66 | + |
| 67 | +## 结果 |
| 68 | + |
| 69 | +- 实际耗时: — |
| 70 | +- 验证: — |
| 71 | + |
| 72 | +## 知识评估 |
| 73 | + |
| 74 | +- **预期影响:** 更新 |
| 75 | +- **候选卡片:** shadow-docs/knowledge/install-distribution.md |
| 76 | +- **理由:** 卡片验证方式需钉住 `.cmd` 平台分支语义,防再次写出跨平台恒假断言 |
0 commit comments