@microi.net/cli 6.0.2 → 6.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -52,8 +52,8 @@ MCP 的生成/保存入口包含 `microi_build_page_design` 与 `microi_save_pag
52
52
 
53
53
  你正在为 Microi 吾码平台生成界面引擎页面的 JSON 数据。界面引擎页面由 `formData` 对象描述,用户导入 JSON 即可使用。
54
54
 
55
- <!-- microi-progressive:begin -->
56
- <!-- microi-progressive:chunk id=page-engine-000 sha256=44233416e71cc6ff3712347308dadd26e55b14938b81b8a2401478c6bc14921b -->
55
+ <!-- microi-progressive:begin -->
56
+ <!-- microi-progressive:chunk id=page-engine-000 sha256=44233416e71cc6ff3712347308dadd26e55b14938b81b8a2401478c6bc14921b -->
57
57
  ## 设计器源码事件
58
58
 
59
59
  设计器选中事件只能在 `isDesignMode` 为真时执行 `preventDefault/stopPropagation` 和选中状态写入。运行和预览页面必须保留 HTML 链接、按钮与键盘激活的浏览器默认行为。链接使用实际授权菜单路由,保存后逐一点击验证,不以 JSON 中存在 href 代替跳转验收;回归入口为 `Microi.Client/tests/page-engine-runtime-click.spec.mjs`。
@@ -65,8 +65,8 @@ MCP 的生成/保存入口包含 `microi_build_page_design` 与 `microi_save_pag
65
65
  组件卸载时逐项调用 `EventBus.off(eventName)`。重复挂载不解绑会造成一次操作
66
66
  触发多次;普通页面 JSON 生成不需要注册事件总线。
67
67
 
68
- <!-- /microi-progressive:chunk -->
69
- <!-- microi-progressive:chunk id=page-engine-001 sha256=57717991f9c7de557b524ec36fc9bdd716080b71b682439f1b6662b0b9b2f45c -->
68
+ <!-- /microi-progressive:chunk -->
69
+ <!-- microi-progressive:chunk id=page-engine-001 sha256=57717991f9c7de557b524ec36fc9bdd716080b71b682439f1b6662b0b9b2f45c -->
70
70
  ## 核心数据结构
71
71
 
72
72
  ```
@@ -84,8 +84,8 @@ formData(页面)
84
84
  └── widgetParams[] // 组件私有参数
85
85
  ```
86
86
 
87
- <!-- /microi-progressive:chunk -->
88
- <!-- microi-progressive:chunk id=page-engine-002 sha256=6a1a85b40bcb5f8be694b0aad73a805083acd0d6fcd9cba36278dc9b51d24dcb -->
87
+ <!-- /microi-progressive:chunk -->
88
+ <!-- microi-progressive:chunk id=page-engine-002 sha256=6a1a85b40bcb5f8be694b0aad73a805083acd0d6fcd9cba36278dc9b51d24dcb -->
89
89
  ## formConfig 页面全局配置
90
90
 
91
91
  ```json
@@ -102,8 +102,8 @@ formData(页面)
102
102
  }
103
103
  ```
104
104
 
105
- <!-- /microi-progressive:chunk -->
106
- <!-- microi-progressive:chunk id=page-engine-003 sha256=8afb75b0e4d85ab9f56a7ba018e1cc50f758d3e604683d8c38d5f0a45d53f135 -->
105
+ <!-- /microi-progressive:chunk -->
106
+ <!-- microi-progressive:chunk id=page-engine-003 sha256=8afb75b0e4d85ab9f56a7ba018e1cc50f758d3e604683d8c38d5f0a45d53f135 -->
107
107
  ## 容器类型
108
108
 
109
109
  | type | label | 说明 |
@@ -157,8 +157,8 @@ formData(页面)
157
157
  }
158
158
  ```
159
159
 
160
- <!-- /microi-progressive:chunk -->
161
- <!-- microi-progressive:chunk id=page-engine-004 sha256=9c7c85bb0d25267d07e45d9abeb5691c2f0ffd9da233351cf2f448a9b848cea5 -->
160
+ <!-- /microi-progressive:chunk -->
161
+ <!-- microi-progressive:chunk id=page-engine-004 sha256=9c7c85bb0d25267d07e45d9abeb5691c2f0ffd9da233351cf2f448a9b848cea5 -->
162
162
  ## 组件通用结构
163
163
 
164
164
  ```json
@@ -178,8 +178,8 @@ formData(页面)
178
178
  }
179
179
  ```
180
180
 
181
- <!-- /microi-progressive:chunk -->
182
- <!-- microi-progressive:chunk id=page-engine-005 sha256=c1e31dede775f14761182fc197cf428d494806c4503a622ffdad3d16d091d3e0 -->
181
+ <!-- /microi-progressive:chunk -->
182
+ <!-- microi-progressive:chunk id=page-engine-005 sha256=c1e31dede775f14761182fc197cf428d494806c4503a622ffdad3d16d091d3e0 -->
183
183
  ## widgetParams 参数类型
184
184
 
185
185
  | type | 说明 | value 类型 |
@@ -193,8 +193,8 @@ formData(页面)
193
193
  | `select` | 下拉选择 | `string` |
194
194
  | `radio` | 单选组 | `string` |
195
195
 
196
- <!-- /microi-progressive:chunk -->
197
- <!-- microi-progressive:chunk id=page-engine-006 sha256=2c021e43f4f0d730da1f5a5cf6a2d314589435e2bb9ff573148c787538a8cc86 -->
196
+ <!-- /microi-progressive:chunk -->
197
+ <!-- microi-progressive:chunk id=page-engine-006 sha256=2c021e43f4f0d730da1f5a5cf6a2d314589435e2bb9ff573148c787538a8cc86 -->
198
198
  ## 数据来源(widgetParams[0])
199
199
 
200
200
  大多数组件的第一个参数(sort=0)是"数据来源":
@@ -206,8 +206,8 @@ formData(页面)
206
206
  $ApiBase$/apiengine/{ApiEngineKey}
207
207
  ```
208
208
 
209
- <!-- /microi-progressive:chunk -->
210
- <!-- microi-progressive:chunk id=page-engine-007 sha256=4170c6e274fc773427057d8606c4800a5bbd5fabd62d63e931aaa388262a51e9 -->
209
+ <!-- /microi-progressive:chunk -->
210
+ <!-- microi-progressive:chunk id=page-engine-007 sha256=4170c6e274fc773427057d8606c4800a5bbd5fabd62d63e931aaa388262a51e9 -->
211
211
  ## 运行态布局与滚动规范
212
212
 
213
213
  - 页面只保留一个主滚动容器:仪表盘、首页和嵌套界面优先继承最外层页面滚动;单个 `pannel`、`workcenter`、`diytable`、`diycalendar`、嵌套 `pageengine` 在运行态默认使用内容自适应高度和 `overflow: visible`,不得无条件设置 `overflow: auto`。
@@ -221,11 +221,11 @@ $ApiBase$/apiengine/{ApiEngineKey}
221
221
  - `aiengine` 在移动端嵌入首页时应使用内容自适应高度和外层页面滚动,指标卡与快捷入口优先两列紧凑排布,避免 4 个指标和全部快捷入口单列堆叠造成超长首屏;输入区和模型/推理设置必须保持可见且不横向溢出。
222
222
  - 交付前必须在真实运行页检查:是否存在内部纵向/横向滚动条、15 条表格分页是否可见、同排容器是否对齐、四周边距是否一致、组件底部是否有异常空白。仅检查设计器画布不算验收完成。
223
223
 
224
- <!-- /microi-progressive:chunk -->
225
- ## 详细参考路由(渐进披露)
226
-
227
- 仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
228
-
229
- - [references/progressive-01-所有组件类型.md](references/progressive-01-所有组件类型.md):所有组件类型;Office/PDF 在线预览自然语言生成规则;searchData 查询条件通用结构
230
- - [references/progressive-02-版本历史-并发保存与回滚.md](references/progressive-02-版本历史-并发保存与回滚.md):版本历史、并发保存与回滚;本地撤销、Vue 源码桥与资产包;生成 JSON 注意事项;经营看板周期筛选与布局规则
231
- <!-- microi-progressive:end -->
224
+ <!-- /microi-progressive:chunk -->
225
+ ## 详细参考路由(渐进披露)
226
+
227
+ 仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
228
+
229
+ - [references/progressive-01-所有组件类型.md](references/progressive-01-所有组件类型.md):所有组件类型;Office/PDF 在线预览自然语言生成规则;searchData 查询条件通用结构
230
+ - [references/progressive-02-版本历史-并发保存与回滚.md](references/progressive-02-版本历史-并发保存与回滚.md):版本历史、并发保存与回滚;本地撤销、Vue 源码桥与资产包;生成 JSON 注意事项;经营看板周期筛选与布局规则
231
+ <!-- microi-progressive:end -->
@@ -21,8 +21,8 @@ description: 按 Microi 系统真实业务逻辑进行 Playwright 全自动化
21
21
 
22
22
  真实依赖与发布范围沿用 `../workspace-conventions/SKILL.md` 的“平台回归与独立应用测试归属”:常规验证指定 MCP 实际使用的 MySQL、MongoDB、Redis 和 MinIO 或 OSS/HDFS,不要求额外 SQL Server 环境;仅用户明确指定 SQL Server 问题时才做其专项。按 [发布测试矩阵](../microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md#按指定-mcp-选择发布测试矩阵) 记录实际覆盖,保留正常登录、业务闭环与资源收尾,不以连接成功代替真实读写验收。
23
23
 
24
- <!-- microi-progressive:begin -->
25
- <!-- microi-progressive:chunk id=playwright-e2e-000 sha256=f04614f276c139cfa50b9e46e89857675c6dc5e7cf0cfbfde76d6e6dbe9746c9 -->
24
+ <!-- microi-progressive:begin -->
25
+ <!-- microi-progressive:chunk id=playwright-e2e-000 sha256=f04614f276c139cfa50b9e46e89857675c6dc5e7cf0cfbfde76d6e6dbe9746c9 -->
26
26
  ## 是否需要 `-e2e` 后缀
27
27
 
28
28
  建议保留 `playwright-e2e` 这个 skill 名称。
@@ -31,8 +31,8 @@ description: 按 Microi 系统真实业务逻辑进行 Playwright 全自动化
31
31
  - `-e2e` 能让 AI 明确区分它和 `v8-debugging`、`v8-crud-api`、`playwright-ct` 等其他能力。
32
32
  - 如果未来要补更细的能力,可以新增 `playwright-api` 或 `visual-regression`,不要把当前 skill 改成泛泛的 `playwright`。
33
33
 
34
- <!-- /microi-progressive:chunk -->
35
- <!-- microi-progressive:chunk id=playwright-e2e-001 sha256=703786ae7a5a52cb39664f1c82de7fb7aa7dfece511046d3757da64918c23063 -->
34
+ <!-- /microi-progressive:chunk -->
35
+ <!-- microi-progressive:chunk id=playwright-e2e-001 sha256=703786ae7a5a52cb39664f1c82de7fb7aa7dfece511046d3757da64918c23063 -->
36
36
  ## 适用范围
37
37
 
38
38
  - PC 管理端:`Microi.Client`、租户后台、运营后台。
@@ -43,8 +43,8 @@ description: 按 Microi 系统真实业务逻辑进行 Playwright 全自动化
43
43
 
44
44
  不适合把 Playwright 用来替代 V8 单函数调试。单个接口引擎的入参输出优先用 VS Code 插件远程执行、MCP `microi_run_engine` 或后端单元测试。
45
45
 
46
- <!-- /microi-progressive:chunk -->
47
- <!-- microi-progressive:chunk id=playwright-e2e-002 sha256=acef3e589cf11f3c197ee0b0ccf56d96b3f286263d54161b3c260e07c2090ed0 -->
46
+ <!-- /microi-progressive:chunk -->
47
+ <!-- microi-progressive:chunk id=playwright-e2e-002 sha256=acef3e589cf11f3c197ee0b0ccf56d96b3f286263d54161b3c260e07c2090ed0 -->
48
48
  ## 临时文件与产物放置规则(必须遵守)
49
49
 
50
50
  AI 在工作区内生成的**一次性临时脚本、诊断文件、截图、测试报告**等,**绝对不能放在工作区根目录**,必须放在以下指定位置:
@@ -64,8 +64,8 @@ AI 在工作区内生成的**一次性临时脚本、诊断文件、截图、测
64
64
 
65
65
  **2026-06 强制补充**:AI 手写的一次性 Playwright 验证脚本、运行日志、截图和报告只能写到工作区根目录 `.tmp/`。不要写到 `Microi.Client/`、`Microi.Server/`、`microi.doc/` 或其它子项目目录,即使这些目录已有 `tests/` 目录也不例外。只有 Microi.Agent 插件正式初始化的可复用 E2E 工程,才使用 `.microi-e2e/`。
66
66
 
67
- <!-- /microi-progressive:chunk -->
68
- <!-- microi-progressive:chunk id=playwright-e2e-003 sha256=69b8842a221a0de60f8605c5059deee391be0f16f0b6cbc5ddfb3cfd210268db -->
67
+ <!-- /microi-progressive:chunk -->
68
+ <!-- microi-progressive:chunk id=playwright-e2e-003 sha256=69b8842a221a0de60f8605c5059deee391be0f16f0b6cbc5ddfb3cfd210268db -->
69
69
  ## 标准目录
70
70
 
71
71
  前端项目中推荐使用 `tests/e2e`,而不是根目录 `e2e`,这样能和单元测试、组件测试并列。
@@ -85,8 +85,8 @@ AI 在工作区内生成的**一次性临时脚本、诊断文件、截图、测
85
85
  report/
86
86
  ```
87
87
 
88
- <!-- /microi-progressive:chunk -->
89
- <!-- microi-progressive:chunk id=playwright-e2e-004 sha256=4f5e11baf4651c11b5f9819a0b4f33ce2590db1733d4db72814bd1a25daf56ff -->
88
+ <!-- /microi-progressive:chunk -->
89
+ <!-- microi-progressive:chunk id=playwright-e2e-004 sha256=4f5e11baf4651c11b5f9819a0b4f33ce2590db1733d4db72814bd1a25daf56ff -->
90
90
  ## 必备环境变量
91
91
 
92
92
  ```bash
@@ -107,8 +107,8 @@ PW_TEST_PASSWORD=<从本地配置读取或用环境变量覆盖>
107
107
  PW_HOME_PATH=/#/pages/index/index
108
108
  ```
109
109
 
110
- <!-- /microi-progressive:chunk -->
111
- <!-- microi-progressive:chunk id=playwright-e2e-005 sha256=51567cea5fca434f9b031fef0871454100cf4715dfb65695dc1722bd275399be -->
110
+ <!-- /microi-progressive:chunk -->
111
+ <!-- microi-progressive:chunk id=playwright-e2e-005 sha256=51567cea5fca434f9b031fef0871454100cf4715dfb65695dc1722bd275399be -->
112
112
  ## 本地测试账号自动发现
113
113
 
114
114
  当没有显式传入 `PW_TEST_ACCOUNT` / `PW_TEST_PASSWORD` / `MICROI_OSCLIENT` 时,AI 不要把账号密码写入后端配置来制造旁路:
@@ -132,8 +132,8 @@ PW_HOME_PATH=/#/pages/index/index
132
132
  5. 人工第二租户至少使用无痕窗口;多个无痕窗口可能共享同一临时会话,更多并行目标使用独立
133
133
  Profile/`--user-data-dir`。自动化收尾只关闭自己创建的 context/browser。
134
134
 
135
- <!-- /microi-progressive:chunk -->
136
- <!-- microi-progressive:chunk id=playwright-e2e-006 sha256=88e1002cae934acd2de5af2f77f371a9ea152a525eecf11b49fe182b16a56044 -->
135
+ <!-- /microi-progressive:chunk -->
136
+ <!-- microi-progressive:chunk id=playwright-e2e-006 sha256=88e1002cae934acd2de5af2f77f371a9ea152a525eecf11b49fe182b16a56044 -->
137
137
  ## 后端改动后的 E2E 前置动作
138
138
 
139
139
  如果本轮任务修改过 `Microi.Server/**` 后端源码、配置、控制器、服务、依赖项目或接口行为,跑 Playwright、页面截图、接口验收或前后端联调前,必须先按 `workspace-conventions` 的“后端代码改动后的重启验收”完成:
@@ -145,8 +145,8 @@ PW_HOME_PATH=/#/pages/index/index
145
145
 
146
146
  不要只说“代码已编译”或“需要用户自己重启后端”;除非用户明确要求不要中断当前服务,否则 AI 要主动完成重启。
147
147
 
148
- <!-- /microi-progressive:chunk -->
149
- <!-- microi-progressive:chunk id=playwright-e2e-007 sha256=948194cce3a29cfec216546acab77314ccaa1c0afad3cbcfd6b426a94f36d4ac -->
148
+ <!-- /microi-progressive:chunk -->
149
+ <!-- microi-progressive:chunk id=playwright-e2e-007 sha256=948194cce3a29cfec216546acab77314ccaa1c0afad3cbcfd6b426a94f36d4ac -->
150
150
  ## 服务自启动纪律(必做)
151
151
 
152
152
  执行自动化测试、截图巡检、接口引擎回读、`/apiengine/{key}` 验收时,如果本地后端或前端不可达,不能把 `fetch failed`、`ECONNREFUSED`、`000 Failed to connect`、端口无人监听当作任务终点。必须先自动启动所需服务,再继续完整验证。
@@ -188,17 +188,17 @@ uni-app H5 或移动端前端按项目自身命令启动,例如 `npm run dev:h
188
188
 
189
189
  执行顺序:先检查端口/健康接口是否可达;不可达则用后台终端启动;等待服务输出监听地址;再重试接口同步、页面打开、Playwright 截图和断言。只有启动命令失败、缺少依赖、数据库连接失败、端口冲突无法自动换端口且无替代配置时,才算真正阻塞,并且要报告具体失败命令和错误。
190
190
 
191
- <!-- /microi-progressive:chunk -->
192
- ## 详细参考路由(渐进披露)
193
-
194
- ### 菜单微服务生命周期验收(强制)
195
-
196
- 菜单型 MicroService 使用 `runtime-keep-alive` 单一缓存所有者。E2E 必须覆盖至少 3 条子路由连续切换 8 轮,确认返回后状态仍在、页面无永久骨架屏或空白;继续打开第 6 个实例,确认 LRU 只淘汰最久未使用的隐藏实例。还要观察 `appstate-change`:`afterhidden` 后后台任务应暂停,`aftershow` 后应幂等恢复;关闭 Tab、关闭其它/全部以及退出登录后,对应运行时必须被销毁。
197
-
198
- 仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
199
-
200
- - [references/progressive-01-全自动登录-免验证码-但不免密码-必读.md](references/progressive-01-全自动登录-免验证码-但不免密码-必读.md):全自动登录(免验证码,但不免密码)——必读;表单引擎卡死/递归更新全自动化诊断;移动端视觉与资源验收;测试证据必须绑定需求编号;移动端/H5 回归纪律
201
- - [references/progressive-02-文字对比度与可读性自动化检查-必做.md](references/progressive-02-文字对比度与可读性自动化检查-必做.md):文字对比度与可读性自动化检查(必做);安装;playwright.config.js 模板
202
- - [references/progressive-03-microi-helper-模板.md](references/progressive-03-microi-helper-模板.md):Microi helper 模板;典型用例;Microi 专属测试策略;最少冒烟集;完整业务验收门槛;与 MCP 的配合;与 VS Code 插件的配合
203
- - [references/progressive-04-ci-建议.md](references/progressive-04-ci-建议.md):CI 建议;常见问题;前端微服务 E2E 必测点;动态模块按钮验收
204
- <!-- microi-progressive:end -->
191
+ <!-- /microi-progressive:chunk -->
192
+ ## 详细参考路由(渐进披露)
193
+
194
+ ### 菜单微服务生命周期验收(强制)
195
+
196
+ 菜单型 MicroService 使用 `runtime-keep-alive` 单一缓存所有者。E2E 必须覆盖至少 3 条子路由连续切换 8 轮,确认返回后状态仍在、页面无永久骨架屏或空白;继续打开第 6 个实例,确认 LRU 只淘汰最久未使用的隐藏实例。还要观察 `appstate-change`:`afterhidden` 后后台任务应暂停,`aftershow` 后应幂等恢复;关闭 Tab、关闭其它/全部以及退出登录后,对应运行时必须被销毁。
197
+
198
+ 仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
199
+
200
+ - [references/progressive-01-全自动登录-免验证码-但不免密码-必读.md](references/progressive-01-全自动登录-免验证码-但不免密码-必读.md):全自动登录(免验证码,但不免密码)——必读;表单引擎卡死/递归更新全自动化诊断;移动端视觉与资源验收;测试证据必须绑定需求编号;移动端/H5 回归纪律
201
+ - [references/progressive-02-文字对比度与可读性自动化检查-必做.md](references/progressive-02-文字对比度与可读性自动化检查-必做.md):文字对比度与可读性自动化检查(必做);安装;playwright.config.js 模板
202
+ - [references/progressive-03-microi-helper-模板.md](references/progressive-03-microi-helper-模板.md):Microi helper 模板;典型用例;Microi 专属测试策略;最少冒烟集;完整业务验收门槛;与 MCP 的配合;与 VS Code 插件的配合
203
+ - [references/progressive-04-ci-建议.md](references/progressive-04-ci-建议.md):CI 建议;常见问题;前端微服务 E2E 必测点;动态模块按钮验收
204
+ <!-- microi-progressive:end -->
@@ -18,15 +18,23 @@ description: 每次 Microi 任务开始前必读的基础规范。用于识别
18
18
 
19
19
  本节适用于开发、测试、诊断和发布产生的全部自有临时资产,包括工作区根 `.tmp/`、宿主临时目录(如 `$CODEX_HOME/tmp`)和隔离 Git worktree,并替代历史“任务完成后可以不清理”的约定。目录位置和 `.gitignore` 不改变收尾责任。
20
20
 
21
- - 创建前使用独立的 `.tmp/<任务标识>/`,登记本任务创建的目录、文件、进程及用途;不得混用其它任务目录。每轮测试成功、失败、取消或中断退出时都执行 `finally` / teardown,先关闭本任务的写入者、浏览器和临时服务,再删除本轮已无用途的临时文件;不能等用户再次要求清理磁盘。
21
+ - 创建前使用独立的 `.tmp/<任务标识>/`,登记本任务创建的目录、文件、进程及用途;不得混用其它任务目录,既有文件或共享依赖不因本轮使用而取得删除权。每轮测试及任务成功、失败、取消或中断退出时都执行 `finally` / teardown,先核验并关闭本任务的写入者、浏览器和临时服务,再删除本轮已无用途的临时文件;不能等用户再次要求清理磁盘。
22
22
  - 默认删除本任务的一次性脚本、下载/解压副本、编译输出、隔离依赖、测试夹具和冗余截图/trace/video/日志。交付必需的少量报告、关键截图、发布哈希/回执先脱敏并归档到对应项目的长期交付目录,回读归档完整后再删临时副本;不得把完整构建树、源码副本或依赖目录当作验收证据长期留存。
23
23
  - 失败仍需排查或下一阶段确实依赖的文件,只保留可解释的最小集合,记录路径、体积、原因、归属和清理时机;排查/依赖结束后立即删除。崩溃来不及执行 teardown 时,下次接续先核对自有清单并补清;不能以“测试失败”“以后可能有用”为由无限保留。
24
24
  - 隔离副本只为实际并发冲突或构建输入冻结创建,优先复用合适的工作树、稀疏检出和最小夹具;禁止每次重试复制整套源码、Git 历史、依赖、SDK 和运行目录。创建前盘点源盘与目标盘可用空间及已有同类副本,按本轮实际需求估算新增体积;测试结束先回收旧运行/编译目录,再创建下一轮。不要把临时目录移到另一块盘当作清理。
25
25
  - 工作树不是永久保留项:任务结束逐仓检查未提交、未跟踪、忽略文件和未推送提交,已合入/已归档且无活动引用的副本按 Git/宿主支持的方式移除并回读注册表;必要差异先最小归档并校验可恢复性,不复制完整构建树。嵌套独立 Git 仓库逐个核对;禁止因存在 `.git` 就跳过整个任务目录,也禁止把主工作区存在当成差异已安全保存的证明。
26
26
  - **规则必须落到执行入口**:新增或维护测试、构建、发布脚本时,将自有临时资产回收写入实际的 `finally`、测试框架 teardown/after hook 或宿主归档流程,并验证成功与失败退出均回收。`Microi.Tests/run-tests.ps1` 的 Full 隔离 `.net-artifacts` 由入口自动回收,保留结果报告与 `artifact-cleanup.json`;已有共享目录不取得删除权。仅修改 Skill、模型读过规则或工具显示最新版,都不能声称自动清理已生效;须检查已安装正文及实际执行结果。硬崩溃/强杀可能跳过收尾,恢复时按归属清单补清,不能承诺任意中断都即时删除。
27
- - 删除前核验解析后的绝对路径位于本任务 `.tmp` 子目录,检查重解析点/符号链接、当前进程 CWD/文件锁、Git worktree 与未提交源码、发布锁以及虚拟机/容器引用。保留用户文件、唯一源码/未提交改动、正式交付物、共享资源和其它任务资产;独占 Git 工作树先按 Git/宿主支持的移除方式完成检查,不能直接递归删除。
27
+ - 删除前核验解析后的绝对路径位于已登记的本任务临时目录或独占副本内,不能仅依赖字符串前缀;检查目标及祖先的重解析点/符号链接、当前进程 CWD/文件锁、Git worktree 与未提交源码、发布锁以及虚拟机/容器引用。禁止跟随链接递归到共享或外部目录;无法确认真实边界时保留。保留用户文件、唯一源码/未提交改动、正式交付物、共享资源和其它任务资产;独占 Git 工作树先按 Git/宿主支持的移除方式完成检查,不能直接递归删除。
28
28
  - 历史垃圾清理先做体积与引用盘点,只删已核验无引用、无跟踪源码且可再生成的产物;文件名含 `.tmp`、目录名为 `bin/obj` 或时间较旧都不能单独证明可删。禁止整体清空共享 `.tmp/`,禁止为了清理结束其它任务或重启 Docker/WSL。
29
- - 清理后独立回读已删路径不存在、保护对象仍在和磁盘可用空间;收尾报告删除体积、剩余保留项和原因。遇到文件锁、权限或自动审批拒绝时保留目标并准确报告,禁止换工具绕过。测试通过与临时文件清理完成是两个验收项,不能互相代替。
29
+ - 清理后独立回读已删路径不存在、保护对象仍在;必要时比对源码、用户原图、正式交付物的哈希及其它工作树登记。收尾报告已删路径/文件数、逻辑字节数、磁盘可用空间变化、剩余保留项及清理时机;并行写入、硬链接等会使逻辑大小与实际净空间变化不同,不能混报。遇到文件锁、权限或策略拒绝时记录执行阶段、原始错误和未完成范围,禁止换工具绕过。测试通过与临时文件清理完成是两个验收项,不能互相代替。
30
+
31
+ ### Windows 默认普通删除与策略拒绝排查(强制)
32
+
33
+ - 自动收尾默认使用原生 PowerShell 普通删除:已完成上述核验的普通文件使用 `Remove-Item -LiteralPath $verifiedTaskFile -ErrorAction Stop`,已核验的独占目录才使用 `Remove-Item -LiteralPath $verifiedTaskDirectory -Recurse -ErrorAction Stop`。变量必须来自本任务明确登记并重新解析的单个绝对路径,禁止空值、通配符、盘符根目录、用户目录根、源码根或共享 `.tmp` 根;不能把这两行当作跳过核验的通用清盘命令。
34
+ - **删除命令不默认添加 `-Force`,自动 teardown 也不得失败后升级为强制删除。** 不通过清除只读/隐藏/系统属性、修改 ACL、改审批配置、编码命令、换语言/API、换 shell 或间接脚本完成被拒绝的同一动作。只读盘点可使用 `Get-ChildItem -Force` 发现隐藏项;它不授予强制删除权。普通删除遇到受保护属性、占用或权限错误,保留相应项并报告,不能因其体积小或由 AI 创建就忽略限制。
35
+ - `CreateProcess ... rejected: blocked by policy` 表示执行器在启动 shell 前拒绝;命令里的路径/归档检查也没有运行,不能把它当作 Windows ACL 报错或清理成功。已核验的 Codex Windows `0.163.0-alpha.10.2` 将 `Remove-Item … -Force` 识别为危险删除,并在 `approval_policy=never` 下直接拒绝;`danger-full-access` 不取消命令策略,`never` 也不等于全部允许。其它版本/宿主必须依据当前有效配置、日志或对应版本实现定位,不能把所有同名错误都归因于 `-Force`。实现依据:[强制删除识别](https://github.com/openai/codex/blob/rust-v0.163.0-alpha.10.2/codex-rs/shell-command/src/command_safety/windows_dangerous_commands.rs#L489)、[禁止审批时的决策](https://github.com/openai/codex/blob/rust-v0.163.0-alpha.10.2/codex-rs/core/src/exec_policy.rs#L799)。
36
+ - 若已明确拒绝针对强制删除,只有在原有授权和归属/路径核验仍成立、且普通删除确实保留系统保护语义时,才可收窄为上述原生非强制操作;这不授权扩大删除范围。拒绝原因未知、存在明确禁止,或普通操作仍被拒绝时停止该项,保留并报告,不反复变换写法试探策略,也不修改规则放行。
37
+ - `git worktree remove` 的 `Result too large` 等是命令执行后的失败,与策略拒绝分开处理。失败后分别回读工作树登记与目录,不能假定“登记没了,文件也没了”;先验证差异/未推送提交已可恢复、残留源码与对应提交一致、无其它任务引用和外部链接,才将已注销的残留产物纳入普通清理清单。归属或恢复证据不足时保留,不强删独占副本或嵌套仓库。
30
38
 
31
39
  ## 质量优先与适用范围
32
40