Audited and deliberately left alone: scraper.py (typed ok=False result, not a coerced value), analyzer_graph (alreadytri-state+ instrumented), Temporal activity/workflow error paths (recorded on the run row and re-raised)
tri-state是什么?
文章目录
- tri-state(三态)介绍
- 常见的三态设计
- 对应到这段 commit 的上下文
- 一句话总结
tri-state(三态)介绍
tri-state(三态)在这里指的是一种状态设计模式,即一个值或结果可以有三种明确的状态,而不是简单的"成功/失败"两种。
常见的三态设计
在软件开发中,最典型的三态是:
| 状态 | 含义 | 示例 |
|---|---|---|
| 成功(Success) | 操作完成,有有效结果 | match_score = 85 |
| 失败(Failure) | 操作完成,但明确出错了 | error = "LLM timeout" |
| 进行中/未知(Pending/Unknown) | 操作还没完成,或尚未开始 | status = "pending" |
对应到这段 commit 的上下文
analyzer_graph被描述为“already tri-state + instrumented”,意思是:
这个模块的结果不是简单的"有值/没值"(二态),而是明确区分了三种状态——比如:
- 分析完成→ 有有效的分析结果
- 分析失败→ 明确标记为"失败",并记录了错误原因
- 尚未分析/进行中→ 明确标记为"还没做"
这就避免了前面提到的那些"静默降级"问题。例如,简历匹配模块(resume match)就是典型的二态设计:
- 要么有个分数 → “成功”
- 要么没分数(LLM 失败了也写个
0.0) → 被当成了"成功但分数很低"
如果用三态设计,LLM 失败时应该写成:
{"status":"failed",# 明确标记为失败"match_score":None,# 没有分数"error":"LLM timeout"# 记录原因}而不是:
{"status":"done",# ❌ 假装成功了"match_score":0.0# ❌ 用 0 分冒充"极差匹配"}一句话总结
Tri-state = 成功 / 失败 / 未完成,三种状态明确区分,绝不把"失败"伪装成"成功但结果为零"。