tri-state(三态)介绍(状态设计模式,一个值或结果可以有三种明确的状态:成功(Success)、失败(Failure)、进行中/未知/未完成(Pending/Unknown))

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”,意思是:

这个模块的结果不是简单的"有值/没值"(二态),而是明确区分了三种状态——比如:

  1. 分析完成→ 有有效的分析结果
  2. 分析失败→ 明确标记为"失败",并记录了错误原因
  3. 尚未分析/进行中→ 明确标记为"还没做"

这就避免了前面提到的那些"静默降级"问题。例如,简历匹配模块(resume match)就是典型的二态设计

  • 要么有个分数 → “成功”
  • 要么没分数(LLM 失败了也写个0.0) → 被当成了"成功但分数很低"

如果用三态设计,LLM 失败时应该写成:

{"status":"failed",# 明确标记为失败"match_score":None,# 没有分数"error":"LLM timeout"# 记录原因}

而不是:

{"status":"done",# ❌ 假装成功了"match_score":0.0# ❌ 用 0 分冒充"极差匹配"}

一句话总结

Tri-state = 成功 / 失败 / 未完成,三种状态明确区分,绝不把"失败"伪装成"成功但结果为零"。