# P0-6 临时守卫 + 沙箱收口后正式重设计 — 记录

> 日期:2026-05-04 / 触发:Neo 在 P0 反馈"我同意,但要记录下来"

## 一、问题简述

`clearAllTasks` 高危操作(`DELETE /api/admin/task-engine/clear-all-tasks`)无运行模式守卫,任何 super_admin 可点。文档明文标"测试用",但代码无 sandbox 判断。

详细业务故事见 [`04a-conflicts-P0-detail.md` § P0-6](../04a-conflicts-P0-detail.md#p0-6-clearalltasks-高危操作无运行模式守卫)。

## 二、Neo 决策

**两阶段方案**:

### 阶段 1 — 临时止血(立即,Wave 1-3 任意时点)

- 工作量:**1h**
- 范围:admin-web `TriggerJobs.tsx` 顶部 danger 按钮加"二次确认弹窗 + 输入门店简称"
- 后端不动(沙箱模式还未上线,沙箱判断暂时不需要)

### 阶段 2 — 沙箱收口后正式重设计(等 P0-7 完成)

- 工作量:**3-5h**
- 触发条件:P20 SPEC 实施完成 + Wave 1 沙箱走查通过
- 范围:
  - 把"清空"语义拆为 **"全局清空"**(live 数据)和 **"沙箱内清空"**(按 `runtime_mode='sandbox' AND sandbox_instance_id=?`)
  - 后端加 `?scope=live|sandbox|both` query param
  - 后端在 live 模式下默认拒绝 `scope=live`(必须显式参数 `confirm=DROP_ALL_<site_code>`)
  - 前端按当前 runtime_context 联动 disabled / 显示哪个清空选项

## 三、与其他主题的关系

- **依赖** P0-7 沙箱收口完成(明确 `runtime_mode` + `sandbox_instance_id` 字段语义)
- **关联** P20 SPEC §11.3 已指向 `P0-7-runtime-context-todos.md`,本记录可作为 todos 的子项
- **不阻塞** Wave 1 主线工作

## 四、待办状态

- [ ] 阶段 1 临时止血(Wave 1-3 任意时点)
- [ ] 阶段 2 正式重设计(等 P0-7 收口后)

## 五、给 Neo 的提醒

P0-7 收口完成后,需要:
1. 在 P20 SPEC § 7 安全 / 权限模型 中明文写出 `clearAllTasks` 在 live 与 sandbox 下的不同行为
2. 在 admin-web RuntimeContext 页加一个"危险操作历史日志"展示哪些 sandbox 实例曾触发 clearAllTasks
3. 把本文件状态从"记录"改为"已完成",归档到审计

---

> 本文件不替代代码实施,仅作为记录,等待 Wave 1-3 / P0-7 收口后执行。
