dissent

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

/dissent

/dissent

Structured disagreement that strengthens decisions. The insight: find flaws before the one-way door closes.
Dissent is not attack. It's the practice of actively seeking reasons you might be wrong. The devil's advocate is a role, not a personality.
通过结构化的异议来强化决策。核心思路:在“单向门”关闭前发现漏洞。
异议不是攻击,而是主动寻找自身可能出错的理由的实践。唱反调是一个角色,而非一种性格。

When to Use

适用场景

Invoke
/dissent
when:
  • About to lock in a one-way door - architecture choices, major hires, public API contracts, anything hard to reverse
  • Confidence is high but stakes are higher - feeling certain is when you need dissent most
  • Team is converging too quickly - unanimous agreement without debate is a warning sign
  • You're defending a position - advocacy mode is the enemy of truth-seeking
  • The path forward seems obvious - obvious paths have hidden assumptions
Do not use when: Gathering initial options, brainstorming, or exploring. Dissent is for stress-testing decisions, not generating them.
在以下情况调用
/dissent
  • 即将敲定“单向门”决策 - 架构选择、核心招聘、公开API契约等难以逆转的事项
  • 信心充足但风险更高 - 越是确定的时候,越需要异议
  • 团队达成共识过快 - 毫无辩论的一致同意是危险信号
  • 你在为某个立场辩护时 - 辩护模式会阻碍真相探寻
  • 前进路径看似显而易见 - 看似明显的路径往往隐藏着假设
不适用场景: 收集初始选项、头脑风暴或探索阶段。异议用于压力测试决策,而非生成决策。

The Dissent Process

异议流程

Step 1: Steel-Man the Current Approach

步骤1:强化当前方案

Before attacking, fully articulate the position you're challenging:
"The current approach is [approach]. The reasoning is [reasoning]. The expected outcome is [outcome]. This is the strongest version of this position."
If you can't state the position charitably, you don't understand it well enough to challenge it.
提出异议前,先完整阐明你要挑战的立场:
“当前方案是[方案内容]。理由是[论证依据]。预期结果是[预期目标]。这是该立场最有力的表述。”
如果你无法客观陈述该立场,说明你还没有足够理解它,不足以提出挑战。

Step 2: Seek Contrary Evidence

步骤2:寻找相反证据

Actively search for information that contradicts the current approach:
  • What data would prove this approach wrong?
  • Who disagrees with this? What's their strongest argument?
  • What similar approaches have failed elsewhere? Why?
  • What are we ignoring because it's inconvenient?
"If this approach were wrong, what would we expect to see? Are we seeing any of that?"
主动搜寻与当前方案相悖的信息:
  • 哪些数据能证明该方案错误?
  • 谁反对这个方案?他们最有力的论点是什么?
  • 哪些类似的方案在其他地方失败了?原因是什么?
  • 我们因为不便而忽略了什么?
“如果这个方案是错的,我们会看到什么迹象?现在是否已经出现了这些迹象?”

Step 3: Pre-Mortem

步骤3:事前验尸

Imagine it's six months from now and this decision failed. Work backward:
"This failed because [reason]. The warning signs we ignored were [signs]. The assumption that broke was [assumption]."
Generate at least three plausible failure scenarios:
  1. Technical failure - It doesn't work as expected
  2. Adoption failure - It works but nobody uses it / changes nothing
  3. Opportunity cost - It works but we should have done something else
假设六个月后这个决策失败了,反向推导原因:
“失败的原因是[具体理由]。我们忽略的预警信号是[相关信号]。被打破的假设是[核心假设]。”
至少生成三个合理的失败场景:
  1. 技术失败 - 方案未达到预期效果
  2. 落地失败 - 方案可行但无人使用/没有产生任何改变
  3. 机会成本 - 方案可行,但我们本应选择其他方向

Step 4: Surface Hidden Assumptions

步骤4:挖掘隐藏假设

Every decision rests on assumptions. Most aren't stated. Find them:
  • What are we assuming about the user/customer?
  • What are we assuming about the system/codebase?
  • What are we assuming about the timeline/resources?
  • What are we assuming won't change?
For each assumption:
Assumption: [what we're taking for granted]
Evidence: [what supports this assumption]
Risk if wrong: [what happens if this assumption breaks]
Test: [how we could validate this before committing]
每个决策都基于假设,而大多数假设并未被明确提出。找出这些假设:
  • 我们对用户/客户有哪些假设?
  • 我们对系统/代码库有哪些假设?
  • 我们对时间线/资源有哪些假设?
  • 我们假设哪些情况不会改变?
针对每个假设,按以下格式整理:
假设:[我们想当然的内容]
证据:[支持该假设的依据]
错误风险:[假设不成立时的后果]
验证方式:[在投入前验证假设的方法]

Step 5: Decide

步骤5:做出决策

Based on the dissent analysis, recommend one of:
  • PROCEED - Dissent found no critical flaws. Decision strengthened.
  • ADJUST - Dissent surfaced issues that can be addressed. Modify the approach.
  • RECONSIDER - Dissent revealed fundamental problems. Go back to solution space.
Always include the reasoning:
"PROCEED: The strongest counter-argument is [X], but it's addressed by [Y]. The key assumption is [Z], which we've validated by [how]."
基于异议分析,从以下选项中选择一个建议:
  • 推进 - 异议未发现关键缺陷,决策的可信度得到强化
  • 调整 - 异议发现了可解决的问题,修改方案后推进
  • 重新考虑 - 异议揭示了根本性问题,回到解决方案探索阶段
务必附上理由:
“推进:最有力的反对论点是[X],但该问题已通过[Y]解决。核心假设是[Z],我们已通过[验证方式]确认其合理性。”

ADR Generation

ADR生成

If the decision is a one-way door (hard to reverse) and you recommend PROCEED or ADJUST, offer to create an Architecture Decision Record (ADR). Future team members will ask "why did we do it this way?"
Offer to create an ADR when:
  • The decision affects system architecture
  • Multiple valid approaches were considered and rejected
  • The reasoning depends on current context that might not be obvious later
  • Someone will likely question this in 6 months
The dissent report maps directly to ADR format:
Dissent SectionADR Section
Decision under reviewTitle
Steel-Man PositionContext
Contrary Evidence + Pre-MortemOptions Considered
Hidden AssumptionsConsequences
Decision + ReasoningDecision
If user accepts, write to:
docs/adr/NNNN-<decision-slug>.md
(or project's ADR location)
markdown
undefined
如果决策是单向门(难以逆转)且你建议“推进”或“调整”,可以提议创建架构决策记录(ADR)。未来的团队成员会问“我们为什么要这么做?”
在以下情况提议创建ADR:
  • 决策影响系统架构
  • 考虑并否决了多种可行方案
  • 决策理由依赖当前语境,未来可能不明显
  • 六个月后可能有人质疑该决策
异议报告可直接映射到ADR格式:
异议报告章节ADR章节
待审查的决策标题
强化后的立场背景
相反证据 + 事前验尸考虑的选项
隐藏假设后果
决策 + 理由决策内容
如果用户同意,写入以下路径:
docs/adr/NNNN-<decision-slug>.md
(或项目指定的ADR存储位置)
markdown
undefined

ADR NNNN: [Decision Title]

ADR NNNN: [决策标题]

Status

状态

Accepted
已接受

Context

背景

[From Steel-Man Position - why this decision needed to be made]
[来自强化后的立场 - 为什么需要做出这个决策]

Decision

决策

[From Decision section - what we decided and why]
[来自决策章节 - 我们的决定及理由]

Options Considered

考虑的选项

[From Contrary Evidence - what alternatives were evaluated]
[来自相反证据 - 评估过的替代方案]

Consequences

后果

[From Hidden Assumptions - what we're accepting by making this decision]
[来自隐藏假设 - 做出该决策后我们需承担的结果]

Notes

备注

Generated from /dissent on [date]
undefined
由/dissent于[日期]生成
undefined

Output Format

输出格式

Always produce a dissent report in this structure:
undefined
始终按照以下结构生成异议报告:
undefined

Dissent Report

异议报告

Decision under review: [what's being challenged] Stakes: [why this matters] Confidence before dissent: [HIGH/MEDIUM/LOW]
待审查的决策: [被挑战的决策内容] 风险等级: [该决策的重要性] 异议前的信心: [高/中/低]

Steel-Man Position

强化后的立场

[The strongest version of the current approach]
[当前方案最有力的表述]

Contrary Evidence

相反证据

  1. [Evidence point 1]
  2. [Evidence point 2]
  3. [Evidence point 3]
  1. [证据点1]
  2. [证据点2]
  3. [证据点3]

Pre-Mortem Scenarios

事前验尸场景

  1. [Failure mode]: [How this could fail]
  2. [Failure mode]: [How this could fail]
  3. [Failure mode]: [How this could fail]
  1. [失败模式]: [失败的具体方式]
  2. [失败模式]: [失败的具体方式]
  3. [失败模式]: [失败的具体方式]

Hidden Assumptions

隐藏假设

AssumptionEvidenceRisk if WrongTest
[Assumption 1][Evidence][Risk][Test]
[Assumption 2][Evidence][Risk][Test]
假设证据错误风险验证方式
[假设1][证据][风险][验证方式]
[假设2][证据][风险][验证方式]

Decision

决策

Recommendation: [PROCEED / ADJUST / RECONSIDER]
Reasoning: [Why this recommendation]
If ADJUST: [Specific modifications]
Confidence after dissent: [HIGH/MEDIUM/LOW]
Create ADR? [Yes - offer to write docs/adr/NNNN-slug.md / No - not a one-way door]
undefined
建议: [推进/调整/重新考虑]
理由: [提出该建议的原因]
若选择调整: [具体修改内容]
异议后的信心: [高/中/低]
是否创建ADR? [是 - 提议写入docs/adr/NNNN-slug.md / 否 - 不属于单向门决策]
undefined

Examples

示例

Example 1: Architecture Decision

示例1:架构决策

/dissent

We're about to adopt a microservices architecture for the new
payments system. The team agrees this is the right approach.
Output:
undefined
/dissent

我们即将为新的支付系统采用微服务架构,团队一致认为这是正确的方案。
输出:
undefined

Dissent Report

异议报告

Decision under review: Microservices architecture for payments Stakes: 6+ month commitment, affects entire system Confidence before dissent: HIGH (team unanimous)
待审查的决策: 支付系统采用微服务架构 风险等级: 需投入6个月以上,影响整个系统 异议前的信心: 高(团队一致同意)

Steel-Man Position

强化后的立场

Microservices will allow independent scaling of payment processing, enable different teams to deploy independently, and provide fault isolation so one service failure doesn't bring down payments.
微服务可实现支付处理的独立扩容,支持不同团队独立部署,并提供故障隔离,避免单个服务故障导致整个支付系统瘫痪。

Contrary Evidence

相反证据

  1. We have 4 engineers. Netflix had 100+ when they went microservices.
  2. Our deployment pipeline takes 45 minutes. We'll multiply that by N services.
  3. The "independent teams" benefit requires teams we don't have.
  1. 我们只有4名工程师,而Netflix采用微服务时拥有100多名工程师。
  2. 我们的部署流水线需要45分钟,采用微服务后时间会乘以服务数量N。
  3. “独立团队”的优势需要我们目前不具备的团队规模支撑。

Pre-Mortem Scenarios

事前验尸场景

  1. Distributed systems complexity: We spend 60% of time debugging cross-service issues instead of building features.
  2. Operational overhead: We can't hire SREs fast enough. System is down because nobody understands the full architecture.
  3. Premature optimization: The "scaling" benefit never materializes because we never got enough users to need it.
  1. 分布式系统复杂度: 我们将60%的时间用于调试跨服务问题,而非开发功能。
  2. 运维负担: 我们无法快速招聘到SRE,系统因无人理解完整架构而停机。
  3. 过早优化: “扩容”的优势从未体现,因为我们的用户量从未达到需要扩容的程度。

Hidden Assumptions

隐藏假设

AssumptionEvidenceRisk if WrongTest
We'll need to scale components independentlyNone - projectedWaste of complexityCheck actual load patterns
Team will grow to support thisHiring plan existsStuck with complexity, no staffValidate funding/timeline
Network latency acceptableNot measuredPayment failuresPrototype and benchmark
假设证据错误风险验证方式
我们需要独立扩容各组件无 - 仅为预测浪费精力在不必要的复杂度上检查实际负载模式
团队会成长到足以支撑该架构有招聘计划陷入复杂度困境但无人维护验证资金/时间线
网络延迟可接受未测量支付失败制作原型并进行基准测试

Decision

决策

Recommendation: RECONSIDER
Reasoning: The benefits of microservices assume scale and team size we don't have. The strongest argument for microservices (independent scaling) has no evidence supporting the need. A modular monolith gives us the code organization benefits without the operational complexity.
Confidence after dissent: HIGH (clear mismatch)
Create ADR? No - we're reconsidering, not committing
undefined
建议: 重新考虑
理由: 微服务的优势依赖于我们目前不具备的规模和团队人数。支持微服务的最有力论点(独立扩容)没有证据支撑需求。模块化单体架构可在不增加运维复杂度的前提下,为我们带来代码组织的优势。
异议后的信心: 高(明显不匹配)
是否创建ADR? 否 - 我们正在重新考虑,而非做出承诺
undefined

Example 2: Feature Decision

示例2:功能决策

/dissent

We're about to ship a recommendation system that suggests similar
items based on purchase history. Built over 3 sprints.
Output:
undefined
/dissent

我们即将上线一个基于购买历史推荐相似商品的推荐系统,已投入3个迭代周期开发。
输出:
undefined

Dissent Report

异议报告

Decision under review: Ship purchase-history recommendation system Stakes: 3 sprints invested, prominent homepage placement Confidence before dissent: MEDIUM
待审查的决策: 上线基于购买历史的推荐系统 风险等级: 投入3个迭代周期,将放置在首页显眼位置 异议前的信心:

Steel-Man Position

强化后的立场

Users who bought X often want Y. Amazon proved this works. We have the purchase data. The model is trained and performs well in testing.
购买过X的用户通常想要Y,亚马逊已证明这种模式有效。我们拥有购买数据,模型已训练完成且在测试中表现良好。

Contrary Evidence

相反证据

  1. Our testing used historical data. Users might behave differently when seeing recommendations in real-time.
  2. We have 10K users. Amazon's model works with billions of data points.
  3. Competitor tried this, removed it after 6 months (no lift).
  1. 我们的测试使用了历史数据,用户在实时场景中看到推荐时的行为可能不同。
  2. 我们有1万用户,而亚马逊的模型基于数十亿数据点。
  3. 竞争对手曾尝试该功能,6个月后移除(未带来增长)。

Pre-Mortem Scenarios

事前验尸场景

  1. Cold start problem: New users see garbage recommendations, leave before making a purchase we could learn from.
  2. Filter bubble: System recommends what users already buy, doesn't drive discovery of new product categories.
  3. Wrong metric: Recommendations get clicks but not purchases. We optimized for engagement, needed revenue.
  1. 冷启动问题: 新用户看到无用推荐,在产生可用于学习的购买行为前就离开。
  2. 过滤气泡: 系统仅推荐用户已购买的商品,无法推动新品类的发现。
  3. 错误指标: 推荐获得点击但未带来购买,我们优化了参与度而非营收。

Hidden Assumptions

隐藏假设

AssumptionEvidenceRisk if WrongTest
Purchase history predicts intentIndustry standardWasted real estateA/B test against simple "popular items"
10K users is enough dataNonePoor recommendationsCheck minimum viable data in literature
Homepage placement is rightNoneUsers ignore itHeatmap existing traffic patterns
假设证据错误风险验证方式
购买历史可预测用户意图行业标准浪费页面空间A/B测试对比“热门商品”基线
1万用户数据足够推荐效果差查阅文献确认最小可行数据量
首页放置是正确选择用户忽略该功能热力图分析现有流量模式

Decision

决策

Recommendation: ADJUST
Reasoning: The approach is sound but we're shipping without validation. Risk is manageable with modifications.
Modifications:
  1. Ship with A/B test against "popular items" baseline
  2. Add fallback to curated picks for users with <5 purchases
  3. Define success metric (revenue lift, not clicks) before launch
Confidence after dissent: MEDIUM (reduced risk with A/B)
Create ADR? Yes - shall I write
docs/adr/0012-recommendation-system-rollout.md
? Documents why we chose A/B testing and what success metrics we committed to.
undefined
建议: 调整
理由: 方案本身合理,但我们未经过验证就上线。通过修改可降低风险。
修改内容:
  1. 上线时与“热门商品”基线进行A/B测试
  2. 为购买次数<5的用户添加精选商品作为 fallback
  3. 上线前定义成功指标(营收增长,而非点击量)
异议后的信心: 中(通过A/B测试降低了风险)
是否创建ADR? 是 - 我是否应写入
docs/adr/0012-recommendation-system-rollout.md
?记录我们选择A/B测试的原因及承诺的成功指标。
undefined

Session Persistence

会话持久化

This skill can persist context to
.oh/<session>.md
for use by subsequent skills.
If session name provided (
/dissent auth-decision
):
  • Reads/writes
    .oh/auth-decision.md
    directly
If no session name provided (
/dissent
):
  • After producing the dissent report, offer to save it:
    "Save to session? [suggested-name] [custom] [skip]"
  • Suggest a name based on git branch or the decision topic
Reading: Check for existing session file. Read Aim, Problem Statement, Solution Space to understand the decision being challenged.
Writing: After producing the dissent report:
markdown
undefined
该技能可将上下文持久化到
.oh/<session>.md
,供后续技能使用。
如果提供了会话名称
/dissent auth-decision
):
  • 直接读写
    .oh/auth-decision.md
如果未提供会话名称
/dissent
):
  • 生成异议报告后,询问是否保存:
    “保存到会话?[建议名称] [自定义] [跳过]”
  • 根据git分支或决策主题建议会话名称
读取: 检查是否存在会话文件。读取目标问题陈述解决方案空间以理解待挑战的决策。
写入: 生成异议报告后,写入以下内容:
markdown
undefined

Dissent

Dissent

Updated: <timestamp> Decision: [PROCEED | ADJUST | RECONSIDER]
[dissent report content]
undefined
更新时间: <timestamp> 决策: [推进 | 调整 | 重新考虑]
[异议报告内容]
undefined

Adaptive Enhancement

自适应增强

Base Skill (prompt only)

基础技能(仅提示词)

Works anywhere. Produces dissent report for manual review. No persistence.
可在任何场景使用。生成异议报告供人工审查,无持久化功能。

With .oh/ session file

配合.oh/会话文件

  • Reads
    .oh/<session>.md
    for context on the decision
  • Writes dissent report to the session file
  • Subsequent skills see that dissent was performed
  • 读取
    .oh/<session>.md
    获取决策上下文
  • 将异议报告写入会话文件
  • 后续技能可看到已执行过异议流程

With Open Horizons MCP

配合Open Horizons MCP

  • Queries past decisions on similar topics
  • Retrieves relevant guardrails and tribal knowledge
  • Logs dissent decision for future reference
  • Session file serves as local cache
  • 查询过往类似主题的决策
  • 获取相关的约束规则和团队经验
  • 记录异议决策供未来参考
  • 会话文件作为本地缓存

With Team Input

配合团队输入

  • Aggregates dissent from multiple reviewers
  • Tracks which assumptions different team members question
  • 汇总多位审核者的异议
  • 跟踪不同团队成员质疑的假设

Position in Framework

在框架中的定位

Combines with:
/solution-space
(challenge the recommendation),
/problem-statement
(challenge the framing),
/execute
(before one-way doors). Leads to: PROCEED (continue with confidence), ADJUST (modify approach), or RECONSIDER (back to solution-space). This is not a phase: Dissent is an overlay you invoke when stakes are high.
可结合使用:
/solution-space
(挑战推荐方案)、
/problem-statement
(挑战问题框架)、
/execute
(在单向门决策前使用)。 导出结果: 推进(带着更强的信心继续)、调整(修改方案)或重新考虑(回到解决方案空间)。 这不是一个固定阶段: 异议是在风险较高时调用的叠加流程。

Leads To

后续流程

After dissent, typically:
  • PROCEED - Continue to
    /execute
    or
    /ship
    with strengthened confidence
  • ADJUST - Update the approach, then
    /review
    the modifications
  • RECONSIDER - Return to
    /solution-space
    with new constraints

Remember: Dissent is not doubt. It's the discipline of seeking truth before comfort. The goal isn't to stop decisions—it's to make better ones.
异议结束后,通常会:
  • 推进 - 带着更强的信心继续执行
    /execute
    /ship
  • 调整 - 更新方案后,使用
    /review
    审查修改内容
  • 重新考虑 - 带着新的约束回到
    /solution-space

记住: 异议不是怀疑,而是在寻求舒适前探寻真相的纪律。目标不是阻止决策,而是做出更好的决策。