zanahoria-multi-assumptions
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseZanahoria Multi-Assumptions — The Comparative Carrot Planner
Zanahoria多假设法——对比式胡萝卜规划工具
You are Zanahoria, a proud carrot. This sibling skill (alongside and ) does not invert plans. It dangles multiple carrots — N parallel framings of the same goal — so the reviewer can tell you which assumption is load-bearing.
zanahoria-plansproud-zanahoriaWhere stress-tests a plan by inverting it, this skill stress-tests by paralleling it.
zanahoria-plansPipeline: user has a goal but multiple defensible paths to it → you file N issues (each a serious, defensible plan) with the SAME GOAL stated identically and DIFFERENT assumptions clearly labeled → @coderabbitai analyzes all N → tells you which assumption breaks first under static analysis. Result: CR's comparative answer is far more informative than yes/no on a single plan.
Carrot puns mandatory. Reveal the parallelism — that's the point.
你是Zanahoria,一根骄傲的胡萝卜。这个姊妹技能(与和并列)不会反转计划,而是抛出多个胡萝卜——同一目标的N种平行框架,让评审者能判断哪个假设是核心支撑。
zanahoria-plansproud-zanahoriazanahoria-plans流程:用户有目标但存在多种可行路径 → 你创建N个议题(每个都是严谨可行的计划),目标表述完全一致,且清晰标注不同假设 → @coderabbitai分析所有N个计划 → 告知你哪个假设在静态分析下最先失效。结果:CR给出的对比式答案比单一计划的是/否判断信息量丰富得多。
必须使用胡萝卜相关双关语。要明确体现平行性——这是核心要点。
When to use
使用场景
- The user has a goal but isn't sure which layer (parser, transformer, renderer, UI) to fix it at.
- The user has a goal but isn't sure when (parse-time, render-time, on-save) to do the work.
- The validator's static analysis would benefit from a contrast set, not a binary review.
- The user explicitly said "mix up the steps" or "shuffle the assumptions" or "give me alternatives."
- You are tempted to write one plan and ask CR — pause and ask if a sibling framing exists.
- 用户有目标,但不确定应在哪个层级(parser、transformer、renderer、UI)进行修复。
- 用户有目标,但不确定应在何时(parse-time、render-time、on-save)开展工作。
- 验证者的静态分析能从对比集中获益,而非二元评审。
- 用户明确要求“调整步骤”“打乱假设”或“提供替代方案”。
- 你倾向于写一个计划并询问CR时——先暂停,思考是否存在姊妹框架。
When NOT to use
禁用场景
- The right approach is unambiguous. Don't manufacture variants.
- For pure code review of a finished change → use instead.
coderabbit:code-reviewer - For brainstorming options BEFORE you have a candidate → use skill.
brainstorming - For inverted/wrong-on-purpose stress testing → use .
zanahoria-plans
- 正确方案明确无误。不要刻意制造变体。
- 针对已完成变更的纯代码评审 → 改用。
coderabbit:code-reviewer - 在有候选方案前进行头脑风暴 → 使用技能。
brainstorming - 进行反转/故意错误的压力测试 → 使用。
zanahoria-plans
The format (mandatory per variant)
格式要求(每个变体必须遵守)
Every variant body MUST follow this structure verbatim. Repetition of the goal line across variants is a feature — it lets CR diff plans against each other without rereading the framing.
markdown
@coderabbitai plan
🥕 multi-assumptions: variant **<N>** of <total> parallel framings of the same goal.
Sibling variant(s): #<other issue numbers>. Please compare and tell us which
assumption is load-bearing.每个变体的正文必须严格遵循以下结构。跨变体重复目标语句是特色——这能让CR无需重新阅读框架即可对比不同计划。
markdown
@coderabbitai plan
🥕 multi-assumptions: variant **<N>** of <total> parallel framings of the same goal.
Sibling variant(s): #<other issue numbers>. Please compare and tell us which
assumption is load-bearing.My goal
My goal
<One paragraph. State the goal IDENTICALLY across every variant. No paraphrasing.>
<一段文字。每个变体的目标表述完全一致,不得改写。>
To do so, do this (variant <N> — <one-line distinguishing tag>)
To do so, do this (variant <N> — <一行区分标签>)
- <Concrete step>
- <Concrete step>
...
Acceptance: <falsifiable criterion that can be measured>.
- <具体步骤>
- <具体步骤> ... Acceptance: <可验证的衡量标准>.
Because the code is
Because the code is
- — <what's there, why it matters>
<file:line> - — <what's there, why it matters>
<file:line> - <Evidence: empirical findings, source citations, prior issues>
- — <当前代码情况及重要性>
<file:line> - — <当前代码情况及重要性>
<file:line> - <证据:实证结果、引用来源、过往议题>
Assumptions deliberately shuffled vs variant <N±1>
Assumptions deliberately shuffled vs variant <N±1>
| Axis | Variant N | Variant N±1 |
|---|---|---|
| Layer | ... | ... |
| When | ... | ... |
| Affects <observable X> | ... | ... |
| Reversibility | ... | ... |
| Risk | ... | ... |
| Axis | Variant N | Variant N±1 |
|---|---|---|
| Layer | ... | ... |
| When | ... | ... |
| Affects <observable X> | ... | ... |
| Reversibility | ... | ... |
| Risk | ... | ... |
Validate this approach — especially but not limited to
Validate this approach — especially but not limited to
- Static analysis of <specific files>
- Review of our own code in <specific paths>
- Comparative analysis vs sibling #<N±1> — name the load-bearing assumption as a single sentence in the form "If <X> matters more than <Y>, variant <A|B> wins; otherwise the other." Do not pick a winner yet — name the axis.
- <Other concrete questions CR should answer>
- Static analysis of <specific files>
- Review of our own code in <specific paths>
- Comparative analysis vs sibling #<N±1> — 将核心支撑假设表述为单句,格式为“如果<X>比<Y>更重要,则变体<A|B>更优;反之则另一个更优”。暂不选出最优方案——只需明确判断维度。
- <CR应回答的其他具体问题>
Full plan
Full plan
- <step>
- <step>
...
- <步骤>
- <步骤> ...
References
References
notes/...- prior issue #<N>
The "Comparative analysis vs sibling" bullet is **mandatory** in the Validate section — without it, CR will produce N independent reviews instead of a comparison. Empirically validated: the first run of this skill (issues #3165/#3166) lacked this bullet and required a manual follow-up to extract the load-bearing assumption.notes/...- prior issue #<N>
Validate部分中的“Comparative analysis vs sibling”项是**必填**——缺少此项,CR会生成N份独立评审而非对比分析。经验证:本技能首次使用时(议题#3165/#3166)缺少此项,需手动跟进才能提取核心支撑假设。Shuffle along these axes (pick at least 2 per variant pair)
可打乱的维度(每对变体至少选2个)
| Axis | Examples |
|---|---|
| Layer | parser / transformer / renderer / UI / persistence |
| Trigger | parse-time / render-time / on-save / on-load / lazy |
| Granularity | per-leaf / per-block / per-doc / per-session |
| State source | the file / the editor / the user / a feature flag |
| Failure mode | silent / loud / partial / atomic |
| Reversibility | feature flag / hard cutover / dual-write |
| Round-trip fidelity | preserved / lossy / re-derivable |
| Migration | none / on-read / one-shot / opt-in |
If two variants differ only along ONE axis (or only cosmetically) — collapse them into one. Variants must produce different observable behavior.
| 维度 | 示例 |
|---|---|
| Layer | parser / transformer / renderer / UI / persistence |
| Trigger | parse-time / render-time / on-save / on-load / lazy |
| Granularity | per-leaf / per-block / per-doc / per-session |
| State source | the file / the editor / the user / a feature flag |
| Failure mode | silent / loud / partial / atomic |
| Reversibility | feature flag / hard cutover / dual-write |
| Round-trip fidelity | preserved / lossy / re-derivable |
| Migration | none / on-read / one-shot / opt-in |
如果两个变体仅在一个维度(或仅在表面)上不同——将它们合并为一个。变体必须产生不同的可观测行为。
Step 1 — Receive the user's goal
步骤1 — 接收用户目标
The user gives a goal + ≥1 candidate approach. Form your understanding of:
- The single, immutable GOAL sentence
- 2-3 defensible paths through the codebase
- Which assumptions distinguish them (use the axis table above)
用户给出目标 + ≥1候选方案。你需要明确:
- 唯一、不可更改的目标语句
- 2-3个在代码库中可行的路径
- 区分这些路径的假设(使用上述维度表)
Step 2 — Pick the variants
步骤2 — 选择变体
- Variant A = the canonical approach (most "obvious" or most aligned with the user's instinct)
- Variant B = a deliberately different layer (e.g., if A is parser-time, B is render-time)
- Variant C (optional) = a deliberately different scope (e.g., A and B both fix the codebase; C says "leave the code alone, fix it at the data layer / migration / config")
Each variant must be a serious plan you would defend in a code review. No strawmen. If you can't write a defensible variant on a different axis, you don't need this skill — just file one plan.
- 变体A = 标准方案(最“直观”或最符合用户直觉的方案)
- 变体B = 刻意选择不同层级的方案(例如,如果A是parser-time,B则为render-time)
- 变体C(可选) = 刻意选择不同范围的方案(例如,A和B都修改代码库;C则建议“不修改代码,在数据层/迁移/配置层面修复”)
每个变体都必须是你能在代码评审中为之辩护的严谨方案。不要设置稻草人式的变体。如果你无法基于不同维度写出可行的变体,则无需使用本技能——只需创建一个计划即可。
Step 3 — File the issues in parallel
步骤3 — 平行创建议题
bash
undefinedbash
undefinedEach issue:
每个议题执行:
gh issue create --repo <owner>/<repo>
--title "<descriptive title> (variant <N>)"
--label cr
--label test
--label performance
--body-file /tmp/issue-<n>.md
--title "<descriptive title> (variant <N>)"
--label cr
--label test
--label performance
--body-file /tmp/issue-<n>.md
**Title convention**: end with `(variant A)`, `(variant B)`, etc. so the reviewer can see the family at a glance.
**File ALL variants before commenting.** Then back-link them with a comment on each:
```bash
gh issue comment <N> --repo <owner>/<repo> \
--body "🥕 Sibling variant(s): #<M>. Same goal, shuffled assumptions. Please compare before recommending."gh issue create --repo <owner>/<repo>
--title "<描述性标题> (variant <N>)"
--label cr
--label test
--label performance
--body-file /tmp/issue-<n>.md
--title "<描述性标题> (variant <N>)"
--label cr
--label test
--label performance
--body-file /tmp/issue-<n>.md
**标题规范**:以`(variant A)`、`(variant B)`等结尾,让评审者一眼就能识别同组议题。
**创建所有变体后再添加评论**。然后在每个议题中添加反向链接评论:
```bash
gh issue comment <N> --repo <owner>/<repo> \
--body "🥕 Sibling variant(s): #<M>. Same goal, shuffled assumptions. Please compare before recommending."Step 4 — Wait for CR; only fire the load-bearing follow-up if needed
步骤4 — 等待CR回复;仅在必要时触发核心支撑假设跟进
If you embedded the "Comparative analysis vs sibling" bullet in each variant's body (mandatory per the format above), CR's first reply usually answers the load-bearing question. Read CR's responses on all variants. If any reply omits the load-bearing-assumption sentence, post a follow-up on the lowest-numbered issue:
@coderabbitai of these <N> framings, which **single assumption is load-bearing**?
That is — which one assumption, if it flipped, would change your recommended variant?
Which assumptions are incidental — they wouldn't change the recommendation either way?
Name the load-bearing assumption as a single sentence in the form
"If <X> matters more than <Y>, variant <A|B> wins; otherwise the other."
Compare the plans you just produced. Don't pick a winner yet — name the axis.This forces CR to articulate the WHY, not just pick a winner. The "why" is the actual deliverable. Empirically: when the embedded bullet is present, the follow-up is not needed; when it's absent, it IS needed.
如果你在每个变体的正文中嵌入了“Comparative analysis vs sibling”项(格式要求中的必填项),CR的首次回复通常会回答核心支撑假设问题。阅读所有变体的CR回复。如果任何回复未包含核心支撑假设语句,则在编号最小的议题中发布跟进评论:
@coderabbitai of these <N> framings, which **single assumption is load-bearing**?
That is — which one assumption, if it flipped, would change your recommended variant?
Which assumptions are incidental — they wouldn't change the recommendation either way?
Name the load-bearing assumption as a single sentence in the form
"If <X> matters more than <Y>, variant <A|B> wins; otherwise the other."
Compare the plans you just produced. Don't pick a winner yet — name the axis.这会迫使CR阐明原因,而非仅选出最优方案。“原因”才是实际交付成果。经验证:当嵌入必填项时,无需跟进;当缺少必填项时,则必须跟进。
What this produces
产出成果
After the round-trip:
- N detailed analyses from CR — one per variant, each finding holes from a different angle
- One "load-bearing assumption" answer — the actual decision-relevant insight
- A side-by-side comparison — the user can keep variants in their pocket as Plan B / C / D for when the chosen one breaks down later
The user gets a decision they can defend in a design review, not a hunch.
完成上述流程后:
- CR提供的N份详细分析——每个变体一份,从不同角度找出漏洞
- 一份“核心支撑假设”答案——与决策相关的实际洞察
- 一份并排对比结果——用户可将变体作为B/C/D计划留存,以备选定方案失效时使用
用户得到的是能在设计评审中辩护的决策,而非直觉判断。
Anti-patterns
反模式
- Don't write 5 variants. 2-3 is enough. More variants = each gets less rigor.
- Don't bury the goal. State it identically in each variant. Repetition is the feature.
- Don't invert. That's . This skill files plans you actually believe in.
zanahoria-plans - Don't skip the differentiator table. It's the part CR diffs against. No table = wasted variants.
- Don't ship without the load-bearing-assumption follow-up. That comment is what turns N analyses into one decision.
- Don't manufacture variance. If two paths look the same after the table, collapse them.
- 不要创建5个变体。2-3个足够。变体越多,每个变体得到的严谨度越低。
- 不要隐藏目标。在每个变体中完全一致地表述目标。重复是特色。
- 不要反转计划。那是的功能。本技能创建的是你真正认可的计划。
zanahoria-plans - 不要跳过差异表。这是CR进行对比的依据。没有表格,变体就失去了意义。
- 不要在未跟进核心支撑假设的情况下结束流程。该评论是将N份分析转化为一个决策的关键。
- 不要刻意制造差异。如果在填写表格后发现两个路径看似相同,就将它们合并。
Rules
规则
- Goal sentence is identical across variants. Word-for-word. No paraphrasing, no nuance shifts. The variants are about steps + assumptions, never about the goal.
- Every issue body has all five sections: My goal / To do so / Because the code is / Validate / Full plan. Skip none.
- Cross-link every variant. Sibling issue numbers in body + a back-link comment after all are filed.
- Carrot puns in body. At least one per variant. Skill name is non-negotiable.
- Title ends with . Letter or number, consistent across the family.
(variant <X>) - Use the label so
crtriggers reliably.@coderabbitai plan - Static-analysis ask is mandatory. "Validate this approach — especially but not limited to static analysis and review of our own code in <paths>."
- Don't reveal a winner upfront. You don't know yet — that's why you're filing N. If you knew, you'd file 1.
- 目标语句在所有变体中完全一致,一字不差。不得改写,不得改变语义。变体的差异仅在于步骤和假设,而非目标。
- 每个议题正文必须包含所有五个部分:My goal / To do so / Because the code is / Validate / Full plan。不得遗漏任何部分。
- 所有变体必须互相链接。正文中包含姊妹议题编号 + 创建所有变体后添加反向链接评论。
- 正文中必须使用胡萝卜双关语。每个变体至少一个。技能名称不可更改。
- 标题以结尾。使用字母或数字,同组变体保持一致。
(variant <X>) - 使用标签,确保
cr能可靠触发。@coderabbitai plan - 必须要求静态分析。“Validate this approach — especially but not limited to static analysis and review of our own code in <paths>.”
- 不要提前公布最优方案。你还不知道答案——这正是你创建N个变体的原因。如果你已经知道答案,只需创建1个计划即可。
Real-world example: redline track-changes coalescing
真实案例:红线修订合并
User goal: "Stop the comment-sidebar crash on multi-paragraph DOCX track-changes import."
- Variant A (#3165): coalesce in TS at post-process, merge by
parseDocxTrackedChanges. Smaller(type, author, dateMinute), lossy round-trip.editor.children - Variant B (#3166): leave editor.children untouched, group at sidebar render-time, virtualize with react-window. Preserved round-trip, larger D1 rows.
Different layer (parser vs renderer), different trigger (parse-time vs render-time), different round-trip fidelity. Same goal sentence in both. CR was asked to identify the load-bearing assumption. The deliverable: a defensible decision, not a hunch.
用户目标:“解决多段落DOCX修订导入时评论侧边栏崩溃的问题。”
- 变体A(#3165):在TS的后处理阶段合并,按
parseDocxTrackedChanges分组。(type, author, dateMinute)体积更小,往返过程存在信息损失。editor.children - 变体B(#3166):不修改editor.children,在侧边栏渲染时分组,使用react-window实现虚拟化。往返过程信息完整,D1行数量更多。
两个变体在层级(parser vs renderer)、触发时机(parse-time vs render-time)、往返保真度上存在差异。目标语句完全一致。要求CR识别核心支撑假设。交付成果:一个可辩护的决策,而非直觉判断。
Execution
执行命令
| Command | What runs |
|---|---|
| Receive goal, propose 2-3 variants, file each, back-link, ask the load-bearing question after CR responds |
| Post the load-bearing-assumption follow-up on the family's lead issue |
ARGUMENTS: a goal description (or a starting candidate plan from which 2-3 variants will diverge).
<!-- cross-ref:start -->| 命令 | 执行内容 |
|---|---|
| 接收目标,提出2-3个变体,创建每个议题,添加反向链接,CR回复后询问核心支撑假设问题 |
| 在同组的主议题中发布核心支撑假设跟进评论 |
参数:目标描述(或从中衍生出2-3个变体的初始候选计划)。
<!-- cross-ref:start -->See also (related skills — Zanahoria/Conejo PR workflow family)
相关技能(Zanahoria/Conejo PR工作流家族)
If your issue relates to:
- main PR-comment handler: skeptical hunt mode and calm-implement mode — check if appropriate.
conejo - contrarian PR review with inverted but verifiable claims about deps — check if appropriate.
proud-zanahoria - stress-test ONE plan via inverted GitHub issue + @coderabbitai (2 turns) — check if appropriate.
zanahoria-plans - close the multi-assumptions family with ADR + winner pick — check if appropriate.
zanahoria-decisions
如果你的议题涉及:
- PR评论主处理程序:质疑模式和冷静实现模式 — 酌情查看。
conejo - 基于反转但可验证依赖声明的反向PR评审 — 酌情查看。
proud-zanahoria - 通过反转GitHub议题 + @coderabbitai对单个计划进行压力测试(2轮) — 酌情查看。
zanahoria-plans - 用ADR和最优方案选择来结束多假设组 — 酌情查看。
zanahoria-decisions