feat: require validation receipts for h5 code runs

This commit is contained in:
Your Name
2026-07-02 11:52:40 +08:00
parent 80b762053b
commit c0f922b5f8
6 changed files with 185 additions and 21 deletions
@@ -23,6 +23,7 @@
- P6.11 Single-user Rollout Policy: 已完成默认关闭的 code-run 放量策略门禁,支持 user allowlist、task type allowlist、required validation,并在 runtime/status 暴露当前策略。
- P6.12 All-user Long-running Gray: 已完成,生产已默认对所有用户开启 H5 code-run 灰度,external worker running,普通测试用户真实 code-run 已成功生成 MindSpace 产物。
- P6.13 Agent Run Auto-pause Guard: 已完成,新增 `agent-run-guard.mjs` 和 LaunchAgent,按失败数/队列积压/running 超时自动关闭 code-run gate 并停 worker。
- P6.15 H5 Code-run Validation Metadata: 已完成,H5 code-run 自动声明 `.memind/agent-runs/<requestId>.json` receipt 校验,生产已恢复 `MEMIND_AGENT_CODE_RUNS_REQUIRE_VALIDATION=1` 并通过普通测试用户真实路径。
- P5.15 Active Stream TTL Reconcile: 已按用户要求跳过,暂不做报表/定时 reconcile。
- P5 Worker Pool 运维化: 已完成第一步,Redis Router 支持 worker drain。
- P5.9 First-token Latency EWMA: 已完成,StreamController 会把首个 SSE chunk 延迟写入 RedisSLO 报告已展示。
@@ -2579,6 +2580,67 @@ runtime/status:
- `/Users/john/Project/memind_backups/20260702-113106-agent-run-guard-install`
### 2026-07-02 P6.15 H5 Code-run Validation Metadata
目标:
- 在 P6.14 灰度稳定后,把 H5 默认 code-run 从“允许无 validation”升级为“自动带 validation”。
- 恢复后端 required validation gate,避免全用户灰度下出现无产物校验的 code-run。
- 不猜测用户任务真正产物;统一要求每次 code-run 额外写入可验证 receipt。
新增行为:
- H5 code-run 创建时自动生成:
- receipt path: `.memind/agent-runs/<requestId>.json`
- validation: `metadata.memindRun.validation.expectedFile`
- contains: 当前 `requestId`
- H5 会把简短校验指令追加到 agent-visible message:
- 要求执行器创建/更新 receipt JSON。
- receipt 必须包含当前 requestId 值。
- `createAgentRun()` 在提交 `/api/agent/runs` 前合并 validation metadata。
- 普通 chat mode 不附加 receipt validation。
生产配置:
- 已恢复:
- `MEMIND_AGENT_CODE_RUNS_REQUIRE_VALIDATION=1`
- 保持:
- `MEMIND_AGENT_CODE_RUNS_ENABLED=1`
- `MEMIND_AGENT_CODE_RUNS_USER_IDS=`
- `MEMIND_AGENT_CODE_RUN_TASK_TYPES=`
- `MEMIND_AGENT_RUN_AUTODISPATCH=0`
- external worker running
- auto-pause guard enabled
验证:
- `npm run build` 通过。
- `node --test agent-run-routes.test.mjs agent-run-gateway.test.mjs` 通过,27 tests pass。
- 生产 `/api/runtime/status`:
- `codeRunPolicy.enabled=true`
- `codeRunPolicy.userAllowlist=[]`
- `codeRunPolicy.taskTypeAllowlist=[]`
- `codeRunPolicy.requireValidation=true`
- 普通测试用户真实路径通过:
- user id `52ff79cf-21b2-4185-94d6-f24555126ceb`
- run id `5eb28014-b376-4a0c-b42a-8dd38f781f4f`
- request id `p615-validation-20260702034524`
- status `succeeded`
- attempts `1`
- 产物验证:
- receipt: `/Users/john/Project/Memind/MindSpace/52ff79cf-21b2-4185-94d6-f24555126ceb/.memind/agent-runs/p615-validation-20260702034524.json`
- product: `/Users/john/Project/Memind/MindSpace/52ff79cf-21b2-4185-94d6-f24555126ceb/public/p615-validation-20260702034524.html`
- event chain 包含 `tool_gateway_validation`
- SLO:
- `ok=true`
- `failures=[]`
- queue empty
- guard `shouldPause=false`
备份:
- `/Users/john/Project/memind_backups/20260702-114335-p615-validation-metadata`
## 回滚策略
- P0: 修改前保留 `server.mjs` 备份;如启动失败,恢复备份并 `launchctl kickstart` Portal。