# 真人录证:定位 place commit 瞬间 > **当前 P0 必做任务**。在修复 RPA 之前,必须先完成本录证。 > **冻结**:录证完成并分析前,禁止新增 `fix-place/*`、`place-commit-strategy`、`selection-trace`、新回退策略、新点击方式。 --- ## 目标 找到 MotherShip widget 在**真人操作**下,`GET axel/location/place/{placeId}` 真正发生的瞬间,并与 RPA 失败路径对比。 成功判据(录证侧): - HAR + Trace + 录像 + Console + Network 五类产物齐全 - `commit-moments.json` 中至少有 **2 次** `GET place` 200(提货 + 派送) - 能说明:点选联想后多少毫秒内触发 place commit、伴随哪些 DOM/网络事件 --- ## 一键启动 ```powershell cd x:\work\chajia npm run record:human-commit-baseline ``` 非 TTY / Enter 无效时: ```powershell $env:HUMAN_RECORD_FILE_TRIGGER="1" npm run record:human-commit-baseline ``` 脚本会打印 `runId` 和产物目录,例如: ``` .rpa/human-commit-baseline/a1b2c3d4/ ``` --- ## 人工操作顺序 1. 浏览器打开 MotherShip 报价 widget 2. **提货**:键入街道 → 点选联想 → 确认 widget 显示已锁定 3. 触发检查点 1(Enter 或触发文件 `triggers/after-pickup`) 4. **派送**:同上 5. 触发检查点 2(`triggers/after-delivery`) 6. 填货物 → 点 Get Quote → 等待报价档位出现 7. 触发检查点 3(`triggers/after-quote`) 8. 触发结束(`triggers/finish`) ### 文件触发(推荐 Windows) ```powershell # 将 {runId} 替换为脚本启动时打印的 ID New-Item -Force ".rpa\human-commit-baseline\{runId}\triggers\after-pickup" New-Item -Force ".rpa\human-commit-baseline\{runId}\triggers\after-delivery" New-Item -Force ".rpa\human-commit-baseline\{runId}\triggers\after-quote" New-Item -Force ".rpa\human-commit-baseline\{runId}\triggers\finish" ``` --- ## 产物说明 | 文件 | 用途 | |------|------| | `baseline.har` | 全量 HAR,DevTools 导入分析 | | `trace.zip` | Playwright Trace(含 CDP、截图、DOM 快照) | | `video/*.webm` | 屏幕录像,对照时间轴 | | `console.ndjson` | 浏览器 Console 逐行 | | `network.ndjson` | axel/location、axel/quote、Google Places 请求 | | `checkpoints.json` | 四个检查点时间戳 | | `commit-moments.json` | 自动捕获的 `GET place/{id} 200` | | `summary.json` | 录证摘要与分析提示 | --- ## 分析 commit 瞬间 ### 1. 自动摘要 ```powershell Get-Content .rpa\human-commit-baseline\{runId}\commit-moments.json Get-Content .rpa\human-commit-baseline\{runId}\summary.json ``` 终端在录证过程中会打印: ``` [录证] ★ place commit 200 @ +12345ms phase=after_pickup ``` ### 2. Playwright Trace(CDP) ```powershell npx playwright show-trace .rpa\human-commit-baseline\{runId}\trace.zip ``` 在 Trace 中: - 时间轴对齐 **Network** 面板,过滤 `place/` - 查看点选联想**前一帧 / 后一帧**的 DOM 与鼠标事件 - 记录:是 `click`、`keydown`、`place_changed` 还是 blur 之后触发 ### 3. HAR 用 Chrome DevTools → Import HAR → 过滤 `axel/location/place` 对比: - `search` 响应中的 `placeId` - 随后 `GET place/{id}` 的 initiator / timing ### 4. 与 RPA 对比 | 维度 | 真人录证 | RPA worker 日志 | |------|----------|-----------------| | place 200 次数 | commit-moments.json | `placeRequestObserved` | | 触发阶段 | checkpointPhase | `selection-trace` / adapter events | | 点选方式 | trace 录像 | mothership-styled-click / keyboard | **若真人稳定 2 次 place 200,RPA 为 0** → 停止改 timeout/stealth,只复刻真人事件序列。 --- ## 推荐测试地址(与 prove 一致) | 侧 | 地址 | |----|------| | 提货 | 1234 Warehouse Street, Los Angeles, CA | | 派送 | 5678 Distribution Way, Farmers Branch, TX | | 货物 | 2 托 × 500 lb,48×40×48 in | 也可用 POI 难例(Convention Center → Ocean Drive)做第二遍录证。 --- ## 冻结范围(录证期间) 禁止新增或扩展: - `workers/rpa/fix-place/*` - `place-commit-strategy.ts` - `selection-trace.ts` - 新的 commit 回退链 / CDP 点击路径 允许: - 本录证脚本与文档 - 基于录证结论的**单一**最小复刻(需先写分析结论) --- ## 完成标准 - [ ] 至少 1 次完整录证(双地址 + 报价) - [ ] `commit-moments.json` ≥ 2 条 place 200 - [ ] 输出 1 页分析:`docs/mothership-commit-瞬间分析.md`(人工或 AI 根据 trace 填写) - [ ] 团队评审:确认 RPA 下一步只复刻真人事件,不继续堆策略