## 诊断流程样例
### 输入
| 字段 | 示例 |
|---|---|
| 页面 | Reddit 当前帖子页 |
| 截图/用户句子 | `Got my first paid user for my SaaS` |
| helper | `http://127.0.0.1:8767` |
### 执行
```bash
cd /Users/bytedance/Documents/product-bu/20-products/tense-hud/30-rd
python tools/tense_hud_watchdog.py \
--text "Got my first paid user for my SaaS" \
--url "https://www.reddit.com/..."
```
### 预期检查
| 阶段 | 成功信号 | 失败信号 | 下一步 |
|---|---|---|---|
| Helper 健康 | `/health` 返回 `ok: true`,engine/model 可见 | 连接失败、端口无监听、LaunchAgent last exit 非 0 | 重启 helper,查看 `local-helper/logs/*.log` |
| 句子分析 | `/analyze` 返回 `Got`,不返回 `paid` | `paid` 被标成 simple past,或返回空 | 修 `tense_hud_helper/analyzer.py` 和 gold tests |
| 页面扫描 | 首屏文本进入候选队列前列 | 候选全在巨大 DOM 后部,或候选数为 0 | 调整 `src/scanPolicy.js` / `src/content.js` 的 viewport 优先级 |
| 渲染结果 | `.tense-hud-mark` 数量大于 0,source 为 `spacy` 或 fallback | mark 为 0、processing 卡住、全部 timeout | 看 content script debug snapshot |
### 结论样例
`helper_down`: helper 未监听 8767,页面无标记不是语法规则问题;先恢复 LaunchAgent。
`analysis_regression`: helper 正常但 `paid user` 仍返回 `paid`,这是谓语识别回归;先修 analyzer。
`scan_starvation`: helper 和句子分析都正常,但页面 mark 为 0 且首屏文本未进入前 20 个候选;优先修 content script 的可见区域扫描策略。